* nlm/gdbserve.c: merge in command line argument parsing changes

and bug fixes made to i386-nlmstub.c.
This commit is contained in:
J.T. Conklin 1994-07-27 22:05:46 +00:00
parent e356aae315
commit 1e47d512c5
2 changed files with 118 additions and 23 deletions

View File

@ -1,5 +1,8 @@
Wed Jul 27 14:34:42 1994 J.T. Conklin (jtc@phishhead.cygnus.com)
* nlm/gdbserve.c: merge in command line argument parsing changes
and bug fixes made to i386-nlmstub.c.
* i386-nlmstub.c: The returnLength field must be initialized
before portConfig is passed to AIOGetPortConfiguration.
Compare command line arguments with strnicmp(); args are

View File

@ -932,13 +932,40 @@ handle_exception (frame)
}
}
char *baudRates[] = { "50", "75", "110", "134.5", "150", "300", "600", "1200",
"1800", "2000", "2400", "3600", "4800", "7200", "9600",
"19200", "38400", "57600", "115200" };
char *progname;
char dataBits[] = "5678";
struct bitRate {
BYTE bitRate;
const char *bitRateString;
};
char *stopBits[] = { "1", "1.5", "2" };
struct bitRate bitRateTable[] =
{
{ AIO_BAUD_50 , "50" },
{ AIO_BAUD_75 , "75" },
{ AIO_BAUD_110 , "110" },
{ AIO_BAUD_134p5 , "134.5" },
{ AIO_BAUD_150 , "150" },
{ AIO_BAUD_300 , "300" },
{ AIO_BAUD_600 , "600" },
{ AIO_BAUD_1200 , "1200" },
{ AIO_BAUD_1800 , "1800" },
{ AIO_BAUD_2000 , "2000" },
{ AIO_BAUD_2400 , "2400" },
{ AIO_BAUD_3600 , "3600" },
{ AIO_BAUD_4800 , "4800" },
{ AIO_BAUD_7200 , "7200" },
{ AIO_BAUD_9600 , "9600" },
{ AIO_BAUD_19200 , "19200" },
{ AIO_BAUD_38400 , "38400" },
{ AIO_BAUD_57600 , "57600" },
{ AIO_BAUD_115200, "115200" },
{ -1, NULL }
};
char dataBitsTable[] = "5678";
char *stopBitsTable[] = { "1", "1.5", "2" };
char parity[] = "NOEMS";
@ -954,30 +981,94 @@ main (argc, argv)
char **argv;
{
int hardware, board, port;
BYTE bitRate;
BYTE dataBits;
BYTE stopBits;
BYTE parityMode;
LONG err;
struct debuggerStructure s;
int cmdindx;
char *cmdlin;
int i;
/* Use the -B option to invoke the NID if you want to debug the stub. */
/* set progname */
progname = "gdbserve";
if (argc > 1 && strcmp(argv[1], "-B") == 0)
/* set default serial line */
hardware = -1;
board = 0;
port = 0;
/* set default serial line characteristics */
bitRate = AIO_BAUD_9600;
dataBits = AIO_DATA_BITS_8;
stopBits = AIO_STOP_BITS_1;
parityMode = AIO_PARITY_NONE;
cmdindx = 0;
for (argc--, argv++; *argv; argc--, argv++)
{
Breakpoint(argc);
++argv, --argc;
char *bp;
char *ep;
if (strnicmp(*argv, "BAUD=", 5) == 0)
{
struct bitRate *brp;
bp = *argv + 5;
for (brp = bitRateTable; brp->bitRate != (BYTE) -1; brp++)
{
if (strcmp(brp->bitRateString, bp) == 0)
{
bitRate = brp->bitRate;
break;
}
}
if (brp->bitRateString == NULL)
{
fprintf(stderr, "%s: %s: unknown or unsupported bit rate",
progname, bp);
exit (1);
}
}
else if (strnicmp(*argv, "NODE=", 5) == 0)
{
bp = *argv + 5;
board = strtol (bp, &ep, 0);
if (ep == bp || *ep != '\0')
{
fprintf (stderr, "%s: %s: expected integer argument\n",
progname, bp);
exit(1);
}
}
else if (strnicmp(*argv, "PORT=", 5) == 0)
{
bp = *argv + 5;
port = strtol (bp, &ep, 0);
if (ep == bp || *ep != '\0')
{
fprintf (stderr, "%s: %s: expected integer argument\n",
progname, bp);
exit(1);
}
}
else
{
break;
}
cmdindx++;
}
if (argc < 4)
if (argc == 0)
{
fprintf (stderr,
"Usage: load gdbserve board port program [arguments]\n");
"Usage: load %s [options] program [arguments]\n", progname);
exit (1);
}
hardware = -1;
board = strtol (argv[1], (char **) NULL, 0);
port = strtol (argv[2], (char **) NULL, 0);
err = AIOAcquirePort (&hardware, &board, &port, &AIOhandle);
if (err != AIO_SUCCESS)
{
@ -1000,23 +1091,24 @@ main (argc, argv)
exit (1);
}
err = AIOConfigurePort (AIOhandle, AIO_BAUD_9600, AIO_DATA_BITS_8,
AIO_STOP_BITS_1, AIO_PARITY_NONE,
err = AIOConfigurePort (AIOhandle, bitRate, dataBits, stopBits, parityMode,
AIO_HARDWARE_FLOW_CONTROL_OFF);
if (err == AIO_QUALIFIED_SUCCESS)
{
AIOPORTCONFIG portConfig;
AIODVRCONFIG dvrConfig;
fprintf (stderr, "Port configuration changed!\n");
AIOGetPortConfiguration (AIOhandle, &portConfig, &dvrConfig);
portConfig.returnLength = sizeof(portConfig);
AIOGetPortConfiguration (AIOhandle, &portConfig, NULL);
fprintf (stderr,
" Bit Rate: %s, Data Bits: %c, Stop Bits: %s, Parity: %c,\
Flow:%s\n",
baudRates[portConfig.bitRate],
dataBits[portConfig.dataBits],
stopBits[portConfig.stopBits],
bitRateTable[portConfig.bitRate].bitRateString,
dataBitsTable[portConfig.dataBits],
stopBitsTable[portConfig.stopBits],
parity[portConfig.parityMode],
portConfig.flowCtrlMode ? "ON" : "OFF");
}
@ -1065,7 +1157,7 @@ main (argc, argv)
/* Get the command line we were invoked with, and advance it past
our name and the board and port arguments. */
cmdlin = getcmd ((char *) NULL);
for (i = 0; i < 2; i++)
for (i = 0; i < cmdindx; i++)
{
while (! isspace (*cmdlin))
++cmdlin;