/*--------------------------------------------------------------------*/ /* c o m m 3 4 . c */ /* */ /* Set/report communications port addresses */ /* */ /* Modified to report addresses and report usage by Andrew H. */ /* Derbyshire. Changes Copyright (c) 1992, Andrew H. */ /* Derbyshire. */ /*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/ /* RCS Information */ /*--------------------------------------------------------------------*/ /* * $Id: COMM34.C 1.2 1993/04/11 00:33:54 ahd Exp $ * * Revision history: * $Log: COMM34.C $ * Revision 1.2 1993/04/11 00:33:54 ahd * Global edits for year, TEXT, etc. * * Revision 1.1 1992/11/15 04:29:22 ahd * Initial revision * * Revision 1.2 1992/04/27 00:38:58 ahd * Add RCS header * */ static char rcsid[] = "$Id: COMM34.C 1.2 1993/04/11 00:33:54 ahd Exp $"; /* * Compiler: Microsoft C 5.1 * * COM34.C - set COM3 - COM4 addresses * * This program inserts the addresses specified by argv[1] - argv[2] * into the BIOS table at 0040:0004 (COM3 - COM4) * * Usage: COMM4 xxx yyy * where xxx is COM3 address (hex), yyy is COM4 address (hex) */ /*--------------------------------------------------------------------*/ /* C standard include files */ /*--------------------------------------------------------------------*/ #include #include /*--------------------------------------------------------------------*/ /* UUPC/extended include files */ /*--------------------------------------------------------------------*/ #include "lib.h" #include "timestmp.h" #define MK_FP(seg,ofs) ((void far *)(((unsigned long)(seg) << 16) | (ofs))) static struct addr far *ports = (struct addr far *) MK_FP(0x40, 0); unsigned htoi( char * buf ); static void status( void ); static void usage( void ); struct addr { unsigned com[4]; }; /*--------------------------------------------------------------------*/ /* m a i n */ /* */ /* Main program */ /*--------------------------------------------------------------------*/ void main(int argc, char **argv) { unsigned htoi(); /*--------------------------------------------------------------------*/ /* Report our parentage */ /*--------------------------------------------------------------------*/ banner( argv ); switch( argc ) { case 3: ports->com[3] = htoi(argv[2]); case 2: ports->com[2] = htoi(argv[1]); break; default: usage(); } /*--------------------------------------------------------------------*/ /* Report new status and exit */ /*--------------------------------------------------------------------*/ status(); exit( 0 ); } /* main */ /*--------------------------------------------------------------------*/ /* s t a t u s */ /* */ /* Report current serial port status */ /*--------------------------------------------------------------------*/ static void status( void ) { int port = 0; printf("Communications ports: "); while( port < 4 ) { if (port) printf(", "); if (ports->com[port]) printf("COM%d = %x",port+1, ports->com[port] ); else printf("COM%d = (none)",port+1); port++; } /* while */ putchar('\n'); } /* status */ /*--------------------------------------------------------------------*/ /* h t o i */ /* */ /* Convert printable hex to integer */ /*--------------------------------------------------------------------*/ unsigned htoi(char *buf) { unsigned sum; char c; for (sum = 0; (c = *buf) != '\0'; buf++) { if ((c >= 'a') && (c <= 'f')) c = c - 'a' + 'A'; if ((c >= 'A') && (c <= 'F')) sum = (sum * 16) + (c - 'A' + 10); else if ((c >= '0') && (c <= '9')) sum = (sum * 16) + (c - '0'); else { printf("Invalid port address %s, program exiting.\n",buf); usage(); } } return(sum); } /* htoi */ /*--------------------------------------------------------------------*/ /* u s a g e */ /* */ /* Report program usage */ /*--------------------------------------------------------------------*/ static void usage( void ) { printf( "This program alters the BIOS information for COM ports 3 and 4 for\n" "use by UUPC/extended, MS-Kermit and other programs, and reports the\n" "addresses of all installed COM ports. Usage:\n\n" "\tCOMM34\taddr3 [addr4]\n\n" "Where addr3 is the hexadecimal address for port 3 (usually 2E8) and\n" "Where addr4 is the optional hexadecimal address for port 4 (usually\n" "2E0).\n\n"); status(); exit(1); }