#
/*
	Copyright 1981
	Alcyon Corporation
	8474 Commerce Av.
	San Diego, Ca.  92121
*/
#include "preproc.h"
int status = 0;
char *stdincl;		/* Include prefix for macro processor	*/
/* cexit - exit from C compiler driver*/
/*		This deletes any existing temps and exits with the error status.*/
cexit()									/* returns - none*/
{

	exit(status);
}

/* main - main routine for C68 Compiler system*/
/*		Handles the C68 arguments.  For each C file given, the macro*/
/*		pre-processor is called, then the parser, code generator and*/
/*		assember are fexec'd.  The loader arguments are collected and*/
/*		the loader is fexec'd.*/
main(argc,argv)
int argc;
char **argv;
{

	if(argc < 3)
		usage();

	if (*argv[1] == '-')
	{
		if(argc != 5 || argv[1][1] != 'i')
			usage();

		stdincl = argv[2];
		domacro(argv[3],argv[4],0,0L);
		cexit();
	}
	if(argc != 3)
		usage();
	domacro(argv[1],argv[2],0,0L);
	cexit();
}
usage()
{
		error("usage: c68 [-i x:] inputfile outputfile\n");
		exit();
}

/* strcmp - string comparison*/
/*		Compares two strings for equality, less or greater.*/
strcmp(s,t)								/* returns 0 for equality,*/
										/* neg for < and pos for >.*/
char *s;								/* first string*/
char *t;								/* second string*/
{
	for( ; *s == *t; s++, t++ )
		if( *s == '\0' )
			return(0);
	return( *s - *t );
}

/* strlen - string length*/
/*		Computes number of bytes in string.*/
strlen(s)								/* returns string length*/
char *s;								/* string to compute length*/
{
	register int n;

	for( n = 0; *s++ != '\0'; )
		n++;
	return(n);
}

/* itoa - integer to ASCII conversion*/
/*		Converts integer to ASCII string, handles '-'.*/
itoa(n,s,w)								/* returns - none*/
int n;									/* number to convert*/
char *s;								/* resulting string*/
int w;									/* minimum width of string*/
{
	register int sign, i;
	char temp[6];

	if( (sign=n) < 0 )
		n = -n;
	i = 0;
	do {
		temp[i++] = n % 10 + '0';
	} while( (n =/ 10) > 0 );
	if( sign < 0 )
		temp[i++] = '-';
	while( --w >= i )					/*pad on left with blanks*/
		*s++ = ' ';
	while( --i >= 0 )					/*move chars reversed*/
		*s++ = temp[i];
	*s = '\0';
}

/* strend - set string end*/
/*		This is used to compare the endings of file names for ".c", etc.*/
strend(s,t)								/* returns 1 if match, 0 otherwise*/
char *s;								/* string to compare*/
char *t;								/* string ending*/
{
	int ls, lt;

	if( (ls=strlen(s)) < (lt=strlen(t)) )
		return(0);
	if( strcmp(&s[ls-lt],t) == 0 )
		return(1);
	return(0);
}
/* index - find the index of a character in a string*/
/*		This is identical to Software Tools index.*/
index(str,chr)						/* returns index of c in str or -1*/
char *str;							/* pointer to string to search*/
char chr;							/* character to search for*/
{
	register char *s;
	register int i;

	for( s = str, i = 0; *s != '\0'; i++ )
		if( *s++ == chr )
			return(i);
	return(-1);
}
v6flush(v6buf)
struct iobuf *v6buf;
{
	register i;

	i = BLEN - v6buf->nunused;
	v6buf->nunused = BLEN;
	v6buf->xfree = &(v6buf->buff[0]);
	if(write(v6buf->fildes,v6buf->xfree,i) != i)
		return(-1);
	return(0);
}
