www.pudn.com > HEC-win32.zip > cmdline.cpp
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ +
+ cmdline.cpp - processes the command-line +
+ +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Macros + +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*#define CMD_LINE_DEBUG 1*/
#ifdef CMD_LINE_DEBUG
#define CMD_LINE_DEBUG0(arg); printf("handleArgs(): ");printf(arg);
#define CMD_LINE_DEBUG1(arg1,arg2); printf("handleArgs(): ");printf(arg1,arg2);
#define CMD_LINE_DEBUG2(arg1,arg2,arg3); printf("handleArgs(): ");printf(arg1,arg2,arg3);
#else
#define CMD_LINE_DEBUG0(arg);
#define CMD_LINE_DEBUG1(arg1,arg2);
#define CMD_LINE_DEBUG2(arg1,arg2);
#endif
#define FNAME_SIZE 255 /*maximum size of file name*/
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ declaration + +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
class CommandLine
{
/* file extensions */
char IN_EXT[5]; /*source*/
char TMP_EXT[5]; /*intermediate*/
char LST_EXT[5]; /*listing*/
char OUT_EXT[5]; /*executable*/
void addFileSuffix(char *out, char *in, char *ext);
void printUsage();
public:
char inputFile[FNAME_SIZE]; /*source file*/
char listFile[FNAME_SIZE]; /*listing file*/
char tempFile[FNAME_SIZE]; /*temporary bytecode*/
char outputFile[FNAME_SIZE]; /*compilation unit*/
char nullName[FNAME_SIZE]; /*default name of file*/
U1 omitDebugData; /*TRUE if omit debug data*/
U1 listing; /*TRUE if desire a listing*/
int *maxErrors; /*maximum number of errors*/
CommandLine(int *merros);
U1 handleArgs(int argc,char *arg[]);
};
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ definitions +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
CommandLine::CommandLine(int *merrors)
{
strcpy(IN_EXT,".ASM");
strcpy(TMP_EXT,".TMP");
strcpy(LST_EXT,".LST");
strcpy(OUT_EXT,".RUN");
strcpy(nullName,"UN-NAMED");
inputFile[0]='\0';
listFile[0]='\0';
tempFile[0]='\0';
outputFile[0]='\0';
omitDebugData = FALSE;
listing = FALSE;
maxErrors = merrors;
*maxErrors = 10;
return;
}/*end CommandLine*/
/*-----------------------------------------------------------------*/
/*
in = original file
out = new file name
ext = new extension
*/
void CommandLine::addFileSuffix(char *out, char *in, char *ext)
{
char *cptr;
int index;
if((out==NULL)||(in==NULL)||(ext==NULL))
{
ERROR0("addFileSuffixe(): null pointer args\n");
FATAL_ERROR();
}
cptr = strrchr(in,'.');
/*if no extension, then just add suffix*/
if(cptr==NULL)
{
strcpy(out,in);
strcat(out,ext);
}
/*otherwise, copy until we hit '.' and then add suffx*/
else
{
index =0;
while((in[index]!='.')&&(index