int main(int argc, char *argv[], char* envp[]) { char options[] = "pisuU:dvV:cC:"; int c, dflg = 0, fflg = 0, gflg = 0; char *f_ptr, *g_ptr; while ((c = getopt(argc, argv, options)) != EOF) { switch (c) { case 'i': printRealAndEffectiveId(); break; case 's': makeMeLeader(); break; case 'p': printProcessId(); break; case 'u': printUlimit(); break; case 'U': setUlimit(optarg); break; case 'd': printCurrentDirectory(); break; case 'v': printEviron(); break; case 'V': setEnviron(optarg); break; case 'c': printCore(); break; case 'C': setCore(optarg); break; case '?': printf("invalid option is %c\n", optopt); } } }
void rWriteJson(FILE *f, struct tagStorm *storm, struct tagStanza *stanza, struct ttjSubObj *obj, struct ttjSubObj *labeledObj, struct hash *schemaHash, struct dyString *scratch) /* Write out json object recursively */ { boolean isArray = allDigitNames(obj->children); struct ttjSubObj *field; if (isArray) { fprintf(f, "["); for (field = obj->children; field != NULL; field = field->next) { if (field != obj->children) // Only write comma separators after the first one fprintf(f, ","); rWriteJson(f, storm, stanza, field, labeledObj, schemaHash, scratch); } fprintf(f, "]"); } else { fprintf(f, "{"); boolean firstOut = TRUE; /* Figure out if we need to attach a core object and do so. The figuring bit is * frankly clunky. */ char *objType = labeledObj->name; if (sameString(objType, "submitter") || sameString(objType, "contributors")) objType = "contact"; else if (sameString(objType, "publications")) objType = "publication"; else if (sameString(objType, "protocol")) // protocol is actually just protocol_id objType = "string"; else if (sameString(objType, "protocols")) // but protocols array is protocol objType = "protocol"; else if (sameString(objType, "umi_barcode")) objType = "barcode"; if (objNeedsCore(objType)) printCore(f, objType, &firstOut); for (field = obj->children; field != NULL; field = field->next) { char *fieldName = field->name; if (field->children != NULL) { /* Look for funny characteristics_ as these are largely up to user. */ if (startsWith("characteristics_", field->name)) errAbort("No '.' allowed in field name after characteristics_ in %s", field->children->fullName); /* If actually have data in this stanza write our field. */ if (prefixDotInStanza(field->fullName, stanza, scratch)) { writeJsonTag(f, fieldName, &firstOut); rWriteJson(f, storm, stanza, field, field, schemaHash, scratch); } } else { char *val = tagFindVal(stanza, field->fullName); if (val != NULL) { boolean isNum = FALSE; char *schemaName = tagSchemaFigureArrayName(field->fullName, scratch); struct tagSchema *schema = hashFindVal(schemaHash, schemaName); if (schema != NULL) isNum = (schema->type == '#' || schema->type == '%'); if (sameString(fieldName, "files")) { writeJsonTag(f, "lanes", &firstOut); writeLaneArray(f, stanza, val); } else { boolean isArray = FALSE; writeJsonTag(f, fieldName, &firstOut); if (schema != NULL) isArray = schema->isArray; struct slName *list = csvParse(val); if (isArray) fputc('[', f); else { if (list->next != NULL) // more than one element errAbort("Multiple vals for scalar tag %s in stanza starting line %d of %s", field->fullName, stanza->startLineIx, storm->fileName); } struct slName *el; for (el = list; el != NULL; el = el->next) { writeJsonVal(f, el->name, isNum); if (el->next != NULL) fputc(',', f); } if (isArray) fputc(']', f); slFreeList(&list); } } } } fprintf(f, "}"); } }