static HMODULE GetLibrary(ShimmedLib LibIndex) { // the rest of the accesses to are not protected by locks // so I assume that locking is not needed here if(g_Libs[LibIndex].Handle == NULL) { g_Libs[LibIndex].Handle = SetupLib(LibIndex); } return g_Libs[LibIndex].Handle; }
int main ( int argc, char ** argv ) { SetupLib(argc,argv,"gen-ui",PROG_UNKNOWN); static ccp def_null_name = "/dev/null"; FILE * nf = fopen(def_null_name,"wb"); if (!nf) { fprintf(stderr,"!!! Can't create file: %s\n",def_null_name); return ERR_CANT_CREATE; } static ccp def_fname = "src/ui/ui.def"; FILE * df = fopen(def_fname,"wb"); if (!df) { fprintf(stderr,"!!! Can't create file: %s\n",def_fname); return ERR_CANT_CREATE; } char fname[200]; info_t * info = info_tab; while ( info->type != T_END ) { if ( ! ( info->type & T_DEF_TOOL ) ) { fprintf(stderr,"!!! Missing T_DEF_TOOL entry.\n"); return ERR_SYNTAX; } control_t ctrl; memset(&ctrl,0,sizeof(ctrl)); ctrl.df = nf; ctrl.opt_prefix = ""; InitializeStringField(&ctrl.gopt); InitializeStringField(&ctrl.copt); InitializeStringField(&ctrl.opt_done); if ( !( info->type & F_HIDDEN ) ) { ctrl.df = df; snprintf(iobuf,sizeof(iobuf),"Tool '%s'",info->c_name); print_section(df,sep2,iobuf); fprintf(df,"#:def_tool( \"%s\", \\\n",info->c_name); DumpText(df,0,0,info->param,1,", \\\n"); DumpText(df,0,0,info->help,1," )\n\n"); } snprintf(fname,sizeof(fname),"src/ui/ui-%s.c",info->c_name); ctrl.cf = fopen(fname,"wb"); if (!ctrl.cf) { fprintf(stderr,"!!! Can't create file: %s\n",fname); return ERR_CANT_CREATE; } snprintf(fname,sizeof(fname),"src/ui/ui-%s.h",info->c_name); ctrl.hf = fopen(fname,"wb"); if (!ctrl.hf) { fprintf(stderr,"!!! Can't create file: %s\n",fname); return ERR_CANT_CREATE; } ctrl.info = info++; while ( ! ( info->type & (T_END|T_DEF_TOOL)) ) { if ( info->type & T_DEF_OPT ) { if ( info->type & F_OPT_GLOBAL ) { InsertStringField(&ctrl.gopt,info->c_name,false); ++ctrl.n_opt; //opt_index = 0 for global options } else { InsertStringField(&ctrl.copt,info->c_name,false); info->index = ++ctrl.n_opt_specific; } if ( !info->help ) { // copy 'param' and 'help' info from previous tool const info_t * search; for ( search = info; search >= info_tab; search-- ) if ( search->type & T_DEF_OPT && search->help && !strcmp(search->c_name,info->c_name) ) { info->help = search->help; if (!info->param) info->param = search->param; break; } } if ( !( info->type & F_HIDDEN ) ) { fprintf(ctrl.df,"#:def_opt( \"%s\", \"%s\", \"%s%s%s%s%s\", \\\n", info->c_name, info->namelist, info->type & F_OPT_COMMAND ? "C" : "", info->type & F_OPT_GLOBAL ? "G" : "", info->type & F_OPT_MULTIUSE ? "M" : "", info->type & F_OPT_PARAM ? "P" : "", info->type & F_OPT_OPTPARAM ? "O" : "" ); DumpText(ctrl.df,0,0,info->param,1,", \\\n"); DumpText(ctrl.df,0,0,info->help,1," )\n\n"); } } else if ( info->type & T_DEF_CMD ) { info->index = ++ctrl.n_cmd; if ( !info->help ) { // copy 'param' and 'help' info from previous tool const info_t * search = info-1; for ( search = info; search >= info_tab; search-- ) if ( search->type & T_DEF_CMD && search->help && !strcmp(search->c_name,info->c_name) ) { info->help = search->help; if (!info->param) info->param = search->param; break; } } if ( !( info->type & F_HIDDEN ) ) { fprintf(ctrl.df,"#:def_cmd( \"%s\", \"%s\", \\\n", info->c_name, info->namelist ); DumpText(ctrl.df,0,0,info->param,1,", \\\n"); DumpText(ctrl.df,0,0,info->help,1," )\n\n"); } } else if ( info->type & T_GRP_BEG ) info->index = ctrl.n_grp++; // NULL based else if ( info->type & (T_CMD_OPT|T_CMD_BEG|T_COPY_GRP|T_COPY_CMD) ) { const int type = info->type & T_CMD_OPT ? T_DEF_OPT : info->type & T_COPY_GRP ? T_GRP_BEG : T_DEF_CMD; const info_t * search; for ( search = ctrl.info; search < info; search++ ) if ( search->type & type && !strcmp(search->c_name,info->c_name) ) { //PRINT("COPY INDEX #%x: %s\n",info->type,info->c_name); info->index = search->index; break; } } info++; } ctrl.end = info; if (ctrl.n_cmd) ctrl.n_cmd++; // one more for CMD_NONE; if (ctrl.n_opt_specific) ctrl.n_opt += ++ctrl.n_opt_specific; TRACE("N: cmd=%u, grp=%u, opt=%d/%d\n", ctrl.n_cmd, ctrl.n_grp, ctrl.n_opt_specific, ctrl.n_opt ); const enumError err = Generate(&ctrl); fclose(ctrl.cf); fclose(ctrl.hf); ResetStringField(&ctrl.gopt); ResetStringField(&ctrl.copt); ResetStringField(&ctrl.opt_done); if (err) return err; } AddTables(df); print_section(df,sep2,"END"); fclose(df); fclose(nf); CloseAll(); return ERR_OK; }
int main ( int argc, char ** argv ) { printf("***** %s *****\n",TITLE); SetupLib(argc,argv,NAME,PROG_UNKNOWN); printf("term width = %d\n",GetTermWidth(80,0)); #ifdef HAVE_FIEMAP printf("* HAVE_FIEMAP defined!\n"); #endif #ifdef FS_IOC_FIEMAP printf("* FS_IOC_FIEMAP defined!\n"); #endif #if defined(TEST) && defined(DEBUG) if (0) { id6_t * id6 = (id6_t*)iobuf; PRINT("sizeof(id6_t)=%zd, %p,%p,%p -> %zu,%zu,%zu\n", sizeof(id6_t), id6, id6+1, id6+2, (ccp)id6-iobuf, (ccp)(id6+1)-iobuf, (ccp)(id6+2)-iobuf ); } #endif if ( argc < 2 ) help_exit(); int cmd_stat; const CommandTab_t * cmd_ct = ScanCommand(&cmd_stat,argv[1],CommandTab); if (!cmd_ct) { PrintCommandError(CommandTab,argv[1],cmd_stat,0); help_exit(); } argv[1] = argv[0]; argv++; argc--; switch(cmd_ct->id) { case CMD_TEST: return test(argc,argv); break; case CMD_FILENAME: test_filename(argc,argv); break; case CMD_MATCH_PATTERN: test_match_pattern(argc,argv); break; case CMD_OPEN_DISC: test_open_disc(argc,argv); break; case CMD_HEXDUMP: test_hexdump(argc,argv); break; #ifdef HAVE_OPENSSL case CMD_SHA1: test_sha1(); break; #endif #ifndef NO_BZIP2 case CMD_BZIP2: test_bzip2(argc,argv); break; #endif #ifdef HAVE_WORK_DIR case CMD_WIIMM: test_wiimm(argc,argv); break; #endif case CMD_DEVELOP: develop(argc,argv); break; //case CMD_HELP: default: help_exit(); } CloseAll(); if (SIGINT_level) ERROR0(ERR_INTERRUPT,"Program interrupted by user."); return max_error; }