|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T a
Length: 2800 (0xaf0)
Types: TextFile
Names: »amain.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Corewars/amain.c«
/* this module contains the main function, which settles open/close
file i/o as well as little trivial details like adding an extension
and stuff like that. It has been debuged (except for BUG NOTES)
so it's safe to trust. There is a little bit of inefficiency, but
that's justified since I want a more easily readable program */
#include "assem.h"
#include <stdio.h>
#include <malloc.h>
#include <strings.h>
char *outname(str)
char *str;
/* accepts an input string and outputs a proper output file with ".e"
extension. If already has .e, as an extension, produce an error.
BUG NOTE: even if it's as innoculous as .eex, etc (as long as the
extension starts with .e) it will still produce an error
Otherwise, remove current extension
and add .e extension.
returns pointer to new output name */
{
char *newstr;
char *dot; /* position of '.' */
if (!(newstr =(char *) malloc( (unsigned) strlen(str) + 3)))
{
printf("not enough memory --- outname\n");
exit(1);
}
strcpy(newstr,str);
if (!(dot = rindex(newstr,'.')))
strcat(newstr,".e"); /* no extenstion */
else if (*(dot + 1) == 'e') /* same extension as output? */
{
printf("wrong input file name: %s\n", newstr);
printf("try moving to non .e extension --- outname\n");
exit(1);
}
else /* perform surgery */
{
(*(dot + 1)) = 'e';
(*(dot + 2)) = '\0';
}
return newstr;
}
/* main -- Open input and output files, giving default names if
necessary. Detects errors like not being able to open files
etc.
*/
main(argc, argv)
int argc;
char *argv[];
{
FILE *f1,*f2; /* input file, output file */
char *outfile = "NONAME", /* default output file */
flag = 0; /* standard input */
if (argc == 1) /* no arguments */
{
flag = 1; /* read from standard input */
argv[1] = outfile;
argc = 2; /* one file */
}
for (;argc > 1; argc--)
{
if (flag)
f1 = stdin; /* set file to standard input */
else
/* open input file */
if (!(f1 = fopen(argv[argc - 1],"r")))
{
printf("oops cannot open file %s",
argv[argc - 1]);
printf("\n-- in main\n");
exit(1); /* error status 1 */
}
/* open output file */
if (!(f2 = fopen(outname(argv[argc - 1]), "w")))
{
printf("cannot open write file %s",
outname(argv[argc - 1]));
printf("\n --- in main\n");
exit(1);
}
printf("%s:\n", argv[argc - 1]);
assemble(f1,f2); /* call assembler */
if (!flag) /* close file */
fclose(f1);
fclose(f2);
}
}
/* debugging version of assemble */
/* commented out because this module is now fully debugged */
/* --- Na Choon Piaw, 11/14 */
/*
assemble(infile,outfile)
FILE *infile, *outfile;
{
int c;
while ((c = fgetc(infile)) != EOF)
fputc(c, outfile);
}
*/