int main (int argc,char *argv []) { int argPos, argNum = argc, ret, verbose = false; int operation = DBFault, constSet = false, merge = DBFault; char *title = (char *) NULL, *subject = (char *) NULL; char *domain = (char *) NULL, *version = (char *) NULL; DBInt shadeSet = DBFault; char *gridName = (char *) NULL; float constant; DBObjData *data, *gridData ; for (argPos = 1;argPos < argNum; ) { if (CMargTest (argv [argPos],"-o","--operation")) { int operCodes [] = { DBMathOperatorAdd, DBMathOperatorSub, DBMathOperatorMul, DBMathOperatorDiv, DBMathOperatorExp }; const char *operations [] = { "+", "-", "*", "/", "^", (char *) NULL }; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing operation!"); return (CMfailed); } if ((operation = CMoptLookup (operations,argv [argPos],true)) == DBFault) { CMmsgPrint (CMmsgUsrError,"Invalid operation!"); return (CMfailed); } operation = operCodes [operation]; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-g","--grid")) { if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing grid!"); return (CMfailed); } gridName = argv [argPos]; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-c","--constant")) { if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing constant!"); return (CMfailed); } if (sscanf (argv [argPos],"%f",&constant) != 1) { CMmsgPrint (CMmsgUsrError,"Invalid constant!"); return (CMfailed); } constSet = true; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-m","--merge")) { int mergeCodes [] = { true, false }; const char *mergeStrs [] = { "true", "false" }; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing operation!"); return (CMfailed); } if ((merge = CMoptLookup (mergeStrs,argv [argPos],true)) == DBFault) { CMmsgPrint (CMmsgUsrError,"Invalid merge mode!"); return (CMfailed); } merge = mergeCodes [merge]; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-t","--title")) { if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing title!"); return (CMfailed); } title = argv [argPos]; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-u","--subject")) { if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing subject!"); return (CMfailed); } subject = argv [argPos]; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-d","--domain")) { if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing domain!"); return (CMfailed); } domain = argv [argPos]; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-v","--version")) { if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing version!"); return (CMfailed); } version = argv [argPos]; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-s","--shadeset")) { int shadeCodes [] = { DBDataFlagDispModeContStandard, DBDataFlagDispModeContGreyScale, DBDataFlagDispModeContBlueScale, DBDataFlagDispModeContBlueRed, DBDataFlagDispModeContElevation }; const char *shadeSets [] = { "standard","grey","blue","blue-to-red", "elevation", (char *) NULL }; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing shadeset!"); return (CMfailed); } if ((shadeSet = CMoptLookup (shadeSets,argv [argPos],true)) == DBFault) { CMmsgPrint (CMmsgUsrError,"Invalid shadeset!"); return (CMfailed); } shadeSet = shadeCodes [shadeSet]; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-V","--verbose")) { verbose = true; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-h","--help")) { CMmsgPrint (CMmsgInfo,"%s [options] <continuous grid>",CMfileName(argv[0])); CMmsgPrint (CMmsgInfo," -o,--operation [+|-|*|/|^]"); CMmsgPrint (CMmsgInfo," -g,--grid [grid name]"); CMmsgPrint (CMmsgInfo," -c,--constant [constant value]"); CMmsgPrint (CMmsgInfo," -m,--merge [true|false]"); CMmsgPrint (CMmsgInfo," -t,--title [dataset title]"); CMmsgPrint (CMmsgInfo," -u,--subject [subject]"); CMmsgPrint (CMmsgInfo," -d,--domain [domain]"); CMmsgPrint (CMmsgInfo," -v,--version [version]"); CMmsgPrint (CMmsgInfo," -s,--shadeset [standard|grey|blue|blue-to-red|elevation]"); CMmsgPrint (CMmsgInfo," -V,--verbose"); CMmsgPrint (CMmsgInfo," -h,--help"); return (DBSuccess); } if ((argv [argPos][0] == '-') && (strlen (argv [argPos]) > 1)) { CMmsgPrint (CMmsgUsrError,"Unknown option: %s!",argv [argPos]); return (CMfailed); } argPos++; } if (argNum > 3) { CMmsgPrint (CMmsgUsrError,"Extra arguments!"); return (CMfailed); } if (verbose) RGlibPauseOpen (argv[0]); data = new DBObjData (); ret = (argNum > 1) && (strcmp (argv [1],"-") != 0) ? data->Read (argv [1]) : data->Read (stdin); if ((ret == DBFault) || (data->Type () != DBTypeGridContinuous)) { delete data; return (CMfailed); } if (constSet) DBGridOperation (data,constant,operation); if (gridName != (char *) NULL) { gridData = new DBObjData (); if ((gridData->Read (gridName) != DBSuccess) || (gridData->Type () != DBTypeGridContinuous)) { delete data; delete gridData; return (CMfailed); } DBGridOperation (data,gridData,operation,merge); delete gridData; } if (title != (char *) NULL) data->Name (title); if (subject != (char *) NULL) data->Document (DBDocSubject,subject); if (domain != (char *) NULL) data->Document (DBDocGeoDomain,domain); if (version != (char *) NULL) data->Document (DBDocVersion,version); if (shadeSet != DBFault) { data->Flags (DBDataFlagDispModeContShadeSets,DBClear); data->Flags (shadeSet,DBSet); } ret = (argNum > 2) && (strcmp (argv [2],"-") != 0) ? data->Write (argv [2]) : data->Write (stdout); delete data; if (verbose) RGlibPauseClose (); return (ret); }
int main (int argc,char *argv []) { int argPos, argNum = argc, ret, verbose = false; char *title = (char *) NULL, *subject = (char *) NULL; char *domain = (char *) NULL, *version = (char *) NULL; char *gridName = (char *) NULL; int shadeSet = DBFault; int mode = 0; DBObjData *leftData, *rightData, *retData; for (argPos = 1; argPos < argNum; ) { if (CMargTest (argv [argPos],"-i","--difference")) { const char *modes [] = { "absolute", "relative", (char *) NULL }; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing differnce method!"); return (CMfailed); } if ((mode = CMoptLookup (modes,argv [argPos],true)) == DBFault) { CMmsgPrint (CMmsgUsrError,"Invalid difference method!"); return (CMfailed); } if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-g","--grid")) { if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing grid!"); return (CMfailed); } gridName = argv [argPos]; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-t","--title")) { if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing title!"); return (CMfailed); } title = argv [argPos]; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-u","--subject")) { if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing subject!"); return (CMfailed); } subject = argv [argPos]; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-d","--domain")) { if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing domain!"); return (CMfailed); } domain = argv [argPos]; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-v","--version")) { if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing version!"); return (CMfailed); } version = argv [argPos]; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-s","--shadeset")) { int shadeCodes [] = { DBDataFlagDispModeContStandard, DBDataFlagDispModeContGreyScale, DBDataFlagDispModeContBlueScale, DBDataFlagDispModeContBlueRed, DBDataFlagDispModeContElevation }; const char *shadeSets [] = { "standard","grey","blue","blue-to-red","elevation", (char *) NULL }; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) { CMmsgPrint (CMmsgUsrError,"Missing shadeset!"); return (CMfailed); } if ((shadeSet = CMoptLookup (shadeSets,argv [argPos],true)) == DBFault) { CMmsgPrint (CMmsgUsrError,"Invalid shadeset!"); return (CMfailed); } shadeSet = shadeCodes [shadeSet]; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-V","--verbose")) { verbose = true; if ((argNum = CMargShiftLeft (argPos,argv,argNum)) <= argPos) break; continue; } if (CMargTest (argv [argPos],"-h","--help")) { CMmsgPrint (CMmsgInfo,"%s [options] <input grid> <output grid>",CMprgName(argv[0])); CMmsgPrint (CMmsgInfo," -g,--grid [continuous grid coverage]"); CMmsgPrint (CMmsgInfo," -i,--difference [absolute|relative]"); CMmsgPrint (CMmsgInfo," -t,--title [dataset title]"); CMmsgPrint (CMmsgInfo," -u,--subject [subject]"); CMmsgPrint (CMmsgInfo," -d,--domain [domain]"); CMmsgPrint (CMmsgInfo," -v,--version [version]"); CMmsgPrint (CMmsgInfo," -s,--shadeset [standard|grey|blue|blue-to-red|elevation]"); CMmsgPrint (CMmsgInfo," -V,--verbose"); CMmsgPrint (CMmsgInfo," -h,--help"); return (DBSuccess); } if ((argv [argPos][0] == '-') && (strlen (argv [argPos]) > 1)) { CMmsgPrint (CMmsgUsrError,"Unknown option: %s!",argv [argPos]); return (CMfailed); } argPos++; } if (argNum > 3) { CMmsgPrint (CMmsgUsrError,"Extra arguments!"); return (CMfailed); } if (verbose) RGlibPauseOpen (argv[0]); rightData = new DBObjData (); if (gridName == (char *) NULL) { CMmsgPrint (CMmsgUsrError,"Missing operand grid"); return (CMfailed); } if ((ret = rightData->Read (gridName)) || (rightData->Type () != DBTypeGridContinuous)) { delete rightData; return (CMfailed); } retData = new DBObjData (); ret = (argNum > 1) && (strcmp (argv [1],"-") != 0) ? retData->Read (argv [1]) : retData->Read (stdin); if ((ret == DBFault) || (retData->Type () != DBTypeGridContinuous)) { delete rightData; delete retData; return (CMfailed); } if (mode == 1) { leftData = new DBObjData (*retData); DBGridOperation (leftData,rightData,DBMathOperatorAdd, true); DBGridOperation (retData, rightData,DBMathOperatorSub, true); DBGridOperation (retData, leftData, DBMathOperatorDiv, true); delete leftData; } else DBGridOperation (retData,rightData,DBMathOperatorSub, true); if (title != (char *) NULL) retData->Name (title); if (subject != (char *) NULL) retData->Document (DBDocSubject,subject); if (domain != (char *) NULL) retData->Document (DBDocGeoDomain,domain); if (version != (char *) NULL) retData->Document (DBDocVersion,version); if (shadeSet != DBFault) { retData->Flags (DBDataFlagDispModeContShadeSets,DBClear); retData->Flags (shadeSet,DBSet); } ret = (argNum > 2) && (strcmp (argv [2],"-") != 0) ? retData->Write (argv [2]) : retData->Write (stdout); delete retData; delete rightData; if (verbose) RGlibPauseClose (); return (ret); }