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