Mercurial > hg > aim92
view model/defaults.c @ 0:5242703e91d3 tip
Initial checkin for AIM92 aimR8.2 (last updated May 1997).
author | tomwalters |
---|---|
date | Fri, 20 May 2011 15:19:45 +0100 |
parents | |
children |
line wrap: on
line source
/* defaults.c ========== override the optiuons table defaults */ #include <string.h> #include <stdio.h> #include "options.h" #include "stitch.h" #include "source.h" #include "model.h" /************************************************************************** * constructOptions( which ) * Return an options table, (an array of Option structs). * This table is used by getopts(), helpopts(), readopts(), and writeopts(). * (These are all called from gen.c, and defined in options.c). * * The display options particular to the current application (given by "which") * are listed at the end of the table. * The rest of the options table is ordered with the * earliest options at the end of the table. The earliest options are those * corresponding to the earliest processing stages (at the bottom of the stage * table). Note that the options table is printed in reverse order by the * help-handler routine in options.c, so that the earliest options appear at * the top of the help menu. * The option defaults (as defined in displayopts and in table.c), are over- * written by application defaults, so that each application can have specific * defaults. The tables of option defaults for each application are defined * in gen.c, and each is referenced by the entry in the defaults field of the * stage struct for the application, (in model.c:FindStage()). **************************************************************************/ /* override option defaults with specific defaults for this application */ Option *constructOptions( which, applicationTable ) char *which; Option *applicationTable ; { struct _stage *sptr, *stage=FindStage( which ) ; Option *optr, *options; char **cptr, *vptr; int i, j, n=0; /* count the stage options and find the bottom of the stage table */ for (sptr=stage ; sptr->ident != (char *)0 ; sptr++) if ((optr=sptr->options) != (Option *) 0) for (i=0 ; optr[i].name != (char *)0 ; i++, n++) ; /* add in the count of the display options for this application */ for (i=0 ; applicationTable[i].name != (char *)0 ; i++, n++) ; /* allocate and null-terminate space for the complete options table */ options = NewArray(Option, n+1, "option_list"); options[n--].name = (char *)0; /* copy the display options table into the options table */ for (i=0 ; applicationTable[i].name != (char *)0 ; i++, --n) CopyArray( &applicationTable[i], &options[n], 1 ); /* copy stage options into options table from bottom up */ for (--sptr ; sptr>=stage ; --sptr) if ((optr=sptr->options) != (Option *) 0) for (i=0 ; optr[i].name != (char *)0 ; i++, --n) { CopyArray( &optr[i], &options[n], 1 ); } if( (cptr = stage->defaults) != (char **) 0 ) { for (i=0 ; cptr[i] != (char *) 0 ; i++) { /* split string at '=', so cptr[i] is name and vptr is value */ for (vptr=cptr[i] ; *vptr != '=' ; vptr++) ; vptr++ ; /* find name in options table, and substitute default value */ for ( j=n+1 ; options[j].name != (char *) 0 ; j++) if (strncmp(options[j].name, cptr[i], vptr-1-cptr[i]) == 0) { options[j].defaultValue = vptr ; break; } /* if( options[j].name == (char *) 0 ) stitch_error( "problem with %s", cptr[i] ) ; */ } } return ( options ) ; }