                                                        {
                                                                    evalerr = TRUE;
                                                                    markerr('(');
                                                                    break;
                                                                }
                                                }
                              }
                          }
        }
    }
}

/*
Function to get the precedence of a binary operator.
Function returns the precedence value.
*/

getprec(operator)
char operator;
{
	switch (operator)
	{
		case '*':
		case '/':
		case MOD:
		case SHL:
		case SHR:	return MULT;

		case '+':
		case '-':	return ADDIT;

		case '>':
		case '=':
		case '<':
		case GRTEQ:
		case NOTEQ:
		case LESEQ:	return RELAT;

		case AND:	return LOG1;

		case OR:
		case XOR:	return LOG2;

		case HIGH:
		case LOW:	return UOP3;

		case ')':	return RNOFILE)
	{
		fputs(linbuf,list);
		putc('\f',list);
	}
	if (list != NOFILE)	/*  If needed, sort and list
						symbol table.		*/
	{
		n = sortsym();
		sympoint = symtbl;
		while (n > 0)
		{
			linptr = linbuf;
			for (m = 0; m < 4; m++)
			{
				movmem(sympoint->symname,linptr,SYMLEN);
				linptr += 8;
				*linptr++ = ' ';
				*linptr++ = ' ';
				puthex4(sympoint->symvalu,&linptr);
				*linptr++ = ' ';
				*linptr++ = ' ';
				*linptr++ = ' ';
				*linptr++ = ' ';
				sympoint++;
				if (--n <= 0) break;
			}
			linptr -= 4;
			*linptr++ = '\n';
			*linptr = '\0';
			fputs(linbuf,list);
		}
		if (list >= LODISK) putc(CPMEOF,list);
		else if (list == LST) putc('\f',list);
	}
	fflush(list);
	fclose(list);

	fclose(source);
	wipeout("\n");
}

/*
Function to set up the file structure.  Routine is called with
the original argc and argv from main().
*/

setfiles(argc,argv)
int argc;
char *argv[];
{
    char sorfname[16],lstfname[16],hexfname[16], *tptr;
    if (--argc == 0) wipeout("\nNo file info supplied.\n");
    argv++;
    source = list = hex = NOFILE;
    sorfname[0] = curdrive + 'A';
    sorfname[1] = ':';
    sorfname[2] = '\0';
    strcat(sorfname,*argv++);
    for (tptr = sorfname; *tptr != '\0'; tptr++)
	if (*tptr == '.') *tptr = '\0';
    strcpy(lstfname,sorfname);
    strcpy(hexfname,lstfname);
    strcat(sorfname,".68H");
    strcat(lstfname,".PRN");
    strcat(hexfname,".HEX");
    if (--argc == 0) goto defsorf;
    while (**argv != '\0')
    {
	switch (*(*argv)++)
	{
	    case 'S':	switch (*(*argv)++)
			{
			    case 'A':
			    case 'B':
			    case 'C':
			    case 'D':	sorfname[0] = *(*argv - 1);

			    case '-':	if (fopen(sorfname,&_source) == ERROR)
					    wipeout("\nCan't open source.\n");
					source = &_source;
					break;

			    default:	goto badcomnd;
			}
			break;

	    case 'L':	switch (*(*argv)++)
			{
			    case 'A':
			    case 'B':
			    case 'C':
			    case 'D':	lstfname[0] = *(*argv - 