105 lines
2.1 KiB
C
105 lines
2.1 KiB
C
/* @(#)main.c 1.1 94/10/31 SMI */
|
|
/*
|
|
* Micro-assembler -- main driver
|
|
* main.c 1.1 31 May 1984
|
|
*/
|
|
|
|
#include "micro.h"
|
|
#include <stdio.h>
|
|
|
|
char * curfilename = "<stdin>";
|
|
short curaddr;
|
|
int curlineno;
|
|
Boolean dflag = False;
|
|
Boolean waserror = False;
|
|
Boolean Scanning = False;
|
|
NODE n[NNODE];
|
|
RAMNODE ram[NINST];
|
|
NODE *curnode = n-1;
|
|
|
|
main(argc, argv)
|
|
int argc;
|
|
char **argv;
|
|
{
|
|
int c;
|
|
char *ap;
|
|
FILE *bout_stream = NULL;
|
|
FILE *tbl_stream = NULL;
|
|
|
|
for (c=1; c<argc; c++) {
|
|
ap = argv[c];
|
|
if (ap[0] == '-') {
|
|
switch (ap[1]) {
|
|
case 'o':
|
|
if (freopen(argv[++c], "w", stdout) == NULL)
|
|
fatal("could not open file %s",argv[c]);
|
|
continue;
|
|
case 'b':
|
|
if ((bout_stream = fopen(argv[++c], "w")) == NULL)
|
|
fatal("could not open file %s",argv[c]);
|
|
continue;
|
|
case 'r':
|
|
if ((tbl_stream = fopen(argv[++c], "w")) == NULL)
|
|
fatal("could not open file %s",argv[c]);
|
|
continue;
|
|
default:
|
|
fatal("bad option %s", argv[c]);
|
|
}
|
|
} else {
|
|
curfilename = argv[c];
|
|
if (freopen(argv[c], "r", stdin) == NULL)
|
|
fatal("could not open file %s",argv[c]);
|
|
}
|
|
}
|
|
Scanning = True;
|
|
curaddr = 0;
|
|
init_symtab();
|
|
resw_hash(); /* hash keywords */
|
|
init_assm();
|
|
scanprog();
|
|
Scanning = False;
|
|
/* if (waserror) exit(1); */
|
|
resolve_addrs();
|
|
restrict(); /* rectriction checking */
|
|
output(bout_stream, tbl_stream);
|
|
if (waserror) exit(1);
|
|
|
|
exit(0);
|
|
/* NOTREACHED */
|
|
}
|
|
|
|
fatal(s, a)
|
|
char *s, *a;
|
|
{
|
|
if (Scanning) {
|
|
printf("File %s, line %d: %s\n", curfilename, curlineno, s);
|
|
}
|
|
printf(s, a);
|
|
printf("\n");
|
|
exit(1);
|
|
/*_cleanup();
|
|
abort();*/
|
|
}
|
|
|
|
error(s, a, b, c, d, e, f)
|
|
char *s;
|
|
{
|
|
if (Scanning) {
|
|
printf("File %s, line %d: ", curfilename, curlineno);
|
|
}
|
|
printf(s, a, b, c, d, e, f);
|
|
printf("\n");
|
|
waserror = True;
|
|
}
|
|
|
|
warn(s, a, b, c, d, e, f)
|
|
char *s;
|
|
{
|
|
printf("Warning:");
|
|
if ( Scanning) {
|
|
printf(" file %s, line %d: ", curfilename, curlineno);
|
|
}
|
|
printf(s, a, b, c, d, e, f);
|
|
printf("\n");
|
|
}
|