mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-23 00:14:25 +00:00
165 lines
3.0 KiB
C
165 lines
3.0 KiB
C
#include "stdio.h"
|
|
/*
|
|
* Changed to use the Standard I/O library 9/13/82 FZ
|
|
*/
|
|
#include "acom.h"
|
|
|
|
/*
|
|
* Version Z.1, 4/5/83. Added external declarations of segflg and oflag.
|
|
*/
|
|
|
|
/*
|
|
* Version 3.2, 5/27/82. Added uext (-u) switch.
|
|
*/
|
|
static char ident[] = "@(#)a.init.c 3.2";
|
|
|
|
extern char segflg;
|
|
extern char oflag;
|
|
|
|
/*
|
|
* badpre - Issues a fatal error for a bad PREDEF file.
|
|
*/
|
|
badpre() {
|
|
|
|
fprintf(ERROR,"PREDEF file error at line %u\n",infp->in_seq);
|
|
exit(1);
|
|
}
|
|
|
|
/*
|
|
* getdat - Gets the date and time and puts them into datstr.
|
|
* Disabled in CP/M version.
|
|
*/
|
|
getdat() {
|
|
}
|
|
#define BinFile 1
|
|
#define AscFile 0
|
|
|
|
extern char putfile[];
|
|
extern char optfile[];
|
|
/*
|
|
* init - Performs assembler initialization.
|
|
*/
|
|
init(argc,argv) int argc; char *argv[]; {
|
|
|
|
char **av;
|
|
char *ap;
|
|
char *ep;
|
|
char *sp;
|
|
char fname[15];
|
|
int fd;
|
|
FILE *newfile();
|
|
|
|
phytop = phylim = sbrk(0); /* needed only for monitoring */
|
|
getdat();
|
|
prname = "asz8k";
|
|
while((ap = *++argv) && ap!=-1) { /* read command line arguments */
|
|
if(*ap == '-') { /* switches */
|
|
while(*++ap) switch(*ap) {
|
|
|
|
case 'l':
|
|
lflag = 1;
|
|
break;
|
|
|
|
case 'o':
|
|
oflag = 1;
|
|
if ((**argv == '\0') || (*argv == NULL))
|
|
{printf("called from case 'o'\n");
|
|
usage();}
|
|
strcpy(optfile,*++argv);
|
|
break;
|
|
|
|
case 'p':
|
|
pflag = 1;
|
|
break;
|
|
|
|
case 's':
|
|
segflg = 1;
|
|
break;
|
|
|
|
case 'u':
|
|
uext = 1;
|
|
break;
|
|
|
|
case 'x':
|
|
xflag = lflag = 1;
|
|
break;
|
|
|
|
default:
|
|
printf("error case\n");
|
|
usage();
|
|
|
|
}
|
|
} else { /* file name */
|
|
if(srcfile) {printf("srcfile != 0\n"); usage();}
|
|
srcfile = ap;
|
|
}
|
|
}
|
|
if(!srcfile) {printf("no srcfile\n"); usage();}
|
|
if((sp = rindex(srcfile,'/')) == 0) sp = srcfile; else sp++;
|
|
if(strlen(sp) > 14) sp[14] = '\0';
|
|
strcpy(titl1,srcfile);
|
|
strcpy(fname,sp);
|
|
if((ep = rindex(fname,'.')) == 0)
|
|
usage();
|
|
else
|
|
ep++;
|
|
if( segflg ) { /* Prog name must end with "8ks". */
|
|
if( strcmp (ep,"8ks") != 0) {
|
|
printf("Segmented source file must end with '.8ks'\n");
|
|
usage();
|
|
}
|
|
}
|
|
else /* Prog name must end in "8kn". */
|
|
if( strcmp (ep,"8kn") != 0) {
|
|
printf("Nonsegmented source file must end with '.8kn'\n");
|
|
usage();
|
|
}
|
|
if((fd = opena(srcfile,0)) == -1) {
|
|
fprintf(ERROR,"Cannot open %s\n",srcfile);
|
|
exit(1);
|
|
}
|
|
strcpy(ep,"obj"); OBJECT = newfile(fname,BinFile);
|
|
strcpy(putfile,fname);
|
|
if(lflag) {
|
|
strcpy(ep,"lst"); LIST = newfile(fname,AscFile);
|
|
}
|
|
vinit();
|
|
predef();
|
|
}
|
|
|
|
/*
|
|
* newfile - Creates a new file of the specified name,
|
|
* and returns the file descriptor.
|
|
*/
|
|
FILE *
|
|
newfile(s,asci) char *s; char asci; {
|
|
|
|
FILE *fd;
|
|
|
|
if((fd = _fopen(s,"w",asci)) == NULL) {
|
|
fprintf(ERROR,"Cannot create %s\n",s);
|
|
exit(1);
|
|
}
|
|
return(fd);
|
|
}
|
|
|
|
/*
|
|
* preget - Gets a token, issues a fatal error if it is not the specified
|
|
* type, and returns the token's value.
|
|
*/
|
|
preget(typ) int typ; {
|
|
|
|
if(token() != typ) badpre();
|
|
return(tokval);
|
|
}
|
|
|
|
/*
|
|
* usage - Issues a fatal error for an illegal command line.
|
|
*/
|
|
usage() {
|
|
|
|
fprintf(ERROR,"Usage: asz8k [-o outfile] [-luxs] file.8k{n|s}\n");
|
|
exit(1);
|
|
}
|
|
|