1File: MAIN.C                                                              Page       1
     1   #
     2   /*
     3   	Copyright 1981
     4   	Alcyon Corporation
     5   	8474 Commerce Av.
     6   	San Diego, Ca.  92121
     7   */
     8   #include "preproc.h"
     9   int status = 0;
    10   char *stdincl;		/* Include prefix for macro processor	*/
    11   /* cexit - exit from C compiler driver*/
    12   /*		This deletes any existing temps and exits with the error status.*/
    13   cexit()									/* returns - none*/
    14   {
    15    
    16   	exit(status);
    17   }
    18    
    19   /* main - main routine for C68 Compiler system*/
    20   /*		Handles the C68 arguments.  For each C file given, the macro*/
    21   /*		pre-processor is called, then the parser, code generator and*/
    22   /*		assember are fexec'd.  The loader arguments are collected and*/
    23   /*		the loader is fexec'd.*/
    24   main(argc,argv)
    25   int argc;
    26   char **argv;
    27   {
    28    
    29   	if(argc < 3)
    30   		usage();
    31    
    32   	if (*argv[1] == '-')
    33   	{
    34   		if(argc != 5 || argv[1][1] != 'i')
    35   			usage();
    36    
    37   		stdincl = argv[2];
    38   		domacro(argv[3],argv[4],0,0L);
    39   		cexit();
    40   	}
    41   	if(argc != 3)
    42   		usage();
    43   	domacro(argv[1],argv[2],0,0L);
    44   	cexit();
    45   }
    46   usage()
    47   {
    48   		error("usage: c68 [-i x:] inputfile outputfile\n");
    49   		exit();
    50   }
    51    
    52   /* strcmp - string comparison*/
    53   /*		Compares two strings for equality, less or greater.*/
    54   strcmp(s,t)								/* returns 0 for equality,*/
    55   										/* neg for < and pos for >.*/
    56   char *s;								/* first string*/
    57   char *t;								/* second string*/
    58   {
    59   	for( ; *s == *t; s++, t++ )
1File: MAIN.C                                                              Page       2
    60   		if( *s == '\0' )
    61   			return(0);
    62   	return( *s - *t );
    63   }
    64    
    65   /* strlen - string length*/
    66   /*		Computes number of bytes in string.*/
    67   strlen(s)								/* returns string length*/
    68   char *s;								/* string to compute length*/
    69   {
    70   	register int n;
    71    
    72   	for( n = 0; *s++ != '\0'; )
    73   		n++;
    74   	return(n);
    75   }
    76    
    77   /* itoa - integer to ASCII conversion*/
    78   /*		Converts integer to ASCII string, handles '-'.*/
    79   itoa(n,s,w)								/* returns - none*/
    80   int n;									/* number to convert*/
    81   char *s;								/* resulting string*/
    82   int w;									/* minimum width of string*/
    83   {
    84   	register int sign, i;
    85   	char temp[6];
    86    
    87   	if( (sign=n) < 0 )
    88   		n = -n;
    89   	i = 0;
    90   	do {
    91   		temp[i++] = n % 10 + '0';
    92   	} while( (n =/ 10) > 0 );
    93   	if( sign < 0 )
    94   		temp[i++] = '-';
    95   	while( --w >= i )					/*pad on left with blanks*/
    96   		*s++ = ' ';
    97   	while( --i >= 0 )					/*move chars reversed*/
    98   		*s++ = temp[i];
    99   	*s = '\0';
   100   }
   101    
   102   /* strend - set string end*/
   103   /*		This is used to compare the endings of file names for ".c", etc.*/
   104   strend(s,t)								/* returns 1 if match, 0 otherwise*/
   105   char *s;								/* string to compare*/
   106   char *t;								/* string ending*/
   107   {
   108   	int ls, lt;
   109    
   110   	if( (ls=strlen(s)) < (lt=strlen(t)) )
   111   		return(0);
   112   	if( strcmp(&s[ls-lt],t) == 0 )
   113   		return(1);
   114   	return(0);
   115   }
   116   /* index - find the index of a character in a string*/
   117   /*		This is identical to Software Tools index.*/
   118   index(str,chr)						/* returns index of c in str or -1*/
1File: MAIN.C                                                              Page       3
   119   char *str;							/* pointer to string to search*/
   120   char chr;							/* character to search for*/
   121   {
   122   	register char *s;
   123   	register int i;
   124    
   125   	for( s = str, i = 0; *s != '\0'; i++ )
   126   		if( *s++ == chr )
   127   			return(i);
   128   	return(-1);
   129   }
   130   v6flush(v6buf)
   131   struct iobuf *v6buf;
   132   {
   133   	register i;
   134    
   135   	i = BLEN - v6buf->nunused;
   136   	v6buf->nunused = BLEN;
   137   	v6buf->xfree = &(v6buf->buff[0]);
   138   	if(write(v6buf->fildes,v6buf->xfree,i) != i)
   139   		return(-1);
   140   	return(0);
   141   }
