Files
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

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);
}