dos_compilers/Microsoft C v203/MAIN.C
2024-06-30 13:40:22 -07:00

109 lines
2.3 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "dos.h"
#include "stdio.h"
#include "ctype.h"
#include "ios1.h"
#define MAXARG 32 /* maximum command line arguments */
extern int _stack;
extern char _iname[],_oname[];
extern struct UFB _ufbs[];
int argc; /* arg count */
char *argv[MAXARG]; /* arg pointers */
/**
*
* 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.
*
**/
_main(line)
char *line;
{
char c;
#if (UNIX | MSDOS2) == 0
FILE *fp0, *fp1, *fp2;
extern int _bufsiz;
char *getmem();
#endif
/*
*
* Build argument pointer list
*
*/
for(argc = 0; argc < MAXARG; )
{
while(isspace(*line)) line++;
if(*line == '\0') break;
argv[argc++] = line;
while((*line != '\0') && (isspace(*line) == 0)) line++;
c = *line;
*line++ = '\0';
if(c == '\0') break;
}
/*
*
* Open standard files
*
*/
#if (UNIX | MSDOS2) == 0
fp0 = freopen(_iname,"r",stdin);
if(_oname[0] != '>') fp1 = freopen(_oname,"w",stdout);
else fp1 = freopen(&_oname[1],"a",stdout);
fp2 = freopen("","a",stderr);
if (fp2 == NULL) _exit(1);
if (fp0 == NULL)
{
fputs("Can't open stdin file\n", fp2);
exit(1);
}
setbuf(fp0, getmem(_bufsiz)); /* set stdin buffered */
fp0->_flag &= ~_IOMYBUF; /* allow rlsmem if later set unbuff'd */
if (fp1 == NULL)
{
fputs("Can't open stdout file\n", fp2);
exit(1);
}
#endif
#ifdef MSDOS2
stdin->_file = 0;
stdin->_flag = _IOREAD;
stdout->_file = 1;
stdout->_flag = _IOWRT;
stderr->_file = 2;
stderr->_flag = _IOWRT | _IONBF;
_ufbs[0].ufbflg = UFB_OP | UFB_RA;
_ufbs[1].ufbfh = 1;
_ufbs[1].ufbflg = UFB_OP | UFB_WA;
_ufbs[2].ufbfh = 2;
_ufbs[2].ufbflg = UFB_OP | UFB_WA;
if (_fgdi(1) & 0x80) stdout->_flag |= _IONBF;
#endif
/*
*
* Call user's main program
*
*/
main(argc,argv); /* call main function */
exit(0);
}