Changeset 6187
- Timestamp:
- Jan 23, 2006, 1:52:15 PM (20 years ago)
- Location:
- trunk/psLib
- Files:
-
- 5 added
- 9 edited
-
src/astro/psSphereOps.h (modified) (1 diff)
-
src/pslib_strict.h (modified) (2 diffs)
-
src/types/Makefile.am (modified) (2 diffs)
-
src/types/psArguments.c (added)
-
src/types/psArguments.h (added)
-
src/types/psMetadata.c (modified) (2 diffs)
-
src/types/psMetadata.h (modified) (2 diffs)
-
test/types/Makefile.am (modified) (2 diffs)
-
test/types/tst_psArguments.c (added)
-
test/types/tst_psMetadata_07.c (modified) (4 diffs)
-
test/types/verified/tst_psArguments.stderr (added)
-
test/types/verified/tst_psArguments.stdout (added)
-
test/types/verified/tst_psMetadata_07.stderr (modified) (1 diff)
-
test/types/verified/tst_psMetadata_07.stdout (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/astro/psSphereOps.h
r6039 r6187 6 6 * 7 7 * @author Robert DeSonia, MHPCC 8 * 9 * @version $Revision: 1.9 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2006-01-18 23:49:06 $ 8 * @author David Robbins, MHPCC 9 * 10 * @version $Revision: 1.10 $ $Name: not supported by cvs2svn $ 11 * @date $Date: 2006-01-23 23:52:15 $ 11 12 * 12 13 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii -
trunk/psLib/src/pslib_strict.h
r6185 r6187 9 9 * @author Eric Van Alst, MHPCC 10 10 * 11 * @version $Revision: 1.1 2$ $Name: not supported by cvs2svn $12 * @date $Date: 2006-01-23 2 0:44:29$11 * @version $Revision: 1.13 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2006-01-23 23:52:15 $ 13 13 * 14 14 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 115 115 #include "psMetadataConfig.h" 116 116 #include "psPixels.h" 117 #include "psArguments.h" 117 118 /// @} 118 119 -
trunk/psLib/src/types/Makefile.am
r5302 r6187 12 12 psMetadata.c \ 13 13 psMetadataConfig.c \ 14 psPixels.c 14 psPixels.c \ 15 psArguments.c 15 16 16 17 EXTRA_DIST = types.i … … 25 26 psMetadata.h \ 26 27 psMetadataConfig.h \ 27 psPixels.h 28 psPixels.h \ 29 psArguments.h -
trunk/psLib/src/types/psMetadata.c
r6184 r6187 12 12 * @author Ross Harman, MHPCC 13 13 * 14 * @version $Revision: 1.9 3$ $Name: not supported by cvs2svn $15 * @date $Date: 2006-01-23 2 0:04:31$14 * @version $Revision: 1.94 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2006-01-23 23:52:15 $ 16 16 * 17 17 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 992 992 } 993 993 994 995 // Set verbosity level996 int psArgumentVerbosity(int *argc, char **argv)997 {998 int logLevel = 2; // Default log level999 int argnum = 0; // Argument number1000 1001 // set in order, so that -vvv overrides -vv overrides -v1002 if ( (argnum = psArgumentGet(*argc, argv, "-v")) ) {1003 psArgumentRemove(argnum, argc, argv);1004 logLevel = 3;1005 }1006 if ( (argnum = psArgumentGet(*argc, argv, "-vv")) ) {1007 psArgumentRemove(argnum, argc, argv);1008 logLevel = 4;1009 }1010 if ( (argnum = psArgumentGet(*argc, argv, "-vvv")) ) {1011 psArgumentRemove(argnum, argc, argv);1012 logLevel = 5;1013 }1014 psLogSetLevel(logLevel); // XXX: This function should return an error if the log level is invalid1015 1016 if ( (argnum = psArgumentGet(*argc, argv, "-logfmt")) ) {1017 if (*argc < argnum + 2) {1018 psError(PS_ERR_IO, true, "-logfmt switch specified without a format.");1019 } else {1020 psArgumentRemove(argnum, argc, argv);1021 psLogSetFormat(argv[argnum]); // XXX EAM : this function should return an error if the log format is invalid1022 psArgumentRemove(argnum, argc, argv);1023 }1024 }1025 1026 // Now the trace stuff1027 // argument format is: -trace (facil) (level)1028 while ( (argnum = psArgumentGet(*argc, argv, "-trace")) ) {1029 if ( (*argc < argnum + 3) ) {1030 psError(PS_ERR_IO, true, "-trace switch specified without facility and level.");1031 }1032 psArgumentRemove(argnum, argc, argv);1033 psTraceSetLevel(argv[argnum], atoi(argv[argnum+1])); // XXX: This function should return an error if the trace level is invalid1034 psArgumentRemove(argnum, argc, argv);1035 psArgumentRemove(argnum, argc, argv);1036 }1037 if ((argnum = psArgumentGet(*argc, argv, "-trace-levels"))) {1038 psTracePrintLevels();1039 exit(2);1040 }1041 1042 return logLevel;1043 }1044 1045 // Find the location of the specified argument1046 int psArgumentGet(int argc, char **argv, const char *arg)1047 {1048 for (int i = 1; i < argc; i++) {1049 if (!strcmp(argv[i], arg))1050 return i;1051 }1052 1053 return 0;1054 }1055 1056 // Remove the specified argument (by location)1057 bool psArgumentRemove(int argnum, int *argc, char **argv)1058 {1059 if (argnum > 0) {1060 (*argc)--;1061 for (int i = argnum; i < *argc; i++) {1062 argv[i] = argv[i+1];1063 }1064 } else {1065 return false;1066 }1067 1068 return true;1069 }1070 1071 1072 static psMetadataItem *argumentRead(psMetadataItem *item, // Item to read into1073 int argnum, // Argument number1074 int *argc, // Number of arguments in total1075 char **argv) // The arguments1076 1077 {1078 psMetadataItem *newItem = NULL;1079 switch(item->type)1080 {1081 // Only doing a representative set of types1082 case PS_DATA_S32:1083 newItem = psMetadataItemAlloc(item->name, item->type, item->comment, atoi(argv[argnum]));1084 psArgumentRemove(argnum, argc, argv);1085 break;1086 case PS_DATA_F32:1087 newItem = psMetadataItemAlloc(item->name, item->type, item->comment, atof(argv[argnum]));1088 psArgumentRemove(argnum, argc, argv);1089 break;1090 case PS_DATA_BOOL:1091 // Turn option on; no optional argument to remove1092 newItem = psMetadataItemAlloc(item->name, item->type, item->comment, true);1093 break;1094 // XXX: Include the other numerical types1095 case PS_DATA_STRING: {1096 //psString string = psStringCopy(argv[argnum]); // Get the argument into PS memory management1097 //psFree(string);1098 newItem = psMetadataItemAlloc(item->name, item->type, item->comment, argv[argnum]);1099 psArgumentRemove(argnum, argc, argv);1100 }1101 break;1102 default:1103 psError(PS_ERR_IO, true, "Argument type (%x) is not supported --- argument %s ignored\n",1104 item->type, item->name);1105 psFree(newItem);1106 return NULL;1107 }1108 1109 return newItem;1110 }1111 1112 1113 // XXX: There is a memory leak in the MULTI section. I think it might have something to do with reference1114 // counting between lists and MD, in the second section of the code (copy newArgs into arguments), but I'm not1115 // entirely sure.1116 bool psArgumentParse(psMetadata *arguments,1117 int *argc,1118 char **argv)1119 {1120 // We need to do a bit of mucking around in order to preserve the arguments metadata until the last1121 // minute --- if there is a bad argument, we need to return the old "arguments", since they contain1122 // the default values, which we probably want to output in a "help" message (we don't want to print1123 // the changed values and have the user think that they are default values).1124 1125 psMetadata *newArgs = psMetadataAlloc(); // Place to read arguments into1126 psList *changed = psListAlloc(NULL);// List of keys that have changed1127 1128 for (int i = 1; i < *argc; i++) {1129 psTrace(__func__, 7, "Looking at %s\n", argv[i]);1130 psMetadataItem *argItem = psMetadataLookup(arguments, argv[i]);1131 if (argItem) {1132 psArgumentRemove(i, argc, argv); // Remove the switch1133 if (argItem->type != PS_DATA_METADATA_MULTI) {1134 if (argItem->type != PS_DATA_BOOL && *argc < i + 1) {1135 psError(PS_ERR_IO, true, "Required argument for %s is missing.\n", argItem->name);1136 // XXX: Cleanup before returning1137 psFree(newArgs);1138 return false;1139 }1140 psMetadataItem *newItem = argumentRead(argItem, i, argc, argv);1141 psMetadataAddItem(newArgs, newItem, PS_LIST_TAIL, PS_META_REPLACE);1142 psFree(newItem);1143 } else {1144 // Go through the MULTI1145 psList *multi = argItem->data.V; // The list of MULTI psMetadataItems1146 if (*argc < i + multi->n) {1147 psError(PS_ERR_IO, true, "Not enough arguments for %s.\n", argItem->name);1148 // Remove the arguments --- they will be ignored1149 for (int j = i; j < *argc; j++) {1150 psArgumentRemove(i, argc, argv);1151 }1152 // XXX: Cleanup before returning1153 psFree(newArgs);1154 return false;1155 }1156 1157 // Remove any prior existence in the newArgs --- this is important because we specify1158 // adding the new items as DUPLICATE_OK, so if some idiot specifies it twice, we'd end1159 // up with two copies of everything.1160 psMetadataItem *checkItem = psMetadataLookup(newArgs, argItem->name);1161 if (checkItem) {1162 (void)psMetadataRemove(newArgs, 0, argItem->name);1163 (void)psListRemoveData(changed, argItem->name);1164 }1165 1166 psListIterator *multiIter = psListIteratorAlloc(multi, PS_LIST_HEAD, true);1167 psMetadataItem *nextItem = NULL; // Item from list1168 while ( (nextItem = psListGetAndIncrement(multiIter)) ) {1169 psMetadataItem *newItem = argumentRead(nextItem, i, argc, argv);1170 psMetadataAddItem(newArgs, newItem, PS_LIST_TAIL, PS_META_DUPLICATE_OK);1171 //psFree(newItem);1172 }1173 psFree(multiIter);1174 }1175 1176 // Some book-keeping1177 // psString name = psStringCopy(argItem->name);1178 psListAdd(changed, PS_LIST_TAIL, argItem->name);1179 i--;1180 1181 } else if ( (strncmp(argv[i], "-", 1) == 0 ) || (strncmp(argv[i], "+", 1) == 0) ) {1182 // Someone's specified a bad option1183 psError(PS_ERR_IO, true, "Unknown option: %s\n", argv[i]);1184 psFree(newArgs);1185 return false;1186 }1187 }1188 1189 // All the arguments are good, so now we can copy the newArgs over1190 psListIterator *changedIter = psListIteratorAlloc(changed, PS_LIST_HEAD, false); // Iterator1191 psString name = NULL; // Item from iteration1192 while ( (name = psListGetAndIncrement(changedIter)) ) {1193 printf("Updating %s\n", name);1194 psMetadataItem *oldItem = psMetadataLookup(arguments, name);1195 psMetadataItem *newItem = psMetadataLookup(newArgs, name);1196 if ( (oldItem->type != newItem->type) ) {1197 psAbort(__func__, "Shouldn't reach here!\n");1198 }1199 switch (oldItem->type) {1200 // Only doing a representative set of types1201 case PS_DATA_S32:1202 oldItem->data.S32 = newItem->data.S32;1203 break;1204 case PS_DATA_F32:1205 oldItem->data.F32 = newItem->data.F32;1206 break;1207 case PS_DATA_BOOL:1208 oldItem->data.B = newItem->data.B;1209 break;1210 // XXX: Include the other numerical types1211 case PS_DATA_STRING:1212 psFree(oldItem->data.V);1213 oldItem->data.V = psMemIncrRefCounter(newItem->data.V);1214 break;1215 case PS_DATA_METADATA_MULTI: {1216 psList *newMulti = psMemIncrRefCounter(newItem->data.V); // The new list of MULTI1217 psList *oldMulti = oldItem->data.V; // The old list of MULTI1218 psListIterator *newMultiIter = psListIteratorAlloc(newMulti, PS_LIST_HEAD, false);1219 psListIterator *oldMultiIter = psListIteratorAlloc(oldMulti, PS_LIST_HEAD, true);1220 psMetadataItem *newMultiItem = NULL; // Item from iterator1221 while ( (newMultiItem = psListGetAndIncrement(newMultiIter)) ) {1222 psMetadataItem *oldMultiItem = psListGetAndIncrement(oldMultiIter);1223 if (!oldMultiItem) {1224 psAbort(__func__,1225 "Something went very wrong here! The lists SHOULD be of the same length!\n");1226 }1227 switch (oldMultiItem->type) {1228 // Only doing a representative set of types1229 case PS_DATA_S32:1230 oldItem->data.S32 = newItem->data.S32;1231 break;1232 case PS_DATA_F32:1233 oldItem->data.F32 = newItem->data.F32;1234 break;1235 // XXX: Include the other numerical types1236 case PS_DATA_STRING:1237 psFree(oldItem->data.V);1238 oldItem->data.V = psMemIncrRefCounter(newItem->data.V);1239 break;1240 default:1241 psAbort(__func__, "Should never ever get here, ever.\n");1242 }1243 psFree(oldMultiItem);1244 psFree(newMultiItem);1245 }1246 psFree(newMultiIter);1247 psFree(oldMultiIter);1248 }1249 break;1250 default:1251 psAbort(__func__, "Should never ever ever get here.\n");1252 }1253 }1254 psFree(changedIter);1255 psFree(changed);1256 1257 // Now, blow away the newArgs and we're done.1258 psFree(newArgs);1259 return true;1260 }1261 1262 1263 static int argLength(psMetadataItem *arg)1264 {1265 switch (arg->type) {1266 // Only doing a representative set of types1267 case PS_DATA_S32:1268 return arg->data.S32 >= 0 ? (int)log10f((float)arg->data.S32) + 1 :1269 (int)log10f(-(float)arg->data.S32) + 2;1270 // XXX: Other numerical types1271 case PS_DATA_F32:1272 return arg->data.F32 >= 0 ? 12 : 13; // -d.dddddde?dd1273 case PS_DATA_F64:1274 return arg->data.F64 >= 0 ? 12 : 13; // -d.dddddde?dd1275 case PS_DATA_BOOL:1276 return arg->data.B ? 4 : 5;1277 case PS_DATA_STRING:1278 return strlen(arg->data.V);1279 default:1280 psAbort(__func__, "Argument type (%x) is not supported.\n", arg->type);1281 }1282 1283 return 0;1284 }1285 1286 #define NUM_SPACES 4 // Number of spaces between1287 1288 void psArgumentHelp(psMetadata *arguments)1289 {1290 printf("Optional arguments, with default values:\n");1291 psMetadataIterator *argIter = psMetadataIteratorAlloc(arguments, PS_LIST_HEAD, NULL);1292 psMetadataItem *argItem = NULL; // Item from iterator1293 int maxName = 4; // Maximum length of a name1294 int maxValue = 4; // Maximum length of a value1295 1296 // First pass to get the sizes1297 while ( (argItem = psMetadataGetAndIncrement(argIter)) ) {1298 if (strlen(argItem->name) > maxName) {1299 maxName = strlen(argItem->name);1300 }1301 int valLength = argLength(argItem);1302 if (valLength > maxValue) {1303 maxValue = valLength;1304 }1305 }1306 1307 // Second pass to print1308 psMetadataIteratorSet(argIter, PS_LIST_HEAD);1309 psString lastName = NULL; // Last name we printed1310 while ( (argItem = psMetadataGetAndIncrement(argIter)) ) {1311 // Initial indent1312 for (int i = 0; i < NUM_SPACES; i++) {1313 printf(" ");1314 }1315 1316 // Print the name if required1317 int position = 0; // Number of spaces in1318 if (! lastName || strcmp(lastName, argItem->name) != 0) {1319 // A new name1320 printf("%s", argItem->name);1321 position += strlen(argItem->name);1322 lastName = argItem->name;1323 }1324 for (int i = position; i < maxName + NUM_SPACES; i++) {1325 printf(" ");1326 }1327 1328 // Print the value1329 printf("(");1330 switch (argItem->type) {1331 // Only doing a representative set of types1332 case PS_DATA_S32:1333 printf("%d", argItem->data.S32);1334 break;1335 // XXX: Other numerical types1336 case PS_DATA_F32:1337 printf("%.6e", argItem->data.F32);1338 break;1339 case PS_DATA_F64:1340 printf("%.6e", argItem->data.F64);1341 break;1342 case PS_DATA_BOOL:1343 if (argItem->data.B) {1344 printf("TRUE");1345 } else {1346 printf("FALSE");1347 }1348 break;1349 case PS_DATA_STRING:1350 printf("%s", (char*)(argItem->data.V));1351 break;1352 default:1353 psAbort(__func__, "Argument type (%x) is not supported.\n", argItem->type);1354 }1355 printf(")");1356 for (int i = argLength(argItem); i < maxValue + NUM_SPACES; i++) {1357 printf(" ");1358 }1359 1360 // Print the comment1361 if (argItem->comment) {1362 printf("%s", argItem->comment);1363 }1364 printf("\n");1365 }1366 1367 psFree(argIter);1368 }1369 1370 // we have log levels 1 (Error), 2 (Warning), 3 (Info), 4 (Details), 5 (Minutiae)1371 // 2 = default, -v = 3, -vv = 4, -vvv = 51372 psS32 psLogArguments (int *argc, char **argv)1373 {1374 1375 int N, level;1376 1377 // default log level is 21378 level = 2;1379 1380 // set in order, so that -vvv overrides -vv overrides -v1381 if ((N = psArgumentGet (*argc, argv, "-v"))) {1382 psArgumentRemove (N, argc, argv);1383 level = 3;1384 }1385 if ((N = psArgumentGet (*argc, argv, "-vv"))) {1386 psArgumentRemove (N, argc, argv);1387 level = 4;1388 }1389 if ((N = psArgumentGet (*argc, argv, "-vvv"))) {1390 psArgumentRemove (N, argc, argv);1391 level = 5;1392 }1393 1394 if ((N = psArgumentGet (*argc, argv, "-logfmt"))) {1395 if (*argc < N + 2) {1396 psAbort ("psLogArguments", "USAGE: -logfmt (format)");1397 }1398 psArgumentRemove (N, argc, argv);1399 psLogSetFormat (argv[N]); // XXX EAM : this function should return an error if the log format is invalid1400 psArgumentRemove (N, argc, argv);1401 }1402 1403 // set the level, return the level1404 psLogSetLevel (level);1405 return (level);1406 }1407 1408 // set trace levels by facility1409 psS32 psTraceArguments (int *argc, char **argv)1410 {1411 1412 int N;1413 1414 // argument format is: -trace (facil) (level)1415 while ((N = psArgumentGet (*argc, argv, "-trace"))) {1416 if (*argc < N + 3) {1417 psAbort ("psTraceArguments", "USAGE: -trace (facility) (level)");1418 }1419 psArgumentRemove (N, argc, argv);1420 psTraceSetLevel (argv[N], atoi(argv[N+1]));1421 psArgumentRemove (N, argc, argv);1422 psArgumentRemove (N, argc, argv);1423 }1424 if ((N = psArgumentGet (*argc, argv, "-trace-levels"))) {1425 psTracePrintLevels ();1426 exit (2);1427 }1428 return (TRUE);1429 }1430 -
trunk/psLib/src/types/psMetadata.h
r6039 r6187 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1.7 2$ $Name: not supported by cvs2svn $14 * @date $Date: 2006-01- 18 23:49:06$13 * @version $Revision: 1.73 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2006-01-23 23:52:15 $ 15 15 * 16 16 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 732 732 ); 733 733 734 /** Implements the various verbosity controls.735 *736 * Arguments shall be removed from the argument list as they are processed.737 *738 * @return int: The resultant logging level.739 */740 int psArgumentVerbosity(741 int *argc, ///< number or arguments742 char **argv ///< the argument list743 );744 745 /** Checks for an argument and returns its index position if found.746 *747 * @return int: The index of the element in the argument list, otherwise 0.748 */749 int psArgumentGet(750 int argc, ///< number or arguments751 char **argv, ///< the argument list752 const char *arg ///< the specified argument to match753 );754 755 /** Removes from the argument list the argument whose index is argnum.756 *757 * The number of entries in the argument list shall be decremented.758 *759 * @return bool: True if the argnum is in the argument list, otherwise false.760 */761 bool psArgumentRemove(762 int argnum, ///< the argument to remove763 int *argc, ///< number or arguments764 char **argv ///< the argument list765 );766 767 /** Parses the command line arguments into a metadata container of arguments.768 *769 * The input arguments shall contain the list of possible arguments as the keywords providing770 * the default values. As matching arguments are found on the command line, the values shall be771 * read into the arguments metadata, with the appropriate type. The arguments and their values772 * shall be removed from the list of command line arguments as they are processed.773 *774 * @return bool: False if any argument was encountered that is not present in arguments.775 */776 bool psArgumentParse(777 psMetadata *arguments, ///< metadata container for arguments778 int *argc, ///< number or arguments779 char **argv ///< the argument list780 );781 782 /** Prints to stdout a guide to the command-line arguments. */783 void psArgumentHelp(784 psMetadata *arguments ///< metadata container for arguments785 );786 734 787 735 /// @} -
trunk/psLib/test/types/Makefile.am
r5303 r6187 25 25 tst_psMetadata_07 \ 26 26 tst_psMetadataIO \ 27 tst_psPixels 27 tst_psPixels \ 28 tst_psArguments 28 29 29 30 … … 47 48 tst_psMetadataIO_SOURCES = tst_psMetadataIO.c 48 49 tst_psPixels_SOURCES = tst_psPixels.c 50 tst_psArguments_SOURCES = tst_psArguments.c 49 51 50 52 check_DATA = \ -
trunk/psLib/test/types/tst_psMetadata_07.c
r6184 r6187 16 16 * @author David Robbins, MHPCC 17 17 * 18 * @version $Revision: 1.1 6$ $Name: not supported by cvs2svn $19 * @date $Date: 2006-01-23 2 0:04:31$18 * @version $Revision: 1.17 $ $Name: not supported by cvs2svn $ 19 * @date $Date: 2006-01-23 23:52:15 $ 20 20 * 21 21 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 32 32 static psS32 testMetaAddPtr(void); 33 33 static psS32 testMetaCopy(void); 34 static psS32 testArgument(void);35 34 36 35 testDescription tests[] = { … … 40 39 {testMetaAddPtr, 4, "Test psMetadataAddPtr", 0, false}, 41 40 {testMetaCopy, 5, "Test psMetadataCopy", 0, false}, 42 {testArgument, 6, "Test psArgument fxns", 0, false},43 41 {NULL} 44 42 }; … … 276 274 return 0; 277 275 } 278 279 psS32 testArgument(void)280 {281 char *argv[6];282 argv[0] = "./program";283 argv[1] = "-string";284 argv[2] = "new";285 argv[3] = "-float";286 argv[4] = "6.66";287 argv[5] = "-vvv";288 int argc = 6;289 290 int i = psArgumentGet(argc, argv, "-float");291 if ( i != 0 ) {292 if ( !psArgumentRemove(i, &argc, argv) ) {293 printf("\n Failed to remove float from argument list\n");294 }295 } else {296 printf("\nFailed to find string in argument list\n");297 return 1;298 }299 psArgumentRemove(i, &argc, argv);300 printf("\n Argument %d has been removed", i);301 int log = psArgumentVerbosity(&argc, argv);302 printf("\nLog level = %d \n", log);303 304 psMetadata *args = psMetadataAlloc();305 psMetadataAdd(args, PS_LIST_TAIL, "-string", PS_DATA_STRING, "Test String", "SomeString");306 psMetadataAdd(args, PS_LIST_TAIL, "-int", PS_DATA_S32 | PS_META_DUPLICATE_OK, "Int1", 1);307 psMetadataAdd(args, PS_LIST_TAIL, "-int", PS_DATA_S32 | PS_META_DUPLICATE_OK, "Int2", 2);308 psMetadataAdd(args, PS_LIST_TAIL, "-float", PS_DATA_F32, "Test Float", 0.0);309 310 printf("\nThis Should print the Argument Help list.\n\n");311 psArgumentHelp(args);312 313 if ( !psArgumentParse(args, &argc, argv) || argc != 1 ) {314 psArgumentHelp(args);315 psFree(args);316 return 2;317 }318 319 psMetadataPrint(args, 4);320 321 psFree(args);322 return 0;323 }324 -
trunk/psLib/test/types/verified/tst_psMetadata_07.stderr
r6184 r6187 50 50 ---> TESTPOINT PASSED (psMetadata_07{Test psMetadataCopy} | tst_psMetadata_07.c) 51 51 52 /***************************** TESTPOINT ******************************************\53 * TestFile: tst_psMetadata_07.c *54 * TestPoint: psMetadata_07{Test psArgument fxns} *55 * TestType: Positive *56 \**********************************************************************************/57 58 59 ---> TESTPOINT PASSED (psMetadata_07{Test psArgument fxns} | tst_psMetadata_07.c)60 -
trunk/psLib/test/types/verified/tst_psMetadata_07.stdout
r5296 r6187 44 44 ---> TESTPOINT PASSED (psMetadata{Test E - psMetadataConfigWrite} | tst_psMetadata_07.c) 45 45 46 47 Argument 3 has been removed48 Log level = 549 50 This Should print the Argument Help list.51 52 Optional arguments, with default values:53 -string (SomeString) Test String54 -int (1) Int155 (2) Int256 -float (0.000000e+00) Test Float57 Updating -string58 -string (Test String): new59 -int (Int1): 160 -int (Int2): 261 -float (Test Float): 0.000000
Note:
See TracChangeset
for help on using the changeset viewer.
