/* _main.c Copyright (C) 1985 Lattice, Inc. */ /** | The code that opens a window associated with the input/output | streams when the program is called from the Workbench has been | deleted. Obviously writing something to stdout/stderr means | to call for the guru... **/ #include #include #include #include #include #include #include #include #include #include #define MAXARG 32 #define QUOTE '"' #define ESCAPE '*' #define ESC '\027' #define NL '\n' #define isspace(c) ((c == ' ')||(c == '\t') || (c == '\n')) extern int _fmode,_iomode; extern struct UFB _ufbs[]; static int argc; /* arg count */ static char **targv, *argv[MAXARG]; /* arg pointers */ static void badarg(char *program); extern struct WBStartup *WBenchMsg; /** * * name _main - process command line, open files, and call "main" * * synopsis _main(line); * char *line; ptr to command line that caused execution * * description This function performs the standard pre-processing for * the main module of a C program. It accepts a command * line of the form * * pgmname arg1 arg2 ... * * and builds a list of pointers to each argument. The first * pointer is to the program name. For some environments, the * standard I/O files are also opened, using file names that * were set up by the OS interface module XCMAIN. * **/ void _main(line) register char *line; { register char **pargv; register int x; char *argbuf; /* * * Build argument pointer list * */ while (argc < MAXARG) { while (isspace(*line)) line++; if (*line == '\0') break; pargv = &argv[argc++]; if (*line == QUOTE) { argbuf = *pargv = ++line; /* ptr inside quoted string */ while (*line != QUOTE) { if (*line == ESCAPE) { line++; switch (*line) { case 'E': *argbuf++ = ESC; break; case 'N': *argbuf++ = NL; break; default: *argbuf++ = *line; } line++; } else { *argbuf++ = *line++; } } line++; *argbuf = '\0'; /* terminate arg */ } else { *pargv = line; while ((*line != '\0') && (!isspace(*line))) line++; if (*line == '\0') break; else *line++ = '\0'; /* terminate arg */ } } /* while */ targv = (argc == 0) ? (char **)WBenchMsg : (char **)&argv[0]; /* * * Open standard files * */ if (argc == 0) { } else { _ufbs[0].ufbfh = Input(); _ufbs[1].ufbfh = Output(); _ufbs[2].ufbfh = Open("*", MODE_OLDFILE); x = UFB_NC; _ufbs[0].ufbflg |= UFB_RA | O_RAW | x; _ufbs[1].ufbflg |= UFB_WA | O_RAW | x; _ufbs[2].ufbflg |= UFB_RA | UFB_WA | O_RAW; x = (_fmode) ? 0 : _IOXLAT; stdin->_file = 0; stdin->_flag = _IOREAD | x; stdout->_file = 1; stdout->_flag = _IOWRT | x; stderr->_file = 2; stderr->_flag = _IORW | x; } main(argc,targv); /* call main function */ _exit(0); }