This is the new savepoint. This is where to revert to when things go wrong.
This commit is contained in:
parent
46bd58931f
commit
a7506f82c8
42 changed files with 9877 additions and 0 deletions
246
Sim03/OS_SimDriver.c
Normal file
246
Sim03/OS_SimDriver.c
Normal file
|
|
@ -0,0 +1,246 @@
|
|||
// header files
|
||||
#include "OS_SimDriver.h"
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
// initialize program (variables and title)
|
||||
ConfigDataType *configDataPtr = NULL;
|
||||
OpCodeType *metaDataPtr = NULL;
|
||||
char errorMsg[MAX_STR_LEN];
|
||||
CmdLineData cmdLineData;
|
||||
bool configUploadSuccess = false;
|
||||
|
||||
// show title
|
||||
// fct: printf
|
||||
printf("\nSimulator Program\n");
|
||||
printf("=================\n\n");
|
||||
|
||||
// process command line arguments
|
||||
// check for at least one correct switch and config file name verified
|
||||
// fct: processCmdLine
|
||||
if(processCmdLine(argc, argv, &cmdLineData))
|
||||
{
|
||||
// upload config file, check for success
|
||||
// fct: getConfigData
|
||||
if(getConfigData(cmdLineData.fileName, &configDataPtr, errorMsg))
|
||||
{
|
||||
// check for config display flag
|
||||
if(cmdLineData.configDisplayFlag)
|
||||
{
|
||||
// display config display flag
|
||||
// fct: displayConfigData
|
||||
displayConfigData(configDataPtr);
|
||||
}
|
||||
// set config upload success flag
|
||||
configUploadSuccess = true;
|
||||
}
|
||||
// otherwise, assume config file upload failure
|
||||
else
|
||||
{
|
||||
// show error message, end program
|
||||
// fct: printf
|
||||
printf("\nConfig Upload Error: %s, program aborted\n\n", errorMsg);
|
||||
}
|
||||
|
||||
// check for config success and need for metadata
|
||||
if(configUploadSuccess &&
|
||||
(cmdLineData.mdDisplayFlag || cmdLineData.runSimFlag))
|
||||
{
|
||||
// upload metadata file, check for success
|
||||
// fct: getMetaData
|
||||
if(getMetaData(configDataPtr->metaDataFileName,
|
||||
&metaDataPtr, errorMsg))
|
||||
{
|
||||
// check metadata display flag
|
||||
if(cmdLineData.mdDisplayFlag)
|
||||
{
|
||||
// display metadata
|
||||
// fct: displayMetaData
|
||||
displayMetaData(metaDataPtr);
|
||||
}
|
||||
// check run simulator flag
|
||||
if(cmdLineData.runSimFlag)
|
||||
{
|
||||
// run simulator
|
||||
// fct: runSim
|
||||
runSim(configDataPtr, metaDataPtr);
|
||||
}
|
||||
|
||||
}
|
||||
// otherwise, assume metadata upload failure
|
||||
else
|
||||
{
|
||||
// show error message, end program
|
||||
// fct: printf
|
||||
printf("\nMetadata Upload Error: %s, program aborted\n",
|
||||
errorMsg);
|
||||
}
|
||||
}
|
||||
// end check for config success and need for metadata
|
||||
|
||||
// clean up config data as needed
|
||||
// fct: clearConfigData
|
||||
configDataPtr = clearConfigData(configDataPtr);
|
||||
|
||||
// clean up metadata as needed
|
||||
// fct: clearMetaDataList
|
||||
metaDataPtr = clearMetaDataList(metaDataPtr);
|
||||
}
|
||||
// end process command line arguments
|
||||
|
||||
// otherwise, assume command line failure
|
||||
else
|
||||
{
|
||||
// show command line argument requirements
|
||||
// fct: showCommandLineFormat
|
||||
showCommandLineFormat();
|
||||
}
|
||||
// show program end
|
||||
// fct: printf
|
||||
printf("\nSimulator Program End.\n");
|
||||
|
||||
// return program success
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
Name: clearCmdLineStruct
|
||||
Process: sets command line structure data to defaults
|
||||
Booleans to false, fileName to empty string
|
||||
Function Input/Parameters: pointer to command line structure (CmdLineData *)
|
||||
Function Output/Parameters: pointer to command line structure (CmdLineData *)
|
||||
with updated members
|
||||
Function Output/Returned: none
|
||||
Device Input/Device: none
|
||||
Device Output/Device: none
|
||||
Dependencies: none
|
||||
*/
|
||||
void clearCmdLineStruct(CmdLineData *clDataPtr)
|
||||
{
|
||||
// set all struct members to default
|
||||
clDataPtr->programRunFlag = false;
|
||||
clDataPtr->configDisplayFlag = false;
|
||||
clDataPtr->mdDisplayFlag = false;
|
||||
clDataPtr->runSimFlag = false;
|
||||
clDataPtr->fileName[0] = NULL_CHAR;
|
||||
// void function, no return.
|
||||
}
|
||||
|
||||
/*
|
||||
Name: processCmdLine
|
||||
Process: checks for at least two arguments,
|
||||
then sets Booleans depending on command line switches
|
||||
which can be in any order,
|
||||
also captures config file name which must be last arugment
|
||||
Function Input/Parameters: number of arguments (int),
|
||||
vector of arguments (char **)
|
||||
Function Output/Parameters: pointer to command line structure (CmdLineData *)
|
||||
with updated members,
|
||||
set to default values if failure
|
||||
to capture arguments
|
||||
Function Output/Returned: Boolean result of argument capture
|
||||
true if at least one switch and config file name,
|
||||
false otherwise
|
||||
Device Input/Device: none
|
||||
Device Output/Device: none
|
||||
Dependencies: ???
|
||||
*/
|
||||
bool processCmdLine(int numArgs, char **strVector, CmdLineData *clDataPtr)
|
||||
{
|
||||
// initialize function and variables
|
||||
|
||||
// initialize structure to defaults
|
||||
// fct: clearCmdLineStruct
|
||||
clearCmdLineStruct(clDataPtr);
|
||||
// initialize success flags to false
|
||||
bool atLeastOneSwitchFlag = false;
|
||||
bool correctConfigFileFlag = false;
|
||||
// initialize first arg index to one
|
||||
int argIndex = 1;
|
||||
// iniitialize file variables
|
||||
int fileStrLen, fileStrSubLoc;
|
||||
// must have program name, one switch, config file name at minimum
|
||||
if(numArgs >= MIN_NUM_ARGS)
|
||||
{
|
||||
// loop across args (starting at 1) and program run flag
|
||||
while(argIndex < numArgs)
|
||||
{
|
||||
// check for -dc
|
||||
if(compareString(strVector[argIndex], "-dc") == 0)
|
||||
{
|
||||
// set config display flag
|
||||
clDataPtr->configDisplayFlag = true;
|
||||
// set at least one switch flag
|
||||
atLeastOneSwitchFlag = true;
|
||||
}
|
||||
// otherwise, check for -dm
|
||||
else if(compareString(strVector[argIndex], "-dm") == 0)
|
||||
{
|
||||
// set metadata display flag
|
||||
clDataPtr->mdDisplayFlag = true;
|
||||
// set at least one switch flag
|
||||
atLeastOneSwitchFlag = true;
|
||||
}
|
||||
// otherwise, check for -rs
|
||||
else if(compareString(strVector[argIndex], "-rs") == 0)
|
||||
{
|
||||
// set run simulator flag
|
||||
clDataPtr->runSimFlag = true;
|
||||
// set at least one switch flag
|
||||
atLeastOneSwitchFlag = true;
|
||||
}
|
||||
// otherwise, check for file name, ending in .cfg (must be last)
|
||||
else
|
||||
{
|
||||
// find lengths to verify file name
|
||||
// file name must be last argument, have '.cnf' extension
|
||||
fileStrLen = getStringLength(strVector[numArgs - 1]);
|
||||
fileStrSubLoc = findSubString(strVector[numArgs - 1], ".cnf");
|
||||
// check for file existence and correct file format
|
||||
if(fileStrSubLoc != SUBSTRING_NOT_FOUND &&
|
||||
fileStrSubLoc == fileStrLen - LAST_FOUR_LETTERS)
|
||||
{
|
||||
// set file name to variable
|
||||
copyString(clDataPtr->fileName, strVector[numArgs - 1]);
|
||||
// set success flag to true
|
||||
correctConfigFileFlag = true;
|
||||
}
|
||||
// otherwise, assume bad config file name
|
||||
else
|
||||
{
|
||||
// reset struct, correct config file flag stays false
|
||||
// fct: clearCmdLineStruct
|
||||
clearCmdLineStruct(clDataPtr);
|
||||
}
|
||||
}
|
||||
// update arg index
|
||||
argIndex = argIndex + 1;
|
||||
}
|
||||
// end loop across args and program run flag
|
||||
}
|
||||
// return verification of at least one switch and file name
|
||||
return atLeastOneSwitchFlag && correctConfigFileFlag;
|
||||
}
|
||||
|
||||
/*
|
||||
Name: showCommandLineFormat
|
||||
Process: displays command line format as assistance to user
|
||||
Function Input/Parameters: none
|
||||
Function Output/Parameters: none
|
||||
Function Output/Returned: none
|
||||
Device Input/Device: none
|
||||
Device Output/Monitor: data displayed as spec'd
|
||||
Dependencies: printf
|
||||
*/
|
||||
void showCommandLineFormat()
|
||||
{
|
||||
// display command line format
|
||||
// fct: printf
|
||||
printf("Command Line Format:\n");
|
||||
printf(" sim_01 [-dc] [-dm] [-rs] <configfile.cnf>\n");
|
||||
printf(" -dc [optional] displays configuration data\n");
|
||||
printf(" -dm [optional] displays metadata\n");
|
||||
printf(" -rs [optional] runs the simulator\n");
|
||||
printf(" required configfile.cnf\n");
|
||||
// void function, no return.
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue