aboutsummaryrefslogtreecommitdiff
path: root/project/src/wszst.c
diff options
context:
space:
mode:
authorWiimm <wiimm@wiimm.de>2023-07-22 22:40:04 +0200
committerWiimm <wiimm@wiimm.de>2023-07-22 22:40:04 +0200
commit7a4ee26983b941ce0a8f72bcc02bf5566e9a7886 (patch)
tree202755942a4d5b67bedcd9f3c21eb2ababf8dd79 /project/src/wszst.c
parentb5b1fe7fc0cf460d6204c18ba7bb4c40f7597efa (diff)
SZS v2.36a
Diffstat (limited to '')
-rw-r--r--project/src/wszst.c563
1 files changed, 311 insertions, 252 deletions
diff --git a/project/src/wszst.c b/project/src/wszst.c
index db45867..c329bc4 100644
--- a/project/src/wszst.c
+++ b/project/src/wszst.c
@@ -507,6 +507,7 @@ static const sizeof_info_t sizeof_info_szs_list[] =
SIZEOF_INFO_ENTRY(have_lex_info_t)
SIZEOF_INFO_ENTRY(lex_header_t)
SIZEOF_INFO_ENTRY(lex_element_t)
+ SIZEOF_INFO_ENTRY(lex_dev1_t)
SIZEOF_INFO_ENTRY(lex_set1_t)
SIZEOF_INFO_ENTRY(lex_hipt_rule_t)
SIZEOF_INFO_ENTRY(lex_ritp_rule_t)
@@ -673,6 +674,8 @@ static enumError cmd_test_options()
if (speed_mod_active)
printf(" kmp speed modifier: %04x ~ %5.3f\n",
speed_mod_val, speed_mod_factor );
+ if (opt_n_laps)
+ printf(" kmp:stgi laps:%15x = %12d\n",opt_n_laps,opt_n_laps);
printf(" mdl modes: %16x = \"%s\"\n",MDL_MODE,GetMdlMode());
printf(" pat modes: %16x = \"%s\"\n",PAT_MODE,GetPatMode());
@@ -808,7 +811,7 @@ enumError cmd_ui_check()
SetupPager();
StringField_t plist = {0};
- CollectExpandParam(&plist,first_param,-1,0);
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
const bool have_dump = long_count >= 1;
const bool have_header = !have_dump && !brief_count && print_header;
@@ -824,8 +827,8 @@ enumError cmd_ui_check()
if ( fw_file < fw )
fw_file = fw;
}
- sep_len = ( fw_file + 21 ) * 3;
- printf("\n%s Type Korean File\n%s%.*s%s\n",
+ sep_len = ( fw_file + 23 ) * 3;
+ printf("\n%s Type L Korean File\n%s%.*s%s\n",
colset->heading, colset->heading, sep_len, ThinLine300_3, colset->reset );
}
@@ -859,7 +862,7 @@ enumError cmd_ui_check()
putchar( uc.possible & mask ? ui_type_char[t] : '-');
}
- printf(" %c %6lluµs %s\n",ui_type_char[uc.type],dur,arg);
+ printf(" %c%c %6lluµs %s\n",ui_type_char[uc.ui_type],uc.ui_lang,dur,arg);
}
else
{
@@ -867,9 +870,9 @@ enumError cmd_ui_check()
UiCheck(&uc,&szs);
ccp col = GetUiTypeColor(colout,uc.type);
- printf("%s %-10s %-6s %s%s\n",
+ printf("%s %-10s %c %-6s %s%s\n",
col,
- ui_type_name[uc.type],
+ ui_type_name[uc.ui_type], uc.ui_lang,
uc.is_korean > OFFON_AUTO ? "Korean" : "-",
arg, *col ? colout->reset : "" );
}
@@ -1126,13 +1129,15 @@ static enumError cmd_autoadd()
//--- iterate parameters
enumError max_err = ERR_OK;
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
- if (!ExistDirectory(param->arg,0))
+ ccp arg = plist.field[argi];
+ if (!ExistDirectory(arg,0))
{
- enumError err = exec_autoadd(&used,param->arg);
+ enumError err = exec_autoadd(&used,arg);
if ( max_err < err )
max_err = err;
}
@@ -1141,11 +1146,13 @@ static enumError cmd_autoadd()
const DbFileSZS_t *db;
for ( db = DbFileSZS; db->szs_name; db++ )
if ( (db->type & (FLT_OLD|FLT_STD)) == FLT_STD )
- find_autoadd( &used, param->arg, db->szs_name,
+ find_autoadd( &used, arg, db->szs_name,
db->idx < 0 ? 0 : db->id+1 );
}
}
+ ResetStringField(&plist);
+
//--- print missing list
@@ -1378,14 +1385,17 @@ static enumError cmd_code()
if (!n_param)
AddParam("-");
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
+
if (verbose)
- fprintf(stderr,"CODE %s\n",param->arg);
+ fprintf(stderr,"CODE %s\n",arg);
File_t F;
- if (!OpenFILE(&F,true,param->arg,false,true))
+ if (!OpenFILE(&F,true,arg,false,true))
{
while ( !feof(F.f) && !ferror(F.f) )
{
@@ -1398,6 +1408,8 @@ static enumError cmd_code()
}
ResetFile(&F,false);
}
+
+ ResetStringField(&plist);
return ERR_OK;
}
@@ -1743,15 +1755,17 @@ enumError cmd_brsub()
szs_file_t szs;
InitializeSZS(&szs);
uint line_count = 0;
-
enumError max_err = ERR_OK;
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
ResetSZS(&szs);
- enumError err = LoadCreateSZS(&szs,param->arg,true,opt_ignore>0,true);
+ enumError err = LoadCreateSZS(&szs,arg,true,opt_ignore>0,true);
if ( err == ERR_NOT_EXISTS || err > ERR_WARNING && opt_ignore )
continue;
@@ -1765,7 +1779,7 @@ enumError cmd_brsub()
cb.szs = &szs;
cb.mode = long_count;
cb.sep_fw = 3*99;
- IterateFilesParSZS(&szs,check_brsub,&cb,false,false,-1,-1,SORT_NONE);
+ IterateFilesParSZS(&szs,check_brsub,&cb,false,false,false,-1,-1,SORT_NONE);
line_count += cb.line_count;
if ( print_header && cb.header_printed )
@@ -1778,6 +1792,8 @@ enumError cmd_brsub()
if (line_count)
putchar('\n');
+
+ ResetStringField(&plist);
ResetSZS(&szs);
return max_err;
}
@@ -1867,7 +1883,7 @@ static enumError cmd_list ( int long_level )
}
StringField_t plist = {0};
- CollectExpandParam(&plist,first_param,-1,0);
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
for ( int argi = 0; argi < plist.used; argi++ )
{
@@ -1924,9 +1940,9 @@ static enumError cmd_list ( int long_level )
}
if ( long_count > 2 )
- IterateFilesParSZS(&szs,PrintFileSZS,0,false,true,opt_recurse,opt_cut,opt_sort);
+ IterateFilesParSZS(&szs,PrintFileSZS,0,false,true,false,opt_recurse,opt_cut,opt_sort);
else
- IterateFilesParSZS(&szs,list_func,0,false,false,opt_recurse,opt_cut,opt_sort);
+ IterateFilesParSZS(&szs,list_func,0,false,false,false,opt_recurse,opt_cut,opt_sort);
if (print_header)
{
@@ -1938,6 +1954,7 @@ static enumError cmd_list ( int long_level )
ResetSZS(&szs);
}
+ ResetStringField(&plist);
return ERR_OK;
}
@@ -1955,11 +1972,13 @@ static enumError cmd_name_ref()
InitializeRawData(&raw);
enumError cmd_err = ERR_OK;
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
- enumError err = LoadRawData(&raw,false,param->arg,
+ ccp arg = plist.field[argi];
+ enumError err = LoadRawData(&raw,false,arg,
"course_model.brres",opt_ignore>0,0);
if ( err == ERR_NOT_EXISTS || err > ERR_WARNING && opt_ignore )
continue;
@@ -1998,6 +2017,7 @@ static enumError cmd_name_ref()
ResetNameRef(&nr);
}
+ ResetStringField(&plist);
ResetRawData(&raw);
return cmd_err;
}
@@ -2045,14 +2065,16 @@ static enumError cmd_ilist ( int long_level )
long_count += long_level;
}
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
szs_file_t szs;
InitializeSZS(&szs);
- enumError err = LoadCreateSZS(&szs,param->arg,true,opt_ignore>0,true);
+ enumError err = LoadCreateSZS(&szs,arg,true,opt_ignore>0,true);
if ( err == ERR_NOT_EXISTS || err > ERR_WARNING && opt_ignore )
continue;
if ( err > ERR_WARNING )
@@ -2064,15 +2086,16 @@ static enumError cmd_ilist ( int long_level )
if (print_header)
PrintImageHead(0,long_count);
else if ( n_param > 1 )
- printf("\n* Files of %s\n",param->arg);
+ printf("\n* Files of %s\n",arg);
- IterateFilesParSZS(&szs,ilist_func,0,false,false,-1,0,opt_sort);
+ IterateFilesParSZS(&szs,ilist_func,0,false,false,false,-1,0,opt_sort);
ResetSZS(&szs);
}
if (print_header)
putchar('\n');
+ ResetStringField(&plist);
return ERR_OK;
}
@@ -2198,14 +2221,16 @@ static enumError cmd_memory()
if ( opt_recurse < 0 )
opt_recurse = 0;
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
szs_file_t szs;
InitializeSZS(&szs);
- enumError err = LoadCreateSZS(&szs,param->arg,true,opt_ignore>0,true);
+ enumError err = LoadCreateSZS(&szs,arg,true,opt_ignore>0,true);
if ( err == ERR_NOT_EXISTS || err > ERR_WARNING && opt_ignore )
continue;
if ( err > ERR_WARNING )
@@ -2223,7 +2248,7 @@ static enumError cmd_memory()
if (print_header)
{
printf("\n* memory dump of %s:%s\n",
- GetNameFF_SZS(&szs), param->arg );
+ GetNameFF_SZS(&szs), arg );
fputs( dm.print_abs_off ? "\nabs off " : "\n", stdout);
printf( "type unused begin .. end size file name\n"
@@ -2231,13 +2256,14 @@ static enumError cmd_memory()
Minus300 );
}
- IterateFilesParSZS(&szs,memory_func,&dm,false,false,opt_recurse,opt_cut,SORT_OFFSET);
+ IterateFilesParSZS(&szs,memory_func,&dm,false,false,false,opt_recurse,opt_cut,SORT_OFFSET);
ResetSZS(&szs);
}
if (print_header)
putchar('\n');
+ ResetStringField(&plist);
return ERR_OK;
}
@@ -2250,14 +2276,16 @@ static enumError cmd_dump()
{
SetPatchFileModeReadonly();
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
szs_file_t szs;
InitializeSZS(&szs);
- enumError err = LoadCreateSZS(&szs,param->arg,true,opt_ignore>0,true);
+ enumError err = LoadCreateSZS(&szs,arg,true,opt_ignore>0,true);
if ( err == ERR_NOT_EXISTS || err > ERR_WARNING && opt_ignore )
continue;
if ( err > ERR_WARNING )
@@ -2269,15 +2297,17 @@ static enumError cmd_dump()
if ( szs.fform_arch == FF_BRRES || IsBRSUB(szs.fform_arch) )
{
printf("\n* Dump structure of %s:%s\n",
- GetNameFF_SZS(&szs), param->arg );
+ GetNameFF_SZS(&szs), arg );
DumpStructureBRRES(stdout,&szs);
}
else if (!opt_ignore)
- ERROR0(ERR_WARNING,"No BRRES file -> ignored: %s\n",param->arg);
+ ERROR0(ERR_WARNING,"No BRRES file -> ignored: %s\n",arg);
ResetSZS(&szs);
}
putchar('\n');
+
+ ResetStringField(&plist);
return ERR_OK;
}
@@ -2293,14 +2323,16 @@ static enumError cmd_sha1()
SetPatchFileModeReadonly();
SetupCoding64( opt_coding64, opt_db64 ? ENCODE_BASE64URL : ENCODE_BASE64 );
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
szs_file_t szs;
InitializeSZS(&szs);
- enumError err = LoadCreateSZS(&szs,param->arg,true,opt_ignore>0,true);
+ enumError err = LoadCreateSZS(&szs,arg,true,opt_ignore>0,true);
if ( max_err < err )
max_err = err;
if ( err > ERR_WARNING || err == ERR_NOT_EXISTS )
@@ -2314,7 +2346,7 @@ static enumError cmd_sha1()
if (brief_count)
putchar('\n');
else
- printf(" %s\n",param->arg);
+ printf(" %s\n",arg);
}
if ( err == ERR_NOT_EXISTS || opt_ignore )
@@ -2331,8 +2363,8 @@ static enumError cmd_sha1()
if (opt_verify)
{
const uint clen = strlen(checksum);
- ccp fname = strrchr(param->arg,'/');
- fname = fname ? fname+1 : param->arg;
+ ccp fname = strrchr(arg,'/');
+ fname = fname ? fname+1 : arg;
bool found = false;
for(;;)
{
@@ -2340,7 +2372,7 @@ static enumError cmd_sha1()
if (!pos)
break;
- if ( pos == param->arg || pos[-1] == '.' || pos[-1] == '-' )
+ if ( pos == arg || pos[-1] == '.' || pos[-1] == '-' )
{
char ch = pos[clen];
if ( !ch || ch == '.' || ch == '-' )
@@ -2358,10 +2390,10 @@ static enumError cmd_sha1()
if ( max_err < ERR_DIFFER )
max_err = ERR_DIFFER;
if ( verbose >= 0 )
- printf("Checksum differ: %s\n",param->arg);
+ printf("Checksum differ: %s\n",arg);
}
else if ( verbose > 0 )
- printf("Checksum ok: %s\n",param->arg);
+ printf("Checksum ok: %s\n",arg);
}
else
{
@@ -2425,11 +2457,12 @@ static enumError cmd_sha1()
if (brief_count)
putchar('\n');
else
- printf(" %s\n", param->arg );
+ printf(" %s\n", arg );
}
ResetSZS(&szs);
}
+ ResetStringField(&plist);
return max_err;
}
@@ -2457,13 +2490,15 @@ static enumError cmd_analyze()
patch_action_log_disabled++;
CheckTextureRefSZS(&ap.szs,0);
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
ResetSZS(&ap.szs);
- enumError err = LoadCreateSZS(&ap.szs,param->arg,true,opt_ignore>0,true);
+ enumError err = LoadCreateSZS(&ap.szs,arg,true,opt_ignore>0,true);
if ( err == ERR_NOT_EXISTS || err > ERR_WARNING && opt_ignore )
continue;
if ( err > ERR_WARNING )
@@ -2474,7 +2509,7 @@ static enumError cmd_analyze()
}
if (!ap.fo.f)
- SubstDest(dest,sizeof(dest),param->arg,opt_dest,def_path,
+ SubstDest(dest,sizeof(dest),arg,opt_dest,def_path,
GetExtFF(script_fform,0),false);
if ( verbose > 0 )
@@ -2505,7 +2540,7 @@ static enumError cmd_analyze()
PrintScriptHeader(&ap.ps);
}
- ap.fname = param->arg;
+ ap.fname = arg;
//--- analyze by file format
@@ -2531,6 +2566,8 @@ static enumError cmd_analyze()
}
PrintScriptFooter(&ap.ps);
+
+ ResetStringField(&plist);
ResetPrintScript(&ap.ps);
ResetFile(&ap.fo,0);
ResetSZS(&ap.szs);
@@ -2580,13 +2617,15 @@ static enumError cmd_split()
PrintScript_t ps;
SetupPrintScriptByOptions(&ps);
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
if (!fo.f)
- SubstDest(dest,sizeof(dest),param->arg,opt_dest,def_path,
+ SubstDest(dest,sizeof(dest),arg,opt_dest,def_path,
GetExtFF(script_fform,0),false);
if (!fo.f)
@@ -2602,7 +2641,7 @@ static enumError cmd_split()
}
const u_nsec_t start_nsec = GetTimerNSec();
- AnalyseSPF(&spf,false,param->arg,0,CPM_LINK,opt_plus);
+ AnalyseSPF(&spf,false,arg,0,CPM_LINK,opt_plus);
const u_nsec_t duration_nsec = GetTimerNSec() - start_nsec;
if ( opt_split > 0 )
@@ -2612,7 +2651,7 @@ static enumError cmd_split()
FreeExMem(&res);
continue;
}
-
+
PutScriptVars(&ps,1,0);
print_split_val(&ps,"directory",spf.directory);
@@ -2640,7 +2679,7 @@ static enumError cmd_split()
print_split_val(&ps,"editors",spf.editors);
print_split_val(&ps,"attribs",spf.attribs);
PrintScriptVars(&ps,0,"attrib_order=%d\n",spf.attrib_order);
-
+
PrintScriptVars(&ps,0,"distrib_flags=\"%u %s\"\n",spf.distrib_flags,PrintDTA(spf.distrib_flags,false));
PrintScriptVars(&ps,0,"le_flags=\"%u %s\"\n",spf.le_flags,PrintLEFL8(spf.le_flags,false));
print_split_val(&ps,"le_group",spf.le_group);
@@ -2676,6 +2715,8 @@ static enumError cmd_split()
}
PrintScriptFooter(&ps);
+
+ ResetStringField(&plist);
ResetPrintScript(&ps);
ResetFile(&fo,0);
ResetPSP(&psp);
@@ -2702,12 +2743,15 @@ static enumError cmd_is_texture()
if (long_count)
InitializeFastBuf(&fbuf,sizeof(fbuf));
- for ( ParamList_t *param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
ResetSZS(&szs);
- enumError err = LoadCreateSZS(&szs,param->arg,true,opt_ignore>0,true);
+ enumError err = LoadCreateSZS(&szs,arg,true,opt_ignore>0,true);
if ( err > ERR_WARNING )
{
if (long_count)
@@ -2740,14 +2784,15 @@ static enumError cmd_is_texture()
if (long_count)
{
ccp par = fbuf.b.buf;
- for ( ParamList_t *param = first_param; param; param = param->next )
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- printf("%-*s : %s\n",max_fw,par,param->arg);
+ printf("%-*s : %s\n",max_fw,par,plist.field[argi]);
par += strlen(par) + 1;
}
ResetFastBuf(&fbuf.b);
}
+ ResetStringField(&plist);
return max_err;
}
@@ -2787,13 +2832,15 @@ static enumError cmd_features()
if ( ps.fform == PSFF_UNKNOWN && comments >= 0 )
ps.fform = PSFF_ASSIGN;
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
ResetSZS(&szs);
- enumError err = LoadCreateSZS(&szs,param->arg,true,opt_ignore>0,true);
+ enumError err = LoadCreateSZS(&szs,arg,true,opt_ignore>0,true);
if ( err == ERR_NOT_EXISTS || err > ERR_WARNING && opt_ignore )
continue;
if ( err > ERR_WARNING )
@@ -2804,7 +2851,7 @@ static enumError cmd_features()
}
if (!fo.f)
- SubstDest(dest,sizeof(dest),param->arg,opt_dest,def_path,
+ SubstDest(dest,sizeof(dest),arg,opt_dest,def_path,
GetExtFF(script_fform,0),false);
if ( verbose > 0 )
@@ -2819,7 +2866,7 @@ static enumError cmd_features()
//--- analyse szs
- AnalyzeSZS(&as,false,&szs,param->arg);
+ AnalyzeSZS(&as,false,&szs,arg);
SetupFeaturesSZS(&fs,&as.have,false);
@@ -2847,7 +2894,7 @@ static enumError cmd_features()
//--- name attributes ('dest' can be used now)
- PrintEscapedString(dest,sizeof(dest),param->arg,-1,CHMD_UTF8,'"',0);
+ PrintEscapedString(dest,sizeof(dest),arg,-1,CHMD_UTF8,'"',0);
//--- print result
@@ -2866,6 +2913,8 @@ static enumError cmd_features()
}
PrintScriptFooter(&ps);
+
+ ResetStringField(&plist);
ResetPrintScript(&ps);
ResetFile(&fo,0);
ResetFeaturesSZS(&fs);
@@ -3113,12 +3162,15 @@ static enumError cmd_distribution()
if ( verbose == 0 )
printf("Scan SZS files\n");
- for ( ; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
bool assume_arena = false;
- ccp ptr = param->arg;
+ ccp ptr = arg;
for(;;)
{
ptr = strchr(ptr,'/');
@@ -3128,14 +3180,14 @@ static enumError cmd_distribution()
if (!strncasecmp(ptr,"arena",5))
{
assume_arena = true;
- PRINT("ASSUME ARENA: %s\n",param->arg);
+ PRINT("ASSUME ARENA: %s\n",arg);
break;
}
}
- if (IsDirectory(param->arg,false))
+ if (IsDirectory(arg,false))
{
- DIR * dir = opendir(param->arg);
+ DIR * dir = opendir(arg);
if (dir)
{
for(;;)
@@ -3146,7 +3198,7 @@ static enumError cmd_distribution()
if ( *dent->d_name != '.' )
{
- PathCatPP(path,sizeof(path),param->arg,dent->d_name);
+ PathCatPP(path,sizeof(path),arg,dent->d_name);
#if HAVE_WIIMM_EXT // [[2do]] by option
if ( !strstr(path,",clan]") && !strstr(path,",head=") )
#endif
@@ -3162,7 +3214,7 @@ static enumError cmd_distribution()
}
else
{
- enumError err = ScanDistribFile(&dinf,param->arg,opt_ignore,assume_arena);
+ enumError err = ScanDistribFile(&dinf,arg,opt_ignore,assume_arena);
if (err)
return err;
}
@@ -3248,6 +3300,7 @@ static enumError cmd_distribution()
fputs("\r\n",f);
fclose(f);
+ ResetStringField(&plist);
ResetDistributionInfo(&dinf);
return ERR_OK;
}
@@ -3337,14 +3390,16 @@ static enumError cmd_check()
SetKclMode(KCL_MODE|KCLMD_DROP_UNUSED);
enumError max_err = ERR_OK;
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
szs_file_t szs;
InitializeSZS(&szs);
- enumError err = LoadCreateSZS(&szs,param->arg,true,opt_ignore>0,true);
+ enumError err = LoadCreateSZS(&szs,arg,true,opt_ignore>0,true);
const bool check_verbose = verbose > 0 || long_count > 0;
CheckMode_t mode = GetCheckMode(false,brief_count>0,verbose<0,check_verbose);
@@ -3396,7 +3451,7 @@ static enumError cmd_check()
default:
ERROR0(ERR_INVALID_FFORM,
"CHECK doesn't support file format '%s': %s\n",
- GetNameFF_SZS(&szs), param->arg );
+ GetNameFF_SZS(&szs), arg );
break;
}
fflush(stdout);
@@ -3407,6 +3462,7 @@ static enumError cmd_check()
ResetSZS(&szs);
}
+ ResetStringField(&plist);
return max_err;
}
@@ -3430,14 +3486,16 @@ static enumError cmd_slots()
ccp col_reset = GetTextMode(colmode,TTM_RESET);
enumError max_err = ERR_OK;
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
szs_file_t szs;
InitializeSZS(&szs);
- enumError err = LoadCreateSZS(&szs,param->arg,true,opt_ignore>0,true);
+ enumError err = LoadCreateSZS(&szs,arg,true,opt_ignore>0,true);
if (err)
{
if ( max_err < err )
@@ -3457,9 +3515,9 @@ static enumError cmd_slots()
if ( szs.is_arena >= ARENA_FOUND )
{
if (brief_count)
- printf("%sARENA%s : %s\n",col_misc,col_reset,param->arg);
+ printf("%sARENA%s : %s\n",col_misc,col_reset,arg);
else
- printf(" %s ARENA %s : %s\n",col_misc,col_reset,param->arg);
+ printf(" %s ARENA %s : %s\n",col_misc,col_reset,arg);
}
else
{
@@ -3502,11 +3560,12 @@ static enumError cmd_slots()
while ( count++ < 3 )
fputs(" ",stdout);
}
- printf("%s : %s\n",col_reset,param->arg);
+ printf("%s : %s\n",col_reset,arg);
}
ResetSZS(&szs);
}
+ ResetStringField(&plist);
return max_err;
}
@@ -3515,7 +3574,7 @@ static enumError cmd_slots()
/////////////// command isarena ///////////////
///////////////////////////////////////////////////////////////////////////////
-static enumError cmd_isarena()
+static enumError cmd_is_arena()
{
SetPatchFileModeReadonly();
@@ -3529,14 +3588,17 @@ static enumError cmd_isarena()
int count = 0;
enumError max_err = ERR_OK;
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
szs_file_t szs;
InitializeSZS(&szs);
- enumError err = LoadCreateSZS(&szs,param->arg,true,opt_ignore>0,true);
+ enumError err = LoadCreateSZS(&szs,arg,true,opt_ignore>0,true);
ccp status = 0, color = 0;
@@ -3623,7 +3685,7 @@ static enumError cmd_isarena()
if (brief_count)
printf("%s%s%s\n", color, status, colout->reset );
else
- printf("%s%-9s%s %s\n", color, status, colout->reset, param->arg );
+ printf("%s%-9s%s %s\n", color, status, colout->reset, arg );
}
}
@@ -3635,6 +3697,7 @@ static enumError cmd_isarena()
if (print_header)
putchar('\n');
+ ResetStringField(&plist);
return count ? max_err : ERR_NOTHING_TO_DO;
}
@@ -3712,50 +3775,10 @@ struct cmd_patch_search_t
static enumError patch_file_helper
(
- ccp fname, // file name of source
- bool use_wildcard // true & file not exist: search files
-);
-
-//-----------------------------------------------------------------------------
-
-static enumError patch_file_search
-(
- mem_t path, // full path of existing file, never NULL
- uint st_mode, // copy of struct stat.st_mode, see "man 2 stat"
- void *param // user defined parameter
+ ccp fname // file name of source
)
{
- enumError err = S_ISREG(st_mode) ? patch_file_helper(path.ptr,false) : ERR_JOB_IGNORED;
-
- struct cmd_patch_search_t *s = (struct cmd_patch_search_t*)param;
- ASSERT(s);
-
- s->count++;
- if ( s->max_err < err )
- s->max_err = err;
- return err;
-}
-
-//-----------------------------------------------------------------------------
-
-static enumError patch_file_helper
-(
- ccp fname, // file name of source
- bool use_wildcard // true & file not exist: search files
-)
-{
- struct stat st;
- if ( use_wildcard && HaveWildcards(MemByString(fname)) && stat(fname,&st) )
- {
- PRINT0(" > SEARCH %s\n",fname);
- struct cmd_patch_search_t param = {0};
- SearchPaths(fname,0,false,patch_file_search,&param);
- return param.count
- ? param.max_err
- : opt_ignore > 0
- ? ERR_NOTHING_TO_DO
- : ERROR0(ERR_CANT_OPEN,"File not found: %s\n",fname);
- }
+ PRINT0("patch_file_helper(%s)\n",fname);
exmem_t orig = {0}, data = {0};
@@ -3845,7 +3868,7 @@ static enumError patch_file_helper
if ( !dirty && ( !src_dest_diff || opt_no_copy ) )
goto abort;
-
+
//--- compression and SZS cache
@@ -3929,17 +3952,18 @@ static enumError cmd_patch()
#endif
enumError max_err = ERR_OK;
- for ( ParamList_t *param = first_param; param; param = param->next )
- {
- if (!param->arg)
- continue;
- NORMALIZE_FILENAME_PARAM(param);
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
- const enumError err = patch_file_helper(param->arg,true);
+ for ( int argi = 0; argi < plist.used; argi++ )
+ {
+ ccp arg = plist.field[argi];
+ const enumError err = patch_file_helper(arg);
if ( max_err < err )
max_err = err;
}
+ ResetStringField(&plist);
return max_err;
}
@@ -4234,20 +4258,22 @@ static void center_mmap ( uint idx, float3 *a, float3 *b )
static enumError cmd_minimap()
{
enumError max_err = ERR_OK;
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
szs_file_t szs;
InitializeSZS(&szs);
- enumError err = LoadSZS(&szs,param->arg,false,opt_ignore>0,false);
+ enumError err = LoadSZS(&szs,arg,false,opt_ignore>0,false);
if ( err <= ERR_WARNING && err != ERR_NOT_EXISTS )
{
if ( verbose >= 0 )
fprintf(stdlog,"\nMinimap data of %s:%s\n",
- GetNameFF_SZS(&szs), param->arg );
+ GetNameFF_SZS(&szs), arg );
const bool was_compressed = szs.cdata != 0;
if (was_compressed)
@@ -4411,7 +4437,7 @@ static enumError cmd_minimap()
{
fprintf(stdlog,"%sPATCH MINIMAP %s:%s\n",
testmode ? "WOULD " : "",
- GetNameFF_SZS(&szs), param->arg );
+ GetNameFF_SZS(&szs), arg );
fflush(stdlog);
}
@@ -4426,6 +4452,7 @@ static enumError cmd_minimap()
ResetSZS(&szs);
}
+ ResetStringField(&plist);
return max_err;
}
@@ -4440,14 +4467,16 @@ static enumError cmd_compress()
CheckOptDest(dest_fname,false);
enumError max_err = ERR_OK;
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
szs_file_t szs;
InitializeSZS(&szs);
- enumError err = LoadSZS(&szs,param->arg,true,opt_ignore>0,false);
+ enumError err = LoadSZS(&szs,arg,true,opt_ignore>0,false);
if ( err <= ERR_WARNING && err != ERR_NOT_EXISTS )
{
@@ -4463,14 +4492,14 @@ static enumError cmd_compress()
GetNameFF(0,ff_dest) );
char dest[PATH_MAX];
- SubstDest(dest,sizeof(dest),param->arg,opt_dest,dest_fname,
+ SubstDest(dest,sizeof(dest),arg,opt_dest,dest_fname,
GetExtFF(fform_compr,ff_dest),false);
if ( verbose >= 0 || testmode )
{
fprintf(stdlog,"%s%sCOMPRESS %s:%s -> %s:%s\n",
verbose > 0 ? "\n" : "",
testmode ? "WOULD " : "",
- GetNameFF_SZS(&szs), param->arg,
+ GetNameFF_SZS(&szs), arg,
GetNameFF(fform_compr,ff_dest), dest );
fflush(stdlog);
}
@@ -4494,7 +4523,7 @@ static enumError cmd_compress()
max_err = ERR_CACHE_USED;
File_t F;
- err = CreateFileOpt(&F,true,dest,testmode,param->arg);
+ err = CreateFileOpt(&F,true,dest,testmode,arg);
if (F.f)
{
SetFileAttrib(&F.fatt,&szs.fatt,0);
@@ -4508,7 +4537,7 @@ static enumError cmd_compress()
LinkCacheRAW(szs.cache_fname,dest,szs.cdata,szs.csize);
if ( !err && opt_remove_src )
- RemoveSource(param->arg,dest,verbose>=0,testmode);
+ RemoveSource(arg,dest,verbose>=0,testmode);
}
}
}
@@ -4518,6 +4547,7 @@ static enumError cmd_compress()
ResetSZS(&szs);
}
+ ResetStringField(&plist);
return max_err;
}
@@ -4532,14 +4562,16 @@ static enumError cmd_decompress()
CheckOptDest(dest_fname,false);
enumError max_err = ERR_OK;
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
szs_file_t szs;
InitializeSZS(&szs);
- enumError err = LoadSZS(&szs,param->arg,true,opt_ignore>0,false);
+ enumError err = LoadSZS(&szs,arg,true,opt_ignore>0,false);
if ( err <= ERR_WARNING && err != ERR_NOT_EXISTS )
{
@@ -4556,14 +4588,14 @@ static enumError cmd_decompress()
char dest[PATH_MAX];
ccp ext = GetExtFF(ff_dest,0);
- SubstDest(dest,sizeof(dest),param->arg,opt_dest,ext,ext,false);
+ SubstDest(dest,sizeof(dest),arg,opt_dest,ext,ext,false);
if ( verbose >= 0 || testmode )
{
fprintf(stdlog,"%s%sDECOMPRESS %s:%s -> %s:%s\n",
verbose > 0 ? "\n" : "",
testmode ? "WOULD " : "",
- GetNameFF_SZS(&szs), param->arg,
+ GetNameFF_SZS(&szs), arg,
GetNameFF(0,ff_dest), dest );
fflush(stdlog);
}
@@ -4580,7 +4612,7 @@ static enumError cmd_decompress()
if ( err <= ERR_WARNING && err != ERR_NOT_EXISTS )
{
File_t F;
- err = CreateFileOpt(&F,true,dest,testmode,param->arg);
+ err = CreateFileOpt(&F,true,dest,testmode,arg);
if (F.f)
{
SetFileAttrib(&F.fatt,&szs.fatt,0);
@@ -4592,7 +4624,7 @@ static enumError cmd_decompress()
}
ResetFile(&F,opt_preserve);
if ( !err && opt_remove_src )
- RemoveSource(param->arg,dest,verbose>=0,testmode);
+ RemoveSource(arg,dest,verbose>=0,testmode);
}
}
}
@@ -4602,6 +4634,7 @@ static enumError cmd_decompress()
ResetSZS(&szs);
}
+ ResetStringField(&plist);
return max_err;
}
@@ -4615,30 +4648,32 @@ static enumError cmd_create ( bool create )
static const char dest_fname[] = "\1P/\1N\1?T";
CheckOptDest(dest_fname,false);
const bool save_auto_add = opt_auto_add;
-
enumError max_err = ERR_OK;
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
opt_auto_add = save_auto_add; // restore auto-add settings
- int src_len = strlen(param->arg);
- while ( src_len > 0 && param->arg[src_len-1] == '/' )
+ ccp arg = plist.field[argi];
+ int src_len = strlen(arg);
+ while ( src_len > 0 && arg[src_len-1] == '/' )
src_len--;
- param->arg[src_len] = 0;
+ ((char*)arg)[src_len] = 0;
SetupParam_t sp;
InitializeSetupParam(&sp);
- ScanSetupParam(&sp,true,param->arg,SZS_SETUP_FILE,0,true);
+ ScanSetupParam(&sp,true,arg,SZS_SETUP_FILE,0,true);
char dest[PATH_MAX];
- SubstDest(dest,sizeof(dest),param->arg,opt_dest,dest_fname,
+ SubstDest(dest,sizeof(dest),arg,opt_dest,dest_fname,
GetExtFF(sp.fform_file,sp.fform_arch),false);
szs_file_t szs;
InitializeSZS(&szs);
- enumError err = CreateSZS(&szs,dest,param->arg,0,&sp,0,
+ enumError err = CreateSZS(&szs,dest,arg,0,&sp,0,
verbose > 0 ? UINT_MAX : 0, false );
//--- create file
@@ -4649,14 +4684,14 @@ static enumError cmd_create ( bool create )
fprintf(stdlog,"%s%sCREATE %s/ -> %s:%s\n",
verbose > 0 ? "\n" : "",
testmode ? "WOULD " : "",
- param->arg,
+ arg,
GetNameFF_SZS(&szs),
dest );
else
fprintf(stdlog,"%s%sENCODE %s/\n",
verbose > 0 ? "\n" : "",
testmode ? "WOULD " : "",
- param->arg );
+ arg );
fflush(stdlog);
}
@@ -4684,8 +4719,9 @@ static enumError cmd_create ( bool create )
ResetSZS(&szs);
ResetSetupParam(&sp);
}
- opt_auto_add = save_auto_add; // restore auto-add settings
+ ResetStringField(&plist);
+ opt_auto_add = save_auto_add; // restore auto-add settings
return max_err;
}
@@ -4701,8 +4737,8 @@ typedef struct update_param_t
bool encode; // true: encode files if possible
int recurse_level; // current recurse level
int indent; // indention of log messages
-
-} update_param_t;
+}
+update_param_t;
//-----------------------------------------------------------------------------
@@ -4853,7 +4889,7 @@ static enumError job_update
up.update_sub = recurse_level < opt_recurse;
up.indent = indent + 2;
- IterateFilesParSZS(szs,update_func,&up,false,false,0,-1,SORT_NONE);
+ IterateFilesParSZS(szs,update_func,&up,false,false,false,0,-1,SORT_NONE);
return ERR_OK;
}
@@ -4868,14 +4904,16 @@ static enumError cmd_update()
opt_mkdir = true;
enumError max_err = ERR_OK;
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
szs_file_t szs;
InitializeSZS(&szs);
- enumError err = LoadCreateSZS(&szs,param->arg,true,opt_ignore>0,false);
+ enumError err = LoadCreateSZS(&szs,arg,true,opt_ignore>0,false);
if (!err)
err = job_update(&szs,0);
if ( max_err < err )
@@ -4884,7 +4922,7 @@ static enumError cmd_update()
if ( err <= ERR_WARNING && err != ERR_NOT_EXISTS )
{
char dest[PATH_MAX];
- SubstDest(dest,sizeof(dest),param->arg,opt_dest,0,0,false);
+ SubstDest(dest,sizeof(dest),arg,opt_dest,0,0,false);
if ( verbose >= 0 || testmode )
{
@@ -4897,7 +4935,7 @@ static enumError cmd_update()
}
File_t F;
- CreateFileOpt(&F,true,dest,testmode,param->arg);
+ CreateFileOpt(&F,true,dest,testmode,arg);
if (F.f)
{
if (IsCompressedFF(szs.fform_file))
@@ -4917,6 +4955,7 @@ static enumError cmd_update()
ResetSZS(&szs);
}
+ ResetStringField(&plist);
return max_err;
}
@@ -4958,22 +4997,23 @@ static enumError cmd_extract ( enumCommands mode )
opt_dest = 0;
opt_mkdir = true;
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
enumError max_err = ERR_OK;
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
szs_file_t szs;
InitializeSZS(&szs);
- enumError err = LoadCreateSZS(&szs,param->arg,true,opt_ignore>0,false);
-
+ enumError err = LoadCreateSZS(&szs,arg,true,opt_ignore>0,false);
if (!err)
{
DASSERT( !szs.file_size || szs.file_size >= szs.size );
if ( analyze_fname && IsBRSUB(szs.fform_arch) )
- AnalyzeBRSUB(&szs,szs.data,szs.size,param->arg);
+ AnalyzeBRSUB(&szs,szs.data,szs.size,arg);
have_patch_count -= 1000000;
PRINT("EXTRACT/%s[%s]: %s\n",__FUNCTION__,GetNameFF_SZS(&szs),szs.fname);
@@ -4985,6 +5025,7 @@ static enumError cmd_extract ( enumCommands mode )
ResetSZS(&szs);
}
+ ResetStringField(&plist);
return max_err;
}
@@ -5247,12 +5288,14 @@ static enumError cmd_convert ( bool binary ) // cmd_binary() cmd_text()
raw_data_t raw;
InitializeRawData(&raw);
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
- enumError err = LoadRawData(&raw,false,param->arg,0,opt_ignore>0,0);
+ enumError err = LoadRawData(&raw,false,arg,0,opt_ignore>0,0);
if ( err == ERR_NOT_EXISTS || err > ERR_WARNING && opt_ignore )
continue;
if ( err > ERR_WARNING )
@@ -5266,13 +5309,13 @@ static enumError cmd_convert ( bool binary ) // cmd_binary() cmd_text()
if (!ff_dest)
{
ERROR0(ERR_WARNING,"File format %s not supported: %s\n",
- GetNameFF(raw.fform,0), param->arg );
+ GetNameFF(raw.fform,0), arg );
if ( max_err < ERR_WARNING )
max_err = ERR_WARNING;
continue;
}
- SubstDest( dest, sizeof(dest), param->arg, opt_dest,
+ SubstDest( dest, sizeof(dest), arg, opt_dest,
def_path, GetExtFF(0,ff_dest), false );
if ( verbose >= 0 )
@@ -5280,7 +5323,7 @@ static enumError cmd_convert ( bool binary ) // cmd_binary() cmd_text()
fprintf(stdlog,"%sCREATE/%s %s:%s => %s:%s\n",
verbose > 0 ? "\n" : "",
binary ? "BINARY" : "TEXT",
- GetNameFF(raw.fform,0), param->arg,
+ GetNameFF(raw.fform,0), arg,
GetNameFF(ff_dest,0), dest );
fflush(stdlog);
}
@@ -5288,7 +5331,7 @@ static enumError cmd_convert ( bool binary ) // cmd_binary() cmd_text()
SetupContainerRawData(&raw);
ConvertHelper( raw.data, raw.data_size,
LinkContainerData(&raw.container),
- param->arg, dest, binary, &err );
+ arg, dest, binary, &err );
if (err)
{
ERROR0(err,0);
@@ -5297,6 +5340,7 @@ static enumError cmd_convert ( bool binary ) // cmd_binary() cmd_text()
}
}
+ ResetStringField(&plist);
ResetRawData(&raw);
return max_err;
}
@@ -5311,13 +5355,14 @@ static enumError cmd_cat()
stdlog = stderr;
enumError max_err = ERR_OK;
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
- {
- NORMALIZE_FILENAME_PARAM(param);
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT_SUB);
+ for ( int argi = 0; argi < plist.used; argi++ )
+ {
+ ccp arg = plist.field[argi];
szs_extract_t eszs;
- enumError err = ExtractSZS(&eszs,true,param->arg,0,opt_ignore>0);
+ enumError err = ExtractSZS(&eszs,true,arg,0,opt_ignore>0);
PRINT("stat=%u, data=%p, found=%d,%d, path=%s\n",
err, eszs.data, !eszs.subfile_found, eszs.szs_found, eszs.subpath );
@@ -5350,7 +5395,7 @@ static enumError cmd_cat()
}
}
else if ( !err && !opt_ignore )
- err = PrintErrorExtractSZS(&eszs,param->arg);
+ err = PrintErrorExtractSZS(&eszs,arg);
fflush(stdout);
if ( max_err < err )
@@ -5358,6 +5403,7 @@ static enumError cmd_cat()
ResetExtractSZS(&eszs);
}
+ ResetStringField(&plist);
return max_err;
}
@@ -5366,23 +5412,22 @@ static enumError cmd_cat()
/////////////// command <FFORM> ///////////////
///////////////////////////////////////////////////////////////////////////////
-static enumError cmd_FFORM ( file_format_t fform, ccp filename )
+static enumError cmd_FFORM ( file_format_t fform, ccp autoname )
{
stdlog = stderr;
- char pathbuf[PATH_MAX];
+ //char pathbuf[PATH_MAX];
enable_kcl_drop_auto++;
enumError max_err = ERR_OK;
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT_SUB);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
- ccp path = PathCatPP(pathbuf,sizeof(pathbuf),param->arg,filename);
+ ccp arg = plist.field[argi];
szs_extract_t eszs;
- enumError err = ExtractSZS(&eszs,true,path,0,opt_ignore>0);
- PRINT("stat=%u, data=%p, found=%d,%d, path=%s\n",
- err, eszs.data, !eszs.subfile_found, eszs.szs_found, eszs.subpath );
+ enumError err = ExtractSZS(&eszs,true,arg,autoname,opt_ignore>0);
// [[analyse-magic]]
if ( eszs.data && GetByMagicFF(eszs.data,eszs.data_size,eszs.data_size) == fform )
@@ -5400,13 +5445,14 @@ static enumError cmd_FFORM ( file_format_t fform, ccp filename )
eszs.fname, "-", false, &err );
}
else if ( !err && !opt_ignore )
- err = PrintErrorExtractSZS(&eszs,param->arg);
+ err = PrintErrorExtractSZS(&eszs,arg);
if ( max_err < err )
max_err = err;
ResetExtractSZS(&eszs);
}
+ ResetStringField(&plist);
return max_err;
}
@@ -5426,10 +5472,12 @@ static enumError cmd_info()
InitializeExtractSZS(&eszs);
enumError max_err = ERR_OK;
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
ccp * search;
for ( search = search_tab; ; search++ )
@@ -5437,12 +5485,12 @@ static enumError cmd_info()
if (!*search)
{
if (!opt_ignore)
- printf("\n* NO INFO FOUND: %s\n\n",param->arg);
+ printf("\n* NO INFO FOUND: %s\n\n",arg);
max_err = ERR_WARNING;
break;
}
- ccp path = PathCatPP(pathbuf,sizeof(pathbuf),param->arg,*search);
+ ccp path = PathCatPP(pathbuf,sizeof(pathbuf),arg,*search);
ResetExtractSZS(&eszs);
enumError err = ExtractSZS(&eszs,false,path,0,true);
if ( !err && eszs.data )
@@ -5458,8 +5506,9 @@ static enumError cmd_info()
}
}
}
- ResetExtractSZS(&eszs);
+ ResetStringField(&plist);
+ ResetExtractSZS(&eszs);
return max_err;
}
@@ -5487,18 +5536,20 @@ static enumError cmd_ghost()
PrintScript_t ps;
SetupPrintScriptByOptions(&ps);
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
- enumError err = LoadRawData(&raw,false,param->arg,0,opt_ignore>0,0);
+ ccp arg = plist.field[argi];
+ enumError err = LoadRawData(&raw,false,arg,0,opt_ignore>0,0);
if ( err == ERR_NOT_EXISTS || err > ERR_WARNING && opt_ignore )
continue;
if ( err > ERR_WARNING )
return err;
if (!fo.f)
- SubstDest(dest,sizeof(dest),param->arg,opt_dest,def_path,
+ SubstDest(dest,sizeof(dest),arg,opt_dest,def_path,
GetExtFF(script_fform,0),false);
if ( verbose >= 0 )
@@ -5562,6 +5613,8 @@ static enumError cmd_ghost()
}
PrintScriptFooter(&ps);
+
+ ResetStringField(&plist);
ResetPrintScript(&ps);
ResetFile(&fo,0);
ResetRKGInfo(&ri);
@@ -5579,20 +5632,22 @@ static enumError cmd_yazdump()
CheckOptDest("-",false);
enumError max_err = ERR_OK;
- ParamList_t *param;
- for ( param = first_param; param; param = param->next )
+ StringField_t plist = {0};
+ CollectExpandParam(&plist,first_param,-1,WM__DEFAULT);
+
+ for ( int argi = 0; argi < plist.used; argi++ )
{
- NORMALIZE_FILENAME_PARAM(param);
+ ccp arg = plist.field[argi];
szs_file_t szs;
InitializeSZS(&szs);
- enumError err = LoadSZS(&szs,param->arg,false,opt_ignore>0,false);
+ enumError err = LoadSZS(&szs,arg,false,opt_ignore>0,false);
if ( err <= ERR_WARNING && err != ERR_NOT_EXISTS
&& ( szs.fform_file == FF_YAZ0 || szs.fform_file == FF_YAZ1 ))
{
char dest[PATH_MAX];
- SubstDest(dest,sizeof(dest),param->arg,opt_dest,".txt",".txt",false);
+ SubstDest(dest,sizeof(dest),arg,opt_dest,".txt",".txt",false);
File_t F;
CreateFileOpt(&F,true,dest,testmode,0);
@@ -5601,7 +5656,7 @@ static enumError cmd_yazdump()
if ( verbose >= 0 || testmode )
fprintf(F.f,"%sYAZ DUMP of %s:%s\n",
verbose > 0 ? "\n" : "",
- GetNameFF_SZS(&szs), param->arg );
+ GetNameFF_SZS(&szs), arg );
err = DecompressSZS(&szs,true,F.f);
}
}
@@ -5611,6 +5666,7 @@ static enumError cmd_yazdump()
ResetSZS(&szs);
}
+ ResetStringField(&plist);
return max_err;
}
@@ -5726,6 +5782,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_FLAG_FILE: opt_flag_file = optarg; break;
case GO_XTRIDATA: opt_xtridata = optarg ? str2ul(optarg,0,10) : 1; break;
case GO_KMP: err += ScanOptKmp(optarg); break;
+ case GO_N_LAPS: err += ScanOptNLaps(optarg); break;
case GO_SPEED_MOD: err += ScanOptSpeedMod(optarg); break;
case GO_KTPT2: err += ScanOptKtpt2(optarg); break;
case GO_TFORM_KMP: err += ScanOptTformKmp(optarg); break;
@@ -5837,6 +5894,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_MACRO_BMG: err += ScanOptMacroBMG(optarg); break;
case GO_FILTER_BMG: filter_bmg = optarg; break;
case GO_LE_MENU: opt_le_menu = true; break;
+ case GO_9LAPS: opt_9laps = true; break;
case GO_CUP_ICONS: opt_cup_icons = optarg; break;
case GO_TITLE_SCREEN: opt_title_screen = optarg; break;
case GO_AUTOADD_PATH: DefineAutoAddPath(optarg); break;
@@ -5869,8 +5927,9 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env )
case GO_SORT: err += ScanOptSort(optarg); break;
case GO_NO_HEADER: print_header = false; break;
case GO_BRIEF: brief_count++; break;
- case GO_PIPE: pipe_count++; break;
+ case GO_NO_WILDCARDS: no_wildcards_count++; break;
case GO_IN_ORDER: inorder_count++; break;
+ case GO_PIPE: pipe_count++; break;
case GO_DELTA: delta_count++; break;
case GO_DIFF: diff_count++; break;
case GO_NO_PARAM: print_param = false; break;
@@ -6037,7 +6096,7 @@ static enumError CheckCommand ( int argc, char ** argv )
case CMD_CHECK: err = cmd_check(); break;
case CMD_SLOTS: err = cmd_slots(); break;
case CMD_STGI: err = cmd_stgi(); break;
- case CMD_ISARENA: err = cmd_isarena(); break;
+ case CMD_IS_ARENA: err = cmd_is_arena(); break;
case CMD_PATCH: err = cmd_patch(); break;
case CMD_COPY: err = cmd_copy(); break;
case CMD_DUPLICATE: err = cmd_duplicate(); break;