diff options
Diffstat (limited to '')
| -rw-r--r-- | project/src/wszst.c | 303 |
1 files changed, 163 insertions, 140 deletions
diff --git a/project/src/wszst.c b/project/src/wszst.c index f39bd59..7d8d475 100644 --- a/project/src/wszst.c +++ b/project/src/wszst.c @@ -44,7 +44,7 @@ #include "lib-xbmg.h" #include "lib-kcl.h" #include "lib-kmp.h" -#include "lib-lecode.h" +#include "lib-ledis.h" #include "lib-mdl.h" #include "lib-pat.h" #include "lib-breff.h" @@ -69,8 +69,6 @@ #include "wcommand.h" #endif -#include "distrib.inc" - // /////////////////////////////////////////////////////////////////////////////// /////////////// definitions /////////////// @@ -451,7 +449,7 @@ static const sizeof_info_t sizeof_info_szs_list[] = SIZEOF_INFO_ENTRY(kmp_ana_pflag_res_t) SIZEOF_INFO_ENTRY(kmp_ana_pflag_t) - SIZEOF_INFO_TITLE("LE-CODE") + SIZEOF_INFO_TITLE("LE-CODE basics") SIZEOF_INFO_ENTRY(lecode_debug_info_t) SIZEOF_INFO_ENTRY(lecode_debug_ex_t) SIZEOF_INFO_ENTRY(le_lpar_t) @@ -469,6 +467,30 @@ static const sizeof_info_t sizeof_info_szs_list[] = SIZEOF_INFO_ENTRY(le_cup_par_t) SIZEOF_INFO_ENTRY(le_course_par_t) SIZEOF_INFO_ENTRY(le_analyse_t) + SIZEOF_INFO_ENTRY(le_region_t) + SIZEOF_INFO_ENTRY(le_cup_track_t) + SIZEOF_INFO_ENTRY(le_property_t) + SIZEOF_INFO_ENTRY(le_music_t) + SIZEOF_INFO_ENTRY(le_flags_t) + + SIZEOF_INFO_TITLE("LE-CODE distribution") + SIZEOF_INFO_ENTRY(le_group_t) + SIZEOF_INFO_ENTRY(le_track_type_t) + SIZEOF_INFO_ENTRY(le_track_status_t) + SIZEOF_INFO_ENTRY(le_track_text_t) + SIZEOF_INFO_ENTRY(le_options_t) + SIZEOF_INFO_ENTRY(le_cup_ref_t) + SIZEOF_INFO_ENTRY(le_cup_t) + SIZEOF_INFO_ENTRY(le_strpar_t) + SIZEOF_INFO_ENTRY(le_track_id_t) + SIZEOF_INFO_ENTRY(le_track_t) + SIZEOF_INFO_ENTRY(le_track_arch_t) + SIZEOF_INFO_ENTRY(le_auto_setup_t) + SIZEOF_INFO_ENTRY(le_type_settings_t) + SIZEOF_INFO_ENTRY(le_settings_t) + SIZEOF_INFO_ENTRY(le_group_info_t) + SIZEOF_INFO_ENTRY(le_distrib_t) + SIZEOF_INFO_ENTRY(DistributionInfo_t) SIZEOF_INFO_TITLE("LEX") SIZEOF_INFO_ENTRY(features_szs_t) @@ -577,6 +599,8 @@ static const sizeof_info_t sizeof_info_szs_list[] = SIZEOF_INFO_ENTRY(wbz_header_t) SIZEOF_INFO_ENTRY(analyse_szs_t) SIZEOF_INFO_ENTRY(file_type_t) + SIZEOF_INFO_ENTRY(mkw_prefix_t) + SIZEOF_INFO_ENTRY(split_filename_t) SIZEOF_INFO_TERM() }; @@ -2541,6 +2565,118 @@ static enumError cmd_analyze() // /////////////////////////////////////////////////////////////////////////////// +/////////////// command split /////////////// +/////////////////////////////////////////////////////////////////////////////// + +static void print_split_val ( PrintScript_t *ps, ccp name, mem_t val ) +{ + DASSERT(ps); + DASSERT(name); + + + if ( val.ptr && val.len ) + { + char buf[1000]; + PrintEscapedString(buf,sizeof(buf),val.ptr,val.len,CHMD_UTF8,'"',0); + PrintScriptVars(ps,0,"%s=\"%s\"\n",name,buf); + } + else + PrintScriptVars(ps,0,"%s=\"\"\n",name); +} + +//----------------------------------------------------------------------------- + +static enumError cmd_split() +{ + static ccp def_path = "\1P/\1F\1?T"; + CheckOptDest("-",false); + char dest[PATH_MAX]; + enumError max_err = ERR_OK; + if (!strcmp(opt_dest,"-")) + fputc('\n',stdout); + + split_filename_t spf; + InitializeSPF(&spf); + + File_t fo; + InitializeFile(&fo); + + PrintScript_t ps; + SetupPrintScriptByOptions(&ps); + + ParamList_t *param; + for ( param = first_param; param; param = param->next ) + { + NORMALIZE_FILENAME_PARAM(param); + + if (!fo.f) + SubstDest(dest,sizeof(dest),param->arg,opt_dest,def_path, + GetExtFF(script_fform,0),false); + + if (!fo.f) + { + enumError err = CreateFile(&fo,false,dest,FM_STDIO|FM_OVERWRITE); + if (err) + { + max_err = err; + break; + } + ps.f = fo.f; + PrintScriptHeader(&ps); + } + + const u_nsec_t start_nsec = GetTimerNSec(); + AnalyseSPF(&spf,false,param->arg,0,CPM_LINK,opt_plus); + const u_nsec_t duration_nsec = GetTimerNSec() - start_nsec; + + PutScriptVars(&ps,1,0); + + print_split_val(&ps,"source",spf.source); + + print_split_val(&ps,"file_name",spf.f_name); + print_split_val(&ps,"file_d",spf.f_d); + print_split_val(&ps,"file_ext",spf.f_ext); + + print_split_val(&ps,"normed",spf.norm); + print_split_val(&ps,"plus",spf.plus); + PrintScriptVars(&ps,0,"plus_order=%d\n",spf.plus_order); + + #if SUPPORT_SPLIT_SIGN + print_split_val(&ps,"sign",spf.sign); + #endif + print_split_val(&ps,"boost",spf.boost); + + print_split_val(&ps,"game1",spf.game1); + print_split_val(&ps,"game2",spf.game2); + print_split_val(&ps,"game",spf.game); + PrintScriptVars(&ps,0,"game_order=%d\ngame_color=%d\n", + spf.game_order, spf.game_color ); + + print_split_val(&ps,"name",spf.name); + print_split_val(&ps,"extra",spf.extra); + print_split_val(&ps,"version",spf.version); + print_split_val(&ps,"authors",spf.authors); + print_split_val(&ps,"attribs",spf.attribs); + + PrintScriptVars(&ps,2,"duration_nsec=%llu\n",duration_nsec); + + if (!script_array) + { + PrintScriptFooter(&ps); + ps.f = 0; + ResetFile(&fo,0); + } + } + + PrintScriptFooter(&ps); + ResetPrintScript(&ps); + ResetFile(&fo,0); + ResetSPF(&spf); + return max_err; +} + +// +/////////////////////////////////////////////////////////////////////////////// /////////////// command is-texture /////////////// /////////////////////////////////////////////////////////////////////////////// @@ -2841,61 +2977,6 @@ enumError ScanDistribFile /////////////////////////////////////////////////////////////////////////////// -static ccp GetDistribParamByNameS ( DistributionInfo_t *dinf, ccp name, ccp def ) -{ - DASSERT(dinf); - DASSERT(name); - ParamFieldItem_t *it = FindParamField(&dinf->param,name); - if ( it && it->data ) - { - it->num = 1; - return (ccp)it->data; - } - return def; -} - -/////////////////////////////////////////////////////////////////////////////// -// for name changes - -#if 0 - -static ccp GetDistribParamByNameS2 - ( DistributionInfo_t *dinf, ccp name1, ccp name2, ccp def ) -{ - DASSERT(dinf); - DASSERT(name); - ParamFieldItem_t *it = FindParamField(&dinf->param,name1); - if (!it) - it = FindParamField(&dinf->param,name2); - if ( it && it->data ) - { - it->num = 1; - return (ccp)it->data; - } - return def; -} - -#endif - -/////////////////////////////////////////////////////////////////////////////// - -static int GetDistribParamByNameIMM - ( DistributionInfo_t *dinf, ccp name, int def, int min, int max ) -{ - DASSERT(dinf); - DASSERT(name); - ParamFieldItem_t *it = FindParamField(&dinf->param,name); - if (!it) - return def; - it->num = 1; - - char *end; - int val = str2l((ccp)it->data,&end,10); - return *end || val < min || val > max ? def : val; -} - -/////////////////////////////////////////////////////////////////////////////// - static enumError cmd_distribution() { SetPatchFileModeReadonly(); @@ -2958,21 +3039,21 @@ static enumError cmd_distribution() else if ( !result_found && !strcmp(result,arg) ) { result_found = true; - ScanSlotTranslation(&dinf.translate,&dinf.param,arg,false); + ScanSlotTranslation(&dinf.translate,&dinf.ld,arg,false); } else ScanSlotTranslation(&dinf.translate,0,arg,false); } if (!result_found) - ScanSlotTranslation(&dinf.translate,&dinf.param,result,true); + ScanSlotTranslation(&dinf.translate,&dinf.ld,result,true); AddParamDistributionInfo(&dinf,false); //--- logging - if ( logging > 0 ) + if ( logging >= 1 ) { fputs("--------------- translation ---------------\n",stdlog); @@ -3007,8 +3088,8 @@ static enumError cmd_distribution() fputs("---------------- parameter ----------------\n",stdlog); uint i; - const ParamFieldItem_t *it = dinf.param.field; - for ( i = 0; i < dinf.param.used; i++, it++ ) + const ParamFieldItem_t *it = dinf.ld.dis_param.field; + for ( i = 0; i < dinf.ld.dis_param.used; i++, it++ ) fprintf(stdlog,"%4u. %-20s = %s\n", i+1, it->key, (ccp)it->data ); @@ -3089,84 +3170,11 @@ static enumError cmd_distribution() if (!f) ERROR1(ERR_CANT_CREATE,"Can't create file: %s\n",result); - ccp uuid = GetDistribParamByNameS(&dinf,"UUID",""); - fprintf(f,text_distrib_head_cr - - ,GetDistribParamByNameS(&dinf,"COMMENT1","") - ,GetDistribParamByNameS(&dinf,"COMMENT2","") - ,GetDistribParamByNameS(&dinf,"COMMENT3","") - ,GetDistribParamByNameS(&dinf,"COMMENT4","") - ,GetDistribParamByNameS(&dinf,"COMMENT5","") - - ,GetDistribParamByNameS(&dinf,"USER-CT-WIIMM","") - ,GetDistribParamByNameS(&dinf,"USER-WIIMMFI","") - ,GetDistribParamByNameS(&dinf,"USER-CT-WIIKI","") - ,GetDistribParamByNameS(&dinf,"USER-MISC","") - ,GetDistribParamByNameS(&dinf,"MAIL","") - ,GetDistribParamByNameS(&dinf,"NOTE-FOR-WIMMM","") - - ,GetDistribParamByNameS(&dinf,"NAME","?") - ,GetDistribParamByNameS(&dinf,"VERSION","?") - ,GetDistribParamByNameS(&dinf,"AUTHORS","?") - ,GetDistribParamByNameS(&dinf,"RELEASE-DATE","") - ,GetDistribParamByNameS(&dinf,"KEYWORDS","") - ,GetDistribParamByNameS(&dinf,"PREDECESSOR","") - - ,GetDistribParamByNameS(&dinf,"WIIMMFI-REGION","") - ,GetDistribParamByNameS(&dinf,"INFO-TEXT","") - ,GetDistribParamByNameS(&dinf,"INFO-URL","") - - ,uuid - ,GetDistribParamByNameIMM(&dinf,"DISPLAY-MODE",3,0,3) - ,GetDistribParamByNameIMM(&dinf,"DATABASE-NAME",1,0,1) - ,GetDistribParamByNameIMM(&dinf,"VIEW-COMMENT",0,0,1) - ,GetDistribParamByNameIMM(&dinf,"ENABLE-NEW",0,0,1) - ,GetDistribParamByNameIMM(&dinf,"ENABLE-AGAIN",0,0,1) - ,GetDistribParamByNameIMM(&dinf,"ENABLE-FILL",0,0,1) - ,GetDistribParamByNameIMM(&dinf,"ENABLE-UPDATE",0,0,1) - ,GetDistribParamByNameIMM(&dinf,"ENABLE-BOOST",0,0,1) - - ,uuid - ,VERSION - ,REVISION_NUM - ,GetDistribParamByNameS(&dinf,"FIRST-CREATION","") - ,GetDistribParamByNameS(&dinf,"LAST-UPDATE","") - ); - - - - //--- mark some more params as 'used' - - GetDistribParamByNameS(&dinf,"WSZST-VERSION",""); - GetDistribParamByNameS(&dinf,"WSZST-REVISION",""); - - - //--- additional parameters - - ccp info = text_distrib_param_cr; - - const ParamFieldItem_t *it = dinf.param.field; - for ( i = 0; i < dinf.param.used; i++, it++ ) - if (!it->num) - { - int len = strlen(it->key); - ccp sep; - if ( len > 14 ) - sep = " "; - else if ( len > 6 ) - sep = "\t"; - else - sep = "\t\t"; - - fprintf(f,"%s@%s%s= %s\r\n", info, it->key, sep, (ccp)it->data ); - info = ""; - } + CreateDistribLD(f,&dinf.ld,true); //--- battle arenas - fputs(text_distrib_tracks_cr,f); - int slot, slot10 = -1, count = 0; for ( slot = 0; slot < MAX_DISTRIBUTION_ARENA; slot++ ) { @@ -5584,13 +5592,15 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) case GO_COMPATIBLE: err += ScanOptCompatible(optarg); break; case GO_WIDTH: err += ScanOptWidth(optarg); break; case GO_MAX_WIDTH: err += ScanOptMaxWidth(optarg); break; + case GO_NO_PAGER: opt_no_pager = true; break; case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break; case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break; case GO_LOGGING: logging++; break; + case GO_TIMING: log_timing++; break; case GO_WARN: err += ScanOptWarn(optarg); break; case GO_DE: use_de = true; break; case GO_CT_CODE: ctcode_enabled = true; break; - case GO_LE_CODE: lecode_enabled = true; break; + case GO_LE_CODE: lecode_enabled = true; break; // optional argument ignored case GO_COLORS: err += ScanOptColorize(0,optarg,0); break; case GO_NO_COLORS: opt_colorize = COLMD_OFF; break; @@ -5598,6 +5608,8 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) case GO_CONST: err += ScanOptConst(optarg); break; case GO_TOUCH: break; case GO_AUTO: break; + case GO_LOAD_PREFIX: err += ScanOptLoadPrefix(optarg); break; + case GO_PLUS: opt_plus = optarg; break; case GO_SET_FLAGS: err += ScanOptSetFlags(optarg); break; case GO_SET_SCALE: err += ScanOptSetScale(optarg); break; case GO_SET_ROT: err += ScanOptSetRot(optarg); break; @@ -5887,6 +5899,7 @@ static enumError CheckCommand ( int argc, char ** argv ) case CMD_CONFIG: err = cmd_config(); break; case CMD_INSTALL: err = cmd_install(); break; case CMD_ARGTEST: err = cmd_argtest(argc,argv); break; + case CMD_EXPAND: err = cmd_expand(argc,argv); break; case CMD_TEST: err = cmd_test(); break; case CMD_COLORS: err = Command_COLORS(brief_count?-brief_count:long_count,0,0); break; case CMD_ERROR: err = cmd_error(); break; @@ -5932,6 +5945,7 @@ static enumError CheckCommand ( int argc, char ** argv ) case CMD_MEMORY_A: set_all(1); err = cmd_memory(); break; case CMD_SHA1: err = cmd_sha1(); break; case CMD_ANALYZE: err = cmd_analyze(); break; + case CMD_SPLIT: err = cmd_split(); break; case CMD_IS_TEXTURE: err = cmd_is_texture(); break; case CMD_FEATURES: err = cmd_features(); break; case CMD_DISTRIBUTION: err = cmd_distribution(); break; @@ -5989,6 +6003,7 @@ static enumError CheckCommand ( int argc, char ** argv ) int main_wszst ( int argc, char ** argv ) { + tool_name = "wszst"; print_title_func = print_title; SetupLib(argc,argv,WSZST_SHORT,VERSION,TITLE); SetupExtendedSZS(); @@ -6307,6 +6322,12 @@ int main_wrapper ( int argc, char ** argv ) int main ( int argc, char ** argv ) { + ArgManager_t am = {0}; + SetupArgManager(&am,LOUP_AUTO,argc,argv,false); + ExpandAtArgManager(&am,AMXM_SHORT,10,false); + argc = am.argc; + argv = am.argv; + //PRINT("ERR__N=%u\n",ERR__N); if ( argc > 1 ) { @@ -6321,7 +6342,9 @@ int main ( int argc, char ** argv ) const wrapper_t *w = FindWrapper(argc,argv); DASSERT(w); - return w->func(argc,argv); + const int err = w->func(argc,argv); + ClosePager(); + return err; } // |
