home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 December / simtel1292_SIMTEL_1292_Walnut_Creek.iso / msdos / sysutl / addport.arc / ADDPORT.C next >
C/C++ Source or Header  |  1989-03-02  |  3KB  |  122 lines

  1. #include "stdio.h"
  2.  
  3. main(argc, argv)
  4.  
  5. int    argc;
  6. char  *argv[];
  7.  
  8. {
  9.    int port, address, test;
  10.    char current;
  11.  
  12.    char far *c = (char far *)0x411;
  13.    int far *i0 = (int far *)0x400;
  14.    int far *i1 = (int far *)0x402;
  15.    int far *i2 = (int far *)0x404;
  16.    int far *i3 = (int far *)0x406;
  17.  
  18.    current = *c;
  19.    test = current & 15;
  20.  
  21.    if (argc != 3)
  22.    {
  23.       puts("\nUsage: ADDPORT <COMx> <BASE_ADDRESS_IN_HEX>");
  24.       puts("       (example: addport com3 3e8)\n");
  25.       puts("NOTE: if port already exists program may be used to change base address\n\n");
  26.  
  27.       puts("               CURRENT CONFIGURATION:\n");
  28.  
  29.       if (test <= 1){
  30.          puts("\n                     No Serial Ports installed!");
  31.          exit(99);}
  32.  
  33.       printf("                     COM1 : %x\n", *i0);
  34.       
  35.       if (test >= 4){
  36.          printf("                     COM2 : %x\n", *i1);}
  37.  
  38.       if (test >= 6){
  39.          printf("                     COM3 : %x\n", *i2);}
  40.  
  41.       if (test >= 8){
  42.          printf("                     COM4 : %x\n", *i3);}
  43.  
  44.       exit (99);
  45.    }
  46.  
  47.    else
  48.       port = (argv[1][3]-'1');
  49.  
  50.    if (port < 0 || port > 3)
  51.    {
  52.       puts("\n\nInvalid port: only can add COM1, COM2, COM3 or COM4\n\n");
  53.       exit (99);
  54.    }
  55.  
  56.  
  57.    sscanf(argv[2],"%x",&address);
  58.  
  59.    switch (port)
  60.     {
  61.       case 0 :
  62.  
  63.          if (test <= 1){
  64.          current = current | 2;}
  65.  
  66.          *i0 = address;
  67.          break;
  68.  
  69.  
  70.       case 1 :
  71.          if (*i0 == 0){
  72.          puts("\nYou must install COM1 first!");
  73.          exit(99);}
  74.  
  75.          if (test < 4){
  76.          current = (current | 4) ^ 2;}
  77.  
  78.          *i1 = address;
  79.          break;
  80.  
  81.  
  82.       case 2 :
  83.          if (*i1 == 0){
  84.          puts("\nYou must install COM2 first!");
  85.          exit(99);}
  86.  
  87.          if (test < 6){
  88.          current = current | 2;}
  89.  
  90.           *i2 = address;
  91.          break;
  92.  
  93.  
  94.       case 3 :
  95.          if (*i2 == 0){
  96.          puts("\nYou must install COM3 first!");
  97.          exit(99);}
  98.  
  99.          if (test < 8){
  100.           current = current ^ 14;}
  101.  
  102.           *i3 = address;
  103.     }
  104.  
  105.    *c = current;
  106.    test = current & 15;
  107.  
  108.    puts("\n             NEW CONFIGURATION:\n");
  109.    if (test > 1){
  110.    printf("                     COM1 : %x\n", *i0);}
  111.  
  112.    if (test >=4){
  113.    printf("                     COM2 : %x\n", *i1);}
  114.  
  115.    if (test >= 6){
  116.    printf("                     COM3 : %x\n", *i2);}
  117.  
  118.    if (test >= 8){
  119.    printf("                     COM4 : %x\n", *i3);}
  120.  
  121. }
  122.