AlcDLPList *HGU_XmFileListCreateList( String resourceFile, WlzErrorNum *dstErr) { AlcDLPList *list=NULL; FILE *fp; HGU_XmFileListCallbackStruct *cbs; int index; WlzErrorNum errNum=WLZ_ERR_NONE; AlcErrno alcErrno; /* check input parameters */ if( resourceFile == NULL ){ errNum = WLZ_ERR_PARAM_NULL; } /* create list */ list = AlcDLPListNew(&alcErrno); /* read file to get menu items */ if( errNum == WLZ_ERR_NONE ){ if( (fp = fopen(resourceFile, "r")) ){ BibFileRecord *bibfileRecord; BibFileError bibFileErr; /* search for file list entry */ bibFileErr = BibFileRecordRead(&bibfileRecord, NULL, fp); while( bibFileErr == BIBFILE_ER_NONE ){ /* create items and add to list */ if( !strncmp(bibfileRecord->name, "HGU_XmFileListFileRecord", 23) ){ cbs = (HGU_XmFileListCallbackStruct *) AlcMalloc(sizeof(HGU_XmFileListCallbackStruct)); errNum = WlzEffBibParseFileRecord(bibfileRecord, &index, &(cbs->file), &(cbs->format)); AlcDLPListEntryAppend(list, NULL, (void *) cbs, HGU_XmFileListItemFree); } BibFileRecordFree(&bibfileRecord); bibFileErr = BibFileRecordRead(&bibfileRecord, NULL, fp); } } else { errNum = WLZ_ERR_FILE_OPEN; } } if( dstErr ){ *dstErr = errNum; } return list; }
void postProcMajorPageSelectCb( Widget w, XtPointer client_data, XtPointer call_data) { /* we have shifted to post-processing, clear undo/redo lists */ if( sgnlPostProcUndoList ){ /* free list and all entries */ AlcDLPListFree(sgnlPostProcUndoList); } /* create the list */ sgnlPostProcUndoList = AlcDLPListNew(NULL); if( sgnlPostProcRedoList ){ /* free list and all entries */ AlcDLPListFree(sgnlPostProcRedoList); } /* create the list */ sgnlPostProcRedoList = AlcDLPListNew(NULL); return; }
static void AlcDLPListTest(void) { AlcDLPList *list = NULL; AlcDLPItem *item0 = NULL, *item1; int count; AlcErrno errNum = ALC_ER_NONE; (void )printf("Simple test program for AlcDLPList functions\n"); (void )printf("=======================================\n\n"); (void )printf("\n* Create a new list.\n"); list = AlcDLPListNew(&errNum); AlcPrintAndCheckErr(errNum); (void )printf("\n* Insert items into list.\n"); count = 0; do { errNum = AlcDLPListEntryInsert(list, NULL, (void *)count, NULL); ++count; AlcPrintAndCheckErr(errNum); } while(count < 10); (void )printf("\n* Print list using iterator function.\n"); (void )printf("\nExpected output:\n" "9 33\n" "8 33\n" "7 33\n" "6 33\n" "5 33\n" "4 33\n" "3 33\n" "2 33\n" "1 33\n" "0 33\n"); (void )printf("\nActual output:\n"); item0 = AlcDLPListIterate(list, list->head, ALC_DIRECTION_FWD, PrintItems, (void *)33, &errNum); AlcPrintAndCheckErr(errNum); (void )printf("\n* Sort items.\n"); errNum = AlcDLPListSort(list, CompareEntries); AlcPrintAndCheckErr(errNum); (void )printf("\n* Find entry == 5.\n"); item0 = AlcDLPListIterate(list, list->head, ALC_DIRECTION_FWD, FindEntryEq, (void *)5, &errNum); AlcPrintAndCheckErr(errNum); (void )printf("\n* Found entry == %d\n", (int )(item0->entry)); (void )printf("\n* Delete the entry found.\n"); (void )AlcDLPItemUnlink(list, item0, 1, &errNum); AlcPrintAndCheckErr(errNum); (void )printf("\n* Print list using iterator function (again).\n"); item0 = AlcDLPListIterate(list, list->head, ALC_DIRECTION_FWD, PrintItems, (void *)33, &errNum); AlcPrintAndCheckErr(errNum); (void )printf("\n* Find entry == 3.\n"); item0 = AlcDLPListIterate(list, list->head, ALC_DIRECTION_FWD, FindEntryEq, (void *)3, &errNum); AlcPrintAndCheckErr(errNum); (void )printf("\n* Unlink this item.\n"); (void )AlcDLPItemUnlink(list, item0, 0, &errNum); AlcPrintAndCheckErr(errNum); (void )printf("\n* Find entry == 7.\n"); item1 = AlcDLPListIterate(list, list->head, ALC_DIRECTION_FWD, FindEntryEq, (void *)7, &errNum); AlcPrintAndCheckErr(errNum); (void )printf("\n* Append the item with entry == 3 " "after item with entry == 7.\n"); errNum = AlcDLPItemAppend(list, item1, item0); AlcPrintAndCheckErr(errNum); (void )printf("\n* Print list using iterator function (again).\n"); item0 = AlcDLPListIterate(list, list->head, ALC_DIRECTION_FWD, PrintItems, (void *)33, &errNum); AlcPrintAndCheckErr(errNum); (void )printf("\n* Free the list.\n"); AlcDLPListFree(list); }
int main(int argc, char *argv[]) { FILE *inFile, *outFile; char optList[] = "hv"; int option; int verboseFlg=0; WlzObject *obj; WlzDomain domain; WlzValues values; WlzBoundList *tmpBnd; char *name; AlcDLPList *bndDLPList; AlcDLPItem *bndItem; NamedBndItem *namedBndItem; int noNameCntr=0; char noNameBuf[32]; /* read the argument list and check for an input file */ opterr = 0; while( (option = getopt(argc, argv, optList)) != EOF ){ switch( option ){ case 'v': verboseFlg = 1; break; case 'h': usage(argv[0]); return WLZ_ERR_NONE; default: usage(argv[0]); return WLZ_ERR_UNSPECIFIED; } } inFile = stdin; if( optind < argc ){ if( (inFile = fopen(*(argv+optind), "r")) == NULL ){ fprintf(stderr, "%s: can't open file %s\n", argv[0], *(argv+optind)); usage(argv[0]); return( 1 ); } } /* read XML file building boundary lists */ /* quick fix read - read until no new names */ bndDLPList = AlcDLPListNew(NULL); name = NULL; while((name = getNextName(inFile)) != NULL){ /* check for empty name */ if( strcmp(name, " ") == 0 ){ noNameCntr++; sprintf(noNameBuf, "NoName_%03d", noNameCntr); name = AlcStrDup(noNameBuf); } /* convert comma to underscore */ tmpBnd = getNextBoundary(inFile); addToBndList(bndDLPList, name, tmpBnd); } /* write boundary lists */ bndItem = bndDLPList->head; while( bndItem ){ namedBndItem = (NamedBndItem *) bndItem->entry; name = (char *) AlcMalloc(sizeof(char)*(strlen(namedBndItem->name)+16)); sprintf(name, "%s.wlz", namedBndItem->name); if((outFile = fopen(name, "w")) != NULL){ domain.b = namedBndItem->bnd; values.core = NULL; obj = WlzMakeMain(WLZ_BOUNDLIST, domain, values, NULL, NULL, NULL); WlzWriteObj(outFile, obj); WlzFreeObj(obj); fclose(outFile); } AlcFree(name); bndItem = bndItem->next; if( bndItem == bndDLPList->head ){ break; } } exit(0); }