From 7fad9e9383d01cce3ac17176404e1ab4e738736c Mon Sep 17 00:00:00 2001 From: Wiimm Date: Sat, 6 Aug 2022 16:20:07 +0200 Subject: SZS v2.28a.beta2 --- project/src/lib-file.c | 442 ++++++++++++++-- project/src/lib-lecode.c | 2 +- project/src/lib-ledis.c | 273 +++++++--- project/src/lib-ledis.h | 23 +- project/src/lib-lex.c | 66 ++- project/src/lib-lex.h | 16 +- project/src/lib-std.c | 11 +- project/src/lib-std.h | 128 ++++- project/src/lib-szs-create.c | 16 +- project/src/lib-szs.h | 5 +- project/src/prefix.inc | 148 +++--- project/src/ui/tab-wbmgt.inc | 3 + project/src/ui/tab-wctct.inc | 3 + project/src/ui/tab-wimgt.inc | 3 + project/src/ui/tab-wkclt.inc | 3 + project/src/ui/tab-wkmpt.inc | 3 + project/src/ui/tab-wlect.inc | 11 +- project/src/ui/tab-wmdlt.inc | 3 + project/src/ui/tab-wpatt.inc | 3 + project/src/ui/tab-wstrt.inc | 4 + project/src/ui/tab-wszst.inc | 42 +- project/src/ui/ui-wbmgt.c | 23 +- project/src/ui/ui-wbmgt.h | 4 +- project/src/ui/ui-wctct.c | 23 +- project/src/ui/ui-wctct.h | 4 +- project/src/ui/ui-wimgt.c | 24 +- project/src/ui/ui-wimgt.h | 4 +- project/src/ui/ui-wkclt.c | 24 +- project/src/ui/ui-wkclt.h | 4 +- project/src/ui/ui-wkmpt.c | 23 +- project/src/ui/ui-wkmpt.h | 4 +- project/src/ui/ui-wlect.c | 31 +- project/src/ui/ui-wlect.h | 4 +- project/src/ui/ui-wmdlt.c | 24 +- project/src/ui/ui-wmdlt.h | 4 +- project/src/ui/ui-wpatt.c | 24 +- project/src/ui/ui-wpatt.h | 4 +- project/src/ui/ui-wstrt.c | 27 +- project/src/ui/ui-wstrt.h | 4 +- project/src/ui/ui-wszst.c | 1203 ++++++++++++++++++++++-------------------- project/src/ui/ui-wszst.h | 10 +- project/src/ui/ui.def | 363 ++++++++++++- project/src/wbmgt.c | 3 +- project/src/wctct.c | 3 +- project/src/wimgt.c | 3 +- project/src/wkclt.c | 3 +- project/src/wkmpt.c | 3 +- project/src/wlect.c | 105 ++-- project/src/wmdlt.c | 3 +- project/src/wpatt.c | 3 +- project/src/wstrt.c | 3 +- project/src/wszst.c | 32 +- 52 files changed, 2224 insertions(+), 980 deletions(-) (limited to 'project/src') diff --git a/project/src/lib-file.c b/project/src/lib-file.c index 16037f7..94d1b80 100644 --- a/project/src/lib-file.c +++ b/project/src/lib-file.c @@ -4074,7 +4074,7 @@ enumError SavePrefixTable ( FILE *f, const mkw_prefix_t * tab ) fprintf(f, "#PREFIX1\r\n" - "#> prefix|info|flags|order|\r\n" + "#> prefix|info|flags|order|color_index|\r\n" "# Info flags: N: by Nintento, M: Original Mario Kart\r\n" "# Functional flags: 1|2: Can be used as first|second part of a combi\r\n" "#%.68s\r\n" @@ -4092,13 +4092,13 @@ enumError SavePrefixTable ( FILE *f, const mkw_prefix_t * tab ) if ( fw_info < info.data.len ) fw_info = info.data.len; - fprintf(f,"%s|%s|%s%s%s%s|%u|\r\n", + fprintf(f,"%s|%s|%s%s%s%s|%u|%u|\r\n", prefix.data.ptr, info.data.ptr, tab->flags & MPF_NINTENDO ? "N" : "", tab->flags & MPF_MARIOKART ? "M" : "", tab->flags & MPF_PREFIX1 ? "1" : "", tab->flags & MPF_PREFIX2 ? "2" : "", - tab->order ); + tab->order, tab->color ); FreeExMem(&prefix); FreeExMem(&info); @@ -4135,6 +4135,7 @@ enumError SavePrefixTableFN ( ccp fname, const mkw_prefix_t * tab ) /////////////////////////////////////////////////////////////////////////////// ccp opt_plus = "+"; +ccp opt_printf = 0; /////////////////////////////////////////////////////////////////////////////// @@ -4153,7 +4154,7 @@ void ResetSPF ( split_filename_t *spf ) void AnalyseSPF ( - split_filename_t *spf, // valid pointet + split_filename_t *spf, // valid pointer bool init_spf, // true: InitializeSPF(), false: ResetSPF() ccp source, // NULL or ponter to name ccp src_end, // end of source. if 0 then use strlen() @@ -4174,6 +4175,7 @@ void AnalyseSPF if ( !source || !*source || src_end && src_end <= source ) return; + const int max_attrib = 100; char buf[100]; @@ -4276,7 +4278,7 @@ void AnalyseSPF spf->norm.len = nlen; - //--- attributes and authors + //--- attributes p1 = memrchr(name,'[',nlen); if (p1) @@ -4291,8 +4293,34 @@ void AnalyseSPF while ( end > name && end[-1] == ' ' ) end--; nlen = end - name; + + mem_t attrib_list[max_attrib+2]; + const uint n = SplitByCharMem(attrib_list,max_attrib+1,spf->attribs,','); + for ( int i = 0; i < n; i++ ) + { + mem_t p = attrib_list[i]; + + float speed = 0.0; + char *end; + if ( p.ptr[0] == 'x' ) + speed = strtof(p.ptr+1,&end); + else if (!memcmp(p.ptr,"×",2)) + speed = strtof(p.ptr+2,&end); + if ( speed > 0.0 && end == p.ptr + p.len ) + spf->speed_factor = speed; + + if ( p.len == 4 && !memcmp(p.ptr+1,"lap",3) || p.len == 5 && !memcmp(p.ptr+1,"laps",4) ) + { + const uint laps = p.ptr[0] - '0'; + if ( laps < 10 ) + spf->lap_count = laps; + } + } } + + //--- authors + p1 = memrchr(name,'(',nlen); if (p1) { @@ -4421,34 +4449,6 @@ void AnalyseSPF } - //--- special chars - - #if SUPPORT_SPLIT_SIGN - p1 = name; - for (;;) - { - p2 = NextUTF8Char(p1); - const int len = p2 - p1; - if ( ( !len || memcmp(p1,"→",len) && memcmp(p1,"»",len) ) - && ( len != 1 || !strchr("~>^",*p1) ) - ) - { - break; - } - p1 = p2; - } - if ( p1 > name ) - { - if ( *p1 == ' ' ) - p1++; - spf->sign.ptr = name; - spf->sign.len = p1 - name; - name = p1; - nlen = end - name; - } - #endif - - //--- boost if (!strncasecmp(name,"boost:",6)) @@ -4474,7 +4474,7 @@ void AnalyseSPF spf->game1.ptr = name; spf->game1.len = p1 - name; spf->game = spf->game1; - spf->game_color = pre1->color; + spf->game1_color = pre1->color; spf->game_order = 1000 * pre1->order; int add_game = 998; name = p1+1; @@ -4488,12 +4488,13 @@ void AnalyseSPF const mkw_prefix_t *pre2 = FindPrefix(name,p1-name,true); if ( pre2 && pre2->flags & MPF_PREFIX2 ) { - spf->game2.ptr = name; - spf->game2.len = p1 - name; - spf->game.len += spf->game2.len + 1; - name = p1+1; - nlen = end - name; - add_game = 2*pre2->order; + spf->game2.ptr = name; + spf->game2.len = p1 - name; + spf->game.len += spf->game2.len + 1; + spf->game2_color = pre2->color; + name = p1+1; + nlen = end - name; + add_game = 2*pre2->order; } } } @@ -4510,6 +4511,367 @@ void AnalyseSPF spf->name.len = nlen; } +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +void ResetPSP ( print_split_par_t *psp ) +{ + if (psp) + { + ResetEML(&psp->u_list); + memset(psp,0,sizeof(*psp)); + } +} + +/////////////////////////////////////////////////////////////////////////////// + +exmem_t PrintSPF +( + exmem_dest_t *dest, // Kind of destination, if NULL then MALLOC() + const split_filename_t + *spf, // Valid and initialized source + print_split_par_t *par // valid struct with parameters +) +{ + const int MAX_FW = 1000; + int active_color = 0; + + bool skip = false; + ccp format = 0; + char fbuf[500]; + if (par) + { + par->u_item = 0; + + if (par->format) + { + ScanEscapedString(fbuf,sizeof(fbuf),par->format,-1,true,0,0); + format = fbuf; + } + } + + char buf[2000], tempbuf[20]; + char *end_buf = buf + sizeof(buf) - 1, *ptr = buf; + + char destbuf[200]; + exmem_dest_t exdest = { .buf = destbuf, .buf_size = sizeof(destbuf), .try_circ = true }; + + if ( spf && format ) + { + ccp saved_format[4] = {0}; // max 3 needed, 4'th for security + int saved_index = 0; + + for(;;) + { + while ( *format && ptr < end_buf ) + { + if ( *format != '%' ) + { + *ptr++ = *format++; + continue; + } + + format++; + if ( *format == '%' ) + { + *ptr++ = *format++; + continue; + } + + + //--- now we have a print instruction + //--- scan flags + + bool left_adjust = false; + int add_space = 0; // -1:suppres, 0:auto, 1:force + int add_colors = 0; + bool no_braces = false; + ccp force_braces = 0; + bool multi_use = false; + int always = 0; + + for(;;) + { + switch(*format++) + { + case '-': left_adjust = true; break; + case ' ': add_space = 1; break; + case '0': add_space = -1; break; + case '!': no_braces = true; break; + case '(': force_braces = "()"; break; + case '{': force_braces = "{}"; break; + case '[': force_braces = "[]"; break; + case '<': force_braces = "<>"; break; + case '+': multi_use = true; break; + case '@': always++; break; + case '#': add_colors++; break; + default: goto end_scan_flags; + } + } + end_scan_flags:; + --format; + + + //--- skip entry* + + if ( multi_use ) + { + if ( par->u_skip_mode > 0 ) + skip = true; + + if ( par->u_use_list && !par->u_item ) + { + *ptr = 0; + bool found; + par->u_item = FindInsertEML(&par->u_list,buf,CPM_COPY,&found); + if ( !found && !par->u_skip_mode ) + skip = true; + } + } + + + //--- scan field width + + int fw = 0; + if ( *format >= '0' && *format <= '9' ) + { + while ( *format >= '0' && *format <= '9' ) + fw = fw * 10 + *format++ - '0'; + } + if ( fw > MAX_FW ) + fw = MAX_FW; + + + //----- scan precision + + int prec = -1; + if ( *format == '.' ) + { + format++; + prec = 0; + + while ( *format >= '0' && *format <= '9' ) + prec = prec * 10 + *format++ - '0'; + if ( prec > MAX_FW ) + prec = MAX_FW; + } + + mem_t src = {0}; // source string + int color = 0; // >0: color index + ccp braces = 0; // NULL or kind of default braces + bool auto_space = true; // add additional space before + + switch(*format++) + { + case 'a': // authors: list of authors, format "(authors)", options=raw, curly braces + src = spf->authors; + braces = "()"; + break; + + case 'A': // attribs: list of attributes, format "(authors)", options=raw + src = spf->attribs; + braces = "[]"; + break; + + case 'b': // boost: boost prefix + src = spf->boost; + if (add_colors) + color = 0x32; // RED3 + break; + + case 'D': // f_d: empty or "_d" + src = spf->f_d; + if (!add_space) + add_space = -1; + break; + + case 'e': // extra: extra info, format "(extra)", options=raw, curly braces + src = spf->extra; + braces = "()"; + if (add_colors) + color = 0x21; // BLUE1 + break; + + case 'E': // f_ext: file extention + src = spf->f_ext; + if (!add_space) + add_space = -1; + break; + + case 'g': // game1: first game prefix + src = spf->game1; + if (add_colors) + color = spf->game1_color; + break; + + case 'G': // game2: second game prefix + src = spf->game2; + if (add_colors) + color = spf->game2_color; + break; + + case 'F': // f_name: source name, stripped + src = spf->f_name; + break; + + case 'l': // lap_count + { + int laps = par->lap_count > 0 ? par->lap_count : spf->lap_count; + if ( always > 1 || laps > 0 && ( always || laps != 3 )) + { + if (!laps) + laps = 3; + src.ptr = tempbuf; + src.len = snprintf(tempbuf,sizeof(tempbuf), "%u%s%s", + laps, + no_braces ? "" : "lap", + no_braces ? "" : laps != 1 ? "s" : fw > 4 ? " " : "" ); + if (add_colors) + color = 0x21; // BLUE1 + } + } + break; + + case 'L': // LOTTERY ALIAS + saved_format[saved_index++] = format; + format = add_colors > 1 + ? "%#N%#e%#s%#+v" : add_colors + ? "%#N%e%#s%#+v" + : "%N%e%s%+v"; + break; + + case 'n': // name: name + src = spf->name; + break; + + case 'N': // RACE ALIAS + saved_format[saved_index++] = format; + format = add_colors ? "%#P%#b%#p%n" : "%P%b%p%n"; + break; + + case 'O': // norm: normalized name, alloced + src = spf->norm; + break; + + case 'p': // game: combined game prefix + src = spf->game; + if (add_colors) + color = spf->game1_color; + break; + + case 'P': // plus: plus prefix + src = spf->plus; + if (add_colors) + color = 0x31; // BLUE2 + break; + + case 'R': // RACE ALIAS + saved_format[saved_index++] = format; + format = add_colors > 1 + ? "%##L\n%!a" : add_colors + ? "%#L\n%!a" + : "%L\n%!a"; + break; + + case 's': // speed_factor + { + float speed = par->speed_factor > 0.0 ? par->speed_factor : spf->speed_factor; + if ( always > 1 || speed > 0.0 && ( always || speed != 1.0 )) + { + if ( speed <= 0.0 ) + speed = 1.0; + src.ptr = tempbuf; + src.len = snprintf(tempbuf,sizeof(tempbuf), "%s%*.*f", + no_braces ? "" : "×", fw, prec<0 ? 2 : prec, speed ); + if ( prec < 0 ) + { + while ( src.ptr[src.len-1] == '0' ) + src.len--; + if ( src.ptr[src.len-1] == '.' ) + src.len--; + } + if (add_colors) + color = 0x21; // BLUE1 + prec = -1; + } + } + break; + + case 'v': // version: version number + src = spf->version; + if (add_colors) + color = 0x21; // BLUE1 + break; + } + + if ( skip && multi_use ) + par->u_skip_count++; + else if ( src.len ) + { + if (force_braces) + braces = force_braces; + else if (no_braces) + braces = 0; + + if ( add_space > 0 || add_space == 0 && auto_space && ptr > buf && (u8)ptr[-1] > ' ' ) + *ptr++ = ' '; + + if ( color != active_color ) + { + snprintf(destbuf,sizeof(destbuf),"\\c{%x}",color); + ptr = StringCopyE(ptr,end_buf,destbuf); + active_color = color; + } + + if (braces) + { + *ptr++ = braces[0]; + fw = fw > 2 ? fw-2 : 0; + } + + if ( fw > 0 || prec >= 0 ) + { + exmem_t res = AlignUTF8(&exdest,src.ptr,src.len,left_adjust?-fw:fw,prec); + ptr = StringCopyEM(ptr,end_buf,res.data.ptr,res.data.len); + FreeExMem(&res); + } + else + ptr = StringCopyEM(ptr,end_buf,src.ptr,src.len); + + if (braces) + *ptr++ = braces[1]; + } + } // while + if (!saved_index) + break; + format = saved_format[--saved_index]; + } // for + } // if + + *ptr = 0; + exmem_t res = GetExmemDestBuf(dest,ptr-buf); + memcpy((char*)res.data.ptr,buf,res.data.len+1); + return res; +} + +/////////////////////////////////////////////////////////////////////////////// + +exmem_t PrintNameSPF +( + exmem_dest_t *dest, // Kind of destination, if NULL then MALLOC() + ccp source, // NULL or pointer to name to analyze + ccp src_end, // End of source. If 0 then use strlen(). + print_split_par_t *par // valid struct with parameters +) +{ + + split_filename_t spf; + AnalyseSPF(&spf,true,source,src_end,CPM_LINK,par?par->plus_mode:0); + exmem_t res = PrintSPF(dest,&spf,par); + ResetSPF(&spf); + return res; +} + // /////////////////////////////////////////////////////////////////////////////// /////////////// END /////////////// diff --git a/project/src/lib-lecode.c b/project/src/lib-lecode.c index ad6d94c..4d06fb0 100644 --- a/project/src/lib-lecode.c +++ b/project/src/lib-lecode.c @@ -139,7 +139,7 @@ int ScanOptSzsMode ( ccp arg ) return 1; opt_szs_mode = cmd->id; - PRINT1("SZS-MODE=%d\n",opt_szs_mode); + PRINT("SZS-MODE=%d\n",opt_szs_mode); return 0; } diff --git a/project/src/lib-ledis.c b/project/src/lib-ledis.c index e85b31a..3bc85a2 100644 --- a/project/src/lib-ledis.c +++ b/project/src/lib-ledis.c @@ -1649,6 +1649,7 @@ void ResetLD ( le_distrib_t *ld ) ResetParamField(&ld->dis_param); FREE(ld->lpar); ResetLSP(&ld->spar); + FreeString(ld->separator); if (ld->ctcode) { @@ -2290,6 +2291,8 @@ void ScanRefSTLD IDX_MUSIC, IDX_FLAGS, IDX_HIDDEN, + IDX_LAPS, + IDX_SPEED, IDX_SHA1, IDX_SHA1_D, IDX_IDENT, @@ -2305,6 +2308,9 @@ void ScanRefSTLD while (NextLineScanText(st)) { + if ( *st->line == '@' ) + continue; + mem_t srcline = { .ptr = st->line, .len = st->eol - st->line }; mem_t src[IDX__N+2]; const uint n = SplitByCharMem(src,IDX__N+1,srcline,'|'); @@ -2322,6 +2328,8 @@ void ScanRefSTLD lt->property = str2l(src[IDX_PROPERTY].ptr,0,10); lt->music = str2l(src[IDX_MUSIC].ptr,0,10); lt->flags = str2l(src[IDX_FLAGS].ptr,0,10); + lt->lap_count = str2l(src[IDX_LAPS].ptr,0,10); + lt->speed_factor= strtof(src[IDX_SPEED].ptr,0); char buf[LE_TRACK_STRING_MAX+1]; if ( n > IDX_SHA1 ) SetIdentOptLT(lt,xstring(buf,sizeof(buf),src[IDX_SHA1]), 0,1,ld->spar.opt ); @@ -2384,6 +2392,9 @@ void ScanStrSTLD while (NextLineScanText(st)) { + if ( *st->line == '@' ) + continue; + mem_t srcline = { .ptr = st->line, .len = st->eol - st->line }; mem_t src[IDX__N+2]; const uint n = SplitByCharMem(src,IDX__N+1,srcline,'|'); @@ -2409,7 +2420,7 @@ void ScanStrSTLD StringCopySM(buf,sizeof(buf),src[IDX_STRING].ptr,src[IDX_STRING].len); ScanEscapedStringPipe(buf,sizeof(buf),buf,0); - PRINT1(">>>> %s = %s\n",GetNameLSP(&spar),buf); + PRINT0(">>>> %s = %s\n",GetNameLSP(&spar),buf); const int dmode = str2l(src[IDX_D_MODE].ptr,0,10); if ( dmode == 2 ) spar.use_d = true; @@ -2463,7 +2474,7 @@ bool ScanSha1LineLD bool ident_only // TRUE: SetIdent*LT() only ) { - if ( !ld || !src || !end ) + if ( !ld || !src || *src == '@' || !end ) return false; bool is_arena = false; @@ -2718,15 +2729,18 @@ static enumError ScanLeDefTRACKS if ( !ld || !si ) return ERR_MISSING_PARAM; - enum { C_SLOT, C_TRACK, C_IDENT, C_FILE, C_NAME, C_XNAME, + enum { C_SLOT, C_TRACK, C_LAPS, C_SPEED, C_IDENT, C_FILE, C_NAME, C_XNAME, C_LIST, C_STD_ARENAS, C_STD_VERSUS }; - enum { O_STRING = 0x100 }; + enum { O_CURRENT = 0x100, O_STRING = 0x200 }; static const KeywordTab_t commands[] = { { C_SLOT, "SLOT", 0, 0 }, { C_TRACK, "TRACK", 0, 0 }, + { C_LAPS, "LAPS", "LAP", O_CURRENT }, + { C_SPEED, "SPEED", 0, O_CURRENT }, + { C_IDENT, "IDENT", 0, O_STRING }, { C_FILE, "FILE", 0, O_STRING }, { C_NAME, "NAME", 0, O_STRING }, @@ -2791,27 +2805,28 @@ static enumError ScanLeDefTRACKS continue; } - const le_options_t opt = cmd ? cmd->opt : 0; - if ( opt & O_STRING || define_set ) + const le_options_t opt = cmd ? cmd->opt : O_CURRENT; + if ( !current_lt && opt & (O_CURRENT|O_STRING) ) { - if (!current_lt) + if (!si->no_warn) { - if (!si->no_warn) - { - ccp eol = FindNextLineFeedSI(si,true); - ScanFile_t *sf = si->cur_file; - DASSERT(sf); - ERROR0(ERR_WARNING, - "File %s, section [TRACK-LIST], line #%u:\nNo current track: %.*s\n", - sf->name, sf->line, - (int)(eol - sf->prev_ptr), sf->prev_ptr ); - } - if ( max_err < ERR_WARNING ) - max_err = ERR_WARNING; - GotoEolSI(si); - continue; + ccp eol = FindNextLineFeedSI(si,true); + ScanFile_t *sf = si->cur_file; + DASSERT(sf); + ERROR0(ERR_WARNING, + "File %s, section [TRACK-LIST], line #%u:\nNo current track: %.*s\n", + sf->name, sf->line, + (int)(eol - sf->prev_ptr), sf->prev_ptr ); } + if ( max_err < ERR_WARNING ) + max_err = ERR_WARNING; + GotoEolSI(si); + continue; + } + if ( opt & O_STRING || define_set ) + { + DASSERT(current_lt); enumError err = ScanStringSI(si,&string_par); if ( max_err < err ) max_err = err; @@ -2875,6 +2890,24 @@ static enumError ScanLeDefTRACKS } break; + case C_LAPS: + ASSERT(current_lt); + { + uint uval; + if ( !ScanUIntValueSI(si,&uval) && uval > 0 && uval < 10 ) + current_lt->lap_count = uval; + } + break; + + case C_SPEED: + ASSERT(current_lt); + { + double dval; + if ( !ScanDValueSI(si,&dval) && dval > 0.0 ) + current_lt->speed_factor = dval; + } + break; + case C_IDENT: SetIdentOptLT(current_lt,string_par.str,false,true,ld->spar.opt); break; @@ -3705,7 +3738,9 @@ enumError AddToArchLD ( le_distrib_t *ld, raw_data_t *raw ) ScanOptTrackSource(".",1,opt_szs_mode); err = ERR_OK; - le_track_arch_t *ta = GetNextArchLD(ld); + le_track_arch_t *ta= GetNextArchLD(ld); + ta->lt.lap_count = as.lap_count; + ta->lt.speed_factor = as.speed_factor; if (szs.is_arena) { @@ -3751,11 +3786,7 @@ enumError AddToArchLD ( le_distrib_t *ld, raw_data_t *raw ) StringCopySM(buf,sizeof(buf),spf.f_name.ptr,spf.f_name.len); SetFileLT(&ta->lt,&spar,buf); - #if SUPPORT_SPLIT_SIGN - mem_t list[] = { spf.sign, spf.boost, spf.game, spf.name, spf.extra }; - #else mem_t list[] = { spf.boost, spf.game, spf.name, spf.extra }; - #endif mem_src_t msrc = { .src = list, .n_src = sizeof(list)/sizeof(*list) }; exmem_t exsum = ExMemCat(&exdest,space,&msrc); SetNameLT(&ta->lt,&spar,exsum.data.ptr); @@ -3809,7 +3840,7 @@ enumError AddToArchLD ( le_distrib_t *ld, raw_data_t *raw ) ta->plus_order = spf.plus_order; ta->game_order = spf.game_order; -// ta->game_color = spf.game_color; +// ta->game_color = spf.game1_color; //-- clean @@ -4404,10 +4435,15 @@ static enumError search_func ASSERT(s); ASSERT(s->ld); - const enumError err = ImportFileLD(s->ld,path.ptr,false,false); + raw_data_t raw; + enumError err = LoadRawData(&raw,true,path.ptr,0,opt_ignore>0,0); + if (!err) + err = ImportRawDataLD(s->ld,&raw); + ResetRawData(&raw); + + s->count++; if ( s->max_err < err ) s->max_err = err; - s->count++; return err; } @@ -4421,6 +4457,7 @@ enumError ImportFileLD bool support_options // support options (leading '+' and no slash ) ) { + PRINT0("ImportFileLD(,%s,%d,%d)\n",fname,use_wildcard,support_options); enumError err = ERR_MISSING_PARAM; if ( ld && fname ) { @@ -4434,6 +4471,7 @@ enumError ImportFileLD struct stat st; if ( use_wildcard && HaveWildcards(MemByString(fname)) && stat(fname,&st) ) { + PRINT0(" > SEARCH %s\n",fname); struct search_t param = { .ld = ld }; SearchPaths(fname,0,false,search_func,¶m); return param.count @@ -4827,14 +4865,15 @@ enumError CreateRefLD ( FILE *f, le_distrib_t *ld, bool add_strings ) UpdateCupsLD(ld); SetupReferenceList(ld,filter_options_td,ld->spar.opt); - fprintf(f,"%s : LE-CODE track reference v1\r\n",LE_REFERENCE_MAGIC8); + fprintf(f,"%s : LE-CODE track reference v1.%u\r\n@VERSION=%u\r\n", + LE_REFERENCE_MAGIC8, LE_REFERENCE_VERSION, LE_REFERENCE_VERSION ); ccp filter = GetOutputFilterLEO(ld->spar.opt&LEO_M_OUTPUT); if (filter) fprintf(f,"# Active output filter: %s\r\n",filter); fprintf(f, - "#> track_slot|type|orig|cup_slot|cup_slot_name|property|music|flags|hidden|sha1|sha1_d|%s\r\n", + "#> track_slot|type|orig|cup_slot|cup_slot_name|property|music|flags|hidden|laps|speed|sha1|sha1_d|%s\r\n", add_strings ? "ident|ident_d|file|file_d|name|name_d|xname|xname_d|" : "" ); const bool no_d = ( ld->spar.opt & LEO_NO_D_FILES ) != 0; @@ -4845,12 +4884,13 @@ enumError CreateRefLD ( FILE *f, le_distrib_t *ld, bool add_strings ) count++; const le_track_t *lt = *plt; - fprintf(f,"%u|%s|%u|%u|%s|%u|%u|%u|%u|%s|%s|", + fprintf(f,"%u|%s|%u|%u|%s|%u|%u|%u|%u|%u|%5.3f|%s|%s|", lt->track_slot, GetNameLTTY(lt->track_type), lt->is_original, lt->cup_slot, GetCupLT(lt,""), lt->property, lt->music, lt->flags, IsHiddenLETF(lt->flags), + lt->lap_count, lt->speed_factor, GetSha1LT(lt,0,""), no_d ? 0 : GetSha1LT(lt,1,"") ); @@ -4892,7 +4932,8 @@ enumError CreateStringsLD ( FILE *f, le_distrib_t *ld ) return ERR_MISSING_PARAM; SetupReferenceList(ld,filter_options_td,ld->spar.opt); - fprintf(f,"%s : LE-CODE track strings v1\r\n",LE_STRINGS_MAGIC8); + fprintf(f,"%s : LE-CODE track strings v1.%u\r\n@VERSION=%u\r\n", + LE_STRINGS_MAGIC8, LE_STRINGS_VERSION, LE_STRINGS_VERSION ); ccp filter = GetOutputFilterLEO(ld->spar.opt&LEO_M_OUTPUT); if (filter) @@ -5103,8 +5144,11 @@ enumError CreateSha1LD { fprintf(f, "%s\r\n" + "@VERSION=%u\r\n" "# A SHA1 list, that can be used for example @ Wiimmfi.de\r\n" - ,LE_SHA1REF_MAGIC8 ); + ,LE_SHA1REF_MAGIC8 + ,LE_SHA1REF_VERSION + ); ccp filter = GetOutputFilterLEO(ld->spar.opt&LEO_M_OUTPUT); if ( filter && *filter ) @@ -5287,11 +5331,18 @@ static void print_ledef_track max_len = slen; } } - max_len = ( max_len + 18 ) / 8 * 8 - 1; #else int max_len = 7; #endif + max_len = ( max_len + 18 ) / 8 * 8 - 1; + const int n_tabs = ( max_len - 7 ) / 8; + + if ( lt->lap_count > 0 && lt->track_type & LTTY_TRACK ) + fprintf(f,"\tlaps%.*s%u\r\n",n_tabs,Tabs20,lt->lap_count); + if ( lt->speed_factor > 0.0 ) + fprintf(f,"\tspeed%.*s%5.3f\r\n",n_tabs,Tabs20,lt->speed_factor); + print_ledef_text(f,ld,max_len,"ident",GetIdentLT(lt,false,true,0)); print_ledef_text(f,ld,max_len,"file",GetFileLT(lt,0)); print_ledef_text(f,ld,max_len,"name",GetNameLT(lt,0)); @@ -5642,7 +5693,7 @@ enumError CreateBmgLD ( FILE *f, le_distrib_t *ld, bool bmg_text ) le_options_t source = ld->spar.opt & LEO_M_BMG; if (!source) - source = LEO_M_BMG; + source = LEO_DEFAULT_BMG; for ( int slot = 0; slot < ld->tlist_used; slot++ ) { @@ -5668,7 +5719,7 @@ enumError CreateBmgLD ( FILE *f, le_distrib_t *ld, bool bmg_text ) { bmg_item_t *bi = InsertItemBMG(&bmg,mid,0,0,0); ASSERT(bi); - AssignItemTextBMG(bi,text,-1); + AssignItemScanTextBMG(bi,text,-1); } } @@ -5684,7 +5735,7 @@ enumError CreateBmgLD ( FILE *f, le_distrib_t *ld, bool bmg_text ) { bmg_item_t *bi = InsertItemBMG(&bmg,mid,0,0,0); ASSERT(bi); - AssignItemTextBMG(bi,text,-1); + AssignItemScanTextBMG(bi,text,-1); } } @@ -5692,14 +5743,14 @@ enumError CreateBmgLD ( FILE *f, le_distrib_t *ld, bool bmg_text ) { bmg_item_t *bi = InsertItemBMG(&bmg,slot+MID_CT_TRACK_BEG,0,0,0); ASSERT(bi); - AssignItemTextBMG(bi,text,-1); + AssignItemScanTextBMG(bi,text,-1); } if ( source & LEO_LECODE ) { bmg_item_t *bi = InsertItemBMG(&bmg,slot+MID_LE_TRACK_BEG,0,0,0); ASSERT(bi); - AssignItemTextBMG(bi,text,-1); + AssignItemScanTextBMG(bi,text,-1); } } @@ -5899,6 +5950,112 @@ enumError CreateDebugLD ( FILE *f, const le_distrib_t *ld ) /////////////// le_distrib_t: text jobs /////////////// /////////////////////////////////////////////////////////////////////////////// +enumError SeparatorLD ( le_distrib_t *ld, ccp arg ) +{ + if (!ld) + return ERR_MISSING_PARAM; + + FreeString(ld->separator); + ld->separator = !arg ? 0 : !*arg ? EmptyString : STRDUP(arg); + return ERR_OK; +} + +/////////////////////////////////////////////////////////////////////////////// + +enumError CopyLD ( le_distrib_t *ld, const le_strpar_t *dest, + const le_strpar_t *src, int n_src ) +{ + if ( !ld || !dest || !src || n_src < 1 ) + return ERR_MISSING_PARAM; + + char buf[LE_TRACK_STRING_MAX+10]; + ccp sep = ld->separator ? ld->separator : " "; + + SetupReferenceList(ld,filter_options_td,dest->opt); + for ( le_track_t **plt = ld->reflist; *plt; plt++ ) + { + le_track_t *lt = *plt; + char *bufptr = buf; + for ( int idx = 0; idx < n_src; idx++ ) + { + if ( bufptr > buf ) + bufptr = StringCopyE(bufptr,buf+sizeof(buf),sep); + ccp text = GetTextLT(lt,src+idx,0); + if (IsInputNameValidLEO(text,src[idx].opt)) + bufptr = StringCopyE(bufptr,buf+sizeof(buf),text); + if ( bufptr >= buf + LE_TRACK_STRING_MAX ) + { + buf[LE_TRACK_STRING_MAX-1] = 0; + break; + } + } + + ccp *ptr = GetPtrLT(lt,dest); + if (IsAssignmentAllowedLEO( ptr ? *ptr : 0,buf,dest->opt)) + SetTextLT(lt,dest,buf); + } + return ERR_OK; +} + +/////////////////////////////////////////////////////////////////////////////// + +enumError SplitLD + ( le_distrib_t *ld, const le_strpar_t *dest, const le_strpar_t *src, ccp arg ) +{ + if ( !ld || !dest || !src || !arg ) + return ERR_MISSING_PARAM; + + PRINT0("SPLIT: %s := %s / %s\n",GetNameLSP(dest),GetNameLSP(src),arg); + + typedef struct { le_track_t *first; bool done; } storage_t; + char destbuf[LE_TRACK_STRING_MAX+10]; + exmem_dest_t exdest = { .buf = destbuf, .buf_size = sizeof(destbuf), .try_circ = true }; + + print_split_par_t psp = { .format = arg, .plus_mode = opt_plus, .u_use_list = true }; + + SetupReferenceList(ld,filter_options_td,dest->opt); + for ( le_track_t **plt = ld->reflist; *plt; plt++ ) + { + le_track_t *lt = *plt; + ccp text = GetTextLT(lt,src,0); + exmem_t res = PrintNameSPF(&exdest,text,0,&psp); + SetTextLT(lt,dest,res.data.ptr); + if (psp.u_item) + { + exmem_key_t *ek = psp.u_item; + if (!ek->data.data.ptr) + { + ek->data.data.ptr = CALLOC(1,sizeof(storage_t)); + ek->data.data.len = sizeof(storage_t); + ek->data.is_alloced = true; + storage_t *st = (storage_t*)ek->data.data.ptr; + st->first = lt; + } + else + { + storage_t *st = (storage_t*)ek->data.data.ptr; + ASSERT(st); + ASSERT(st->first); + ASSERT(st->first!=lt); + if (!st->done) + { + st->done = true; + ccp text2 = GetTextLT(st->first,src,0); + exmem_t res2 = PrintNameSPF(&exdest,text2,0,&psp); + SetTextLT(st->first,dest,res2.data.ptr); + FreeExMem(&res2); + } + } + } + FreeExMem(&res); + } + + ResetPSP(&psp); + return ERR_OK; +} + +/////////////////////////////////////////////////////////////////////////////// + enumError SubstLD ( le_distrib_t *ld, const le_strpar_t *dest, ccp arg ) { if ( !ld || !dest || !arg || !*arg ) @@ -5943,42 +6100,6 @@ enumError SubstLD ( le_distrib_t *ld, const le_strpar_t *dest, ccp arg ) return ERR_OK; } -/////////////////////////////////////////////////////////////////////////////// - -enumError CopyLD ( le_distrib_t *ld, const le_strpar_t *dest, - const le_strpar_t *src, int n_src ) -{ - if ( !ld || !dest || !src || n_src < 1 ) - return ERR_MISSING_PARAM; - - char buf[LE_TRACK_STRING_MAX+10]; - - SetupReferenceList(ld,filter_options_td,dest->opt); - for ( le_track_t **plt = ld->reflist; *plt; plt++ ) - { - le_track_t *lt = *plt; - char *bufptr = buf; - for ( int idx = 0; idx < n_src; idx++ ) - { - if ( bufptr > buf ) - *bufptr++ = '\1'; - ccp text = GetTextLT(lt,src+idx,0); - if (IsInputNameValidLEO(text,src[idx].opt)) - bufptr = StringCopyE(bufptr,buf+sizeof(buf),text); - if ( bufptr >= buf + LE_TRACK_STRING_MAX ) - { - buf[LE_TRACK_STRING_MAX-1] = 0; - break; - } - } - - ccp *ptr = GetPtrLT(lt,dest); - if (IsAssignmentAllowedLEO( ptr ? *ptr : 0,buf,dest->opt)) - SetTextLT(lt,dest,buf); - } - return ERR_OK; -} - // /////////////////////////////////////////////////////////////////////////////// /////////////// le_distrib_t: copy files /////////////// diff --git a/project/src/lib-ledis.h b/project/src/lib-ledis.h index b39d629..168cae8 100644 --- a/project/src/lib-ledis.h +++ b/project/src/lib-ledis.h @@ -83,12 +83,15 @@ #define LE_REFERENCE_MAGIC8 "#LE-REF1" #define LE_REFERENCE_MAGIC8_NUM 0x234c452d52454631ull +#define LE_REFERENCE_VERSION 1 #define LE_STRINGS_MAGIC8 "#LE-STR1" #define LE_STRINGS_MAGIC8_NUM 0x234c452d53545231ull +#define LE_STRINGS_VERSION 1 #define LE_SHA1REF_MAGIC8 "#SHA1REF" #define LE_SHA1REF_MAGIC8_NUM 0x2353484131524546ull +#define LE_SHA1REF_VERSION 1 #define LE_PREFIX_MAGIC8 "#PREFIX1" #define LE_PREFIX_MAGIC8_NUM 0x2350524546495831ull @@ -233,7 +236,8 @@ typedef enum le_options_t LEO_CTCODE = 0x0000040, // import track names from CT-CODE (0x4000..) LEO_LECODE = 0x0000080, // import track names from LE-CODE (0x7000..) LEO_MKW = LEO_MKW1 | LEO_MKW2, - LEO_M_BMG = LEO_MKW | LEO_CTCODE | LEO_LECODE, + LEO_DEFAULT_BMG = LEO_MKW | LEO_LECODE, + LEO_M_BMG = LEO_MKW | LEO_LECODE | LEO_CTCODE, //-- BMG input options @@ -455,6 +459,9 @@ typedef struct le_track_t le_music_t music; // music slot le_flags_t flags; // flags + u8 lap_count; // number of laps, valid if >0.0 + float speed_factor; // speed factor, valid if >0.0 + le_track_id_t lti[2]; // index 0: normal, index 1:_d ccp file; // NULL or filename of track ccp name; // NULL or name of track @@ -674,7 +681,8 @@ typedef struct le_distrib_t bool is_initialized; // true: data is InitializeLD() le_auto_setup_t auto_setup; // bit files (LAS_*) - le_strpar_t spar; // current string param, incl. default 'opt' + le_strpar_t spar; // current string param, incl. default 'opt' + ccp separator; // NULL or separator for string functions. le_track_t *tlist; // list of tracks uint tlist_used; // used elements in 'tlist' @@ -923,11 +931,18 @@ enumError CreateDebugLD ( FILE *f, const le_distrib_t *ld ); enumError CreateLecode4LD ( ccp fname, le_distrib_t *ld ); //----------------------------------------------------------------------------- -// special jobs +// string functions + +enumError SeparatorLD ( le_distrib_t *ld, ccp arg ); -enumError SubstLD ( le_distrib_t *ld, const le_strpar_t *dest, ccp arg ); enumError CopyLD ( le_distrib_t *ld, const le_strpar_t *dest, const le_strpar_t *src, int n_src ); +enumError SplitLD ( le_distrib_t *ld, const le_strpar_t *dest, + const le_strpar_t *src, ccp arg ); +enumError SubstLD ( le_distrib_t *ld, const le_strpar_t *dest, ccp arg ); + +//----------------------------------------------------------------------------- +// special jobs enumError TransferFilesLD ( le_distrib_t *ld, bool logit, bool testmode ); diff --git a/project/src/lib-lex.c b/project/src/lib-lex.c index eb992d9..104fe93 100644 --- a/project/src/lib-lex.c +++ b/project/src/lib-lex.c @@ -156,7 +156,7 @@ static const feature_var_t kmp_feature_list[] = static const feature_var_t lex_section_list[] = { - DEF_VAR( 1,HAVELEXS_FEA0, lex_sect_fea0, "LEX section FEA0" ), + DEF_VAR( 1,HAVELEXS_FEAT, lex_sect_feat, "LEX section FEAT" ), DEF_VAR( 0,HAVELEXS_TEST, lex_sect_test, "LEX section TEST" ), DEF_VAR( 0,HAVELEXS_SET1, lex_sect_set1, "LEX section SET1" ), DEF_VAR( 0,HAVELEXS_CANN, lex_sect_cann, "LEX section CANN" ), @@ -376,7 +376,7 @@ void SetIsLexFeaturesSZS ( features_szs_t *fs ) #if 1 // short cut for code below - fs->f_lex = fs->lex_sect_fea0 = 1; + fs->f_lex = fs->lex_sect_feat = 1; #else // non optimized code const feature_list_t *list; @@ -396,8 +396,8 @@ int GetFeaturesStatusSZS ( const features_szs_t *fs ) { // returns // 0: all features set to null - // 1: all features except f_lex + lex_sect_fea0 are set to null - // 2: any features except f_lex + lex_sect_fea0 is not NULL + // 1: all features except f_lex + lex_sect_feat are set to null + // 2: any features except f_lex + lex_sect_feat is not NULL DASSERT(fs); @@ -407,7 +407,7 @@ int GetFeaturesStatusSZS ( const features_szs_t *fs ) return 0; temp.f_lex = fs->f_lex; - temp.lex_sect_fea0 = fs->lex_sect_fea0; + temp.lex_sect_feat = fs->lex_sect_feat; return memcmp(&temp,fs,sizeof(temp)) ? 2 : 1; } @@ -419,6 +419,7 @@ void PrintFeaturesSZS const features_szs_t *fs, // valid source bool is_lex, // TRUE: Create output for a LEX file int comments, // >0: add extended comments + int print_options, // >0: print options as additional bits int print_modes, // >0: append ",MODES" u8 include, // print only if all bits match u8 exclude // exclude if any bit match @@ -436,7 +437,7 @@ void PrintFeaturesSZS "# %u: feature found with impact to game play.\n", FZV_UNDEF, FZV_NO_IMPACT, FZV_MAYBE_IMPACT, FZV_IMPACT ); - if ( comments >= 1 ) + if ( print_options > 0 ) PrintScriptVars(ps,0, "#\n" "# If value is %u, then some additional bits may be set:\n" @@ -472,9 +473,7 @@ void PrintFeaturesSZS const u8 value = ((u8*)fs)[var->offset]; if ( value || comments >= -2 ) { - if ( head_mode == 1 ) - fputc('\n',ps->f); - else if ( head_mode == 2 ) + if ( head_mode == 2 ) { const int hlen1 = strlen(list->heading1); const int hlen2 = list->heading2 ? strlen(list->heading2) : 0; @@ -496,11 +495,11 @@ void PrintFeaturesSZS PrintScriptVars(ps,0,"# %s\n",var->comment); ccp effect = GetFeaturesEffects(mode); if (effect) - PrintScriptVars(ps,0,"# %s\n",effect); + PrintScriptVars(ps,0,"# > %s\n",effect); } char valbuf[30]; - if ( value & FZV_M_OPTIONS && !is_lex && comments ) + if ( value & FZV_M_OPTIONS && print_options >0 ) snprintf(valbuf,sizeof(valbuf),"0x%02x",value); else snprintf(valbuf,sizeof(valbuf),"%u", value & FZV_M_VALUE ); @@ -562,7 +561,7 @@ const features_szs_t * GetFeaturesModes() m.kmp_uncond_oob = FZM_M_TYPE | FZM_M_WHERE; // existence of a section don't have impact to gameplay => see lex attributes - m.lex_sect_fea0 = FZM_SECTION; + m.lex_sect_feat = FZM_SECTION; m.lex_sect_test = FZM_VISUAL | FZM_GAMEPLAY | FZM_M_TYPE | no_timetrial | FZM_SECTION; m.lex_sect_set1 = FZM_GAMEPLAY | FZM_M_TYPE | FZM_ONLINE | FZM_SECTION; m.lex_sect_cann = FZM_GAMEPLAY | FZM_M_TYPE | FZM_M_WHERE | FZM_SECTION; @@ -947,7 +946,7 @@ static uint GetLexSortOrder ( u32 magic ) { switch(magic) { - case LEXS_FEA0: return 1; + case LEXS_FEAT: return 1; case LEXS_SET1: return 2; case LEXS_TEST: return 9; default: return 5; @@ -1038,7 +1037,7 @@ static lex_item_t * AppendElementLEX switch(magic) { - case LEXS_FEA0: + case LEXS_FEAT: if ( size4 < sizeof(features_szs_t) ) size4 = ALIGN32(sizeof(features_szs_t),4); break; @@ -1264,7 +1263,7 @@ const have_lex_info_t have_lex_sect_info[HAVELEXS__N] = { LEXS_CANN, "cannon", 0 }, // HAVELEXS_CANN { LEXS_TEST, "test", 1 }, // HAVELEXS_TEST { LEXS_HIPT, "hidepos", sizeof(lex_hipt_rule_t) }, // HAVELEXS_HIPT - { LEXS_FEA0, "features", 2 }, // HAVELEXS_FEA0 + { LEXS_FEAT, "features", 2 }, // HAVELEXS_FEAT //--- add new sections here (order is important) }; @@ -1334,8 +1333,8 @@ void UpdateLEX ( lex_t * lex, bool add_missing, bool add_test ) if ( add_missing && lex->develop ) { - //--- FEA0 - AppendFea0LEX(lex,false,0); + //--- FEAT + AppendFeatLEX(lex,false,0); } if (add_missing) @@ -1358,7 +1357,7 @@ void UpdateLEX ( lex_t * lex, bool add_missing, bool add_test ) //----------------------------------------------------------------------------- -lex_item_t * AppendFea0LEX +lex_item_t * AppendFeatLEX ( lex_t * lex, bool overwrite, const features_szs_t *src_fs ) { features_szs_t fs; @@ -1368,7 +1367,7 @@ lex_item_t * AppendFea0LEX InitializeFeaturesSZS(&fs); SetIsLexFeaturesSZS(&fs); - return AppendElementLEX(lex,LEXS_FEA0,&fs,sizeof(fs),overwrite); + return AppendElementLEX(lex,LEXS_FEAT,&fs,sizeof(fs),overwrite); } //----------------------------------------------------------------------------- @@ -1569,9 +1568,9 @@ enumError ScanRawLEX if ( IsValidLEX(data,data_size,data_size,lex->fname) >= VALID_ERROR ) { return ERROR0(ERR_INVALID_DATA, - "Invalid LEX file: %s\n" + "Invalid LEX file (size %u): %s\n" "Add option --lex=force or --force to ignore some validity checks.", - lex->fname ? lex->fname : "?" ); + data_size, lex->fname ? lex->fname : "?" ); } lex->fform = FF_LEX; @@ -2260,7 +2259,7 @@ enumError SaveRawLEX /////////////// SaveTextLEX() /////////////// /////////////////////////////////////////////////////////////////////////////// -static enumError SaveTextLEX_FEA0 +static enumError SaveTextLEX_FEAT ( FILE * f, // file to write const lex_t * lex, // pointer to valid LEX @@ -2285,7 +2284,16 @@ static enumError SaveTextLEX_FEA0 ps.f = f; ps.fform = PSFF_ASSIGN; ps.force_case = LOUP_UPPER; - PrintFeaturesSZS(&ps,fs,true,1,0,0,0); + int comments = -1; + + if (!brief_count) + { + comments = 1; + ps.ena_empty = true; + ps.ena_comments = true; + ps.boc = "#"; + } + PrintFeaturesSZS(&ps,fs,true,comments,0,0,0,0); ResetPrintScript(&ps); uint data_size = ntohs(fs->size_be); @@ -2557,7 +2565,7 @@ enumError SaveTextLEX enumError err = ERR_OK; switch(magic) { - case LEXS_FEA0: err = SaveTextLEX_FEA0(F.f,lex,s); break; + case LEXS_FEAT: err = SaveTextLEX_FEAT(F.f,lex,s); break; case LEXS_SET1: err = SaveTextLEX_SET1(F.f,lex,s); break; case LEXS_CANN: err = SaveTextLEX_CANN(F.f,lex,s); break; case LEXS_HIPT: err = SaveTextLEX_HIPT(F.f,lex,s); break; @@ -2883,7 +2891,7 @@ bool PatchFeaturesLEX ( lex_t * lex, const szs_have_t *have, bool *empty ) SetupFeaturesSZS(&fs,have,true); const bool need_features = GetFeaturesStatusSZS(&fs) > 1; - lex_item_t *li = FindElementLEX(lex,LEXS_FEA0); + lex_item_t *li = FindElementLEX(lex,LEXS_FEAT); const bool have_features = li != 0; PRINT("--lex-features = %d, --lex-rm-features = %d : have=%d, need=%d\n", @@ -2891,7 +2899,7 @@ bool PatchFeaturesLEX ( lex_t * lex, const szs_have_t *have, bool *empty ) bool modified = false; if ( opt_lex_rm_features && RemoveElementByMagicLEX(lex,LEXS_FEAT) ) - modified = true; // FEA0 + modified = true; // FEAT if ( have_features && !need_features ) { @@ -2902,7 +2910,7 @@ bool PatchFeaturesLEX ( lex_t * lex, const szs_have_t *have, bool *empty ) && need_features && ( !have_features || memcmp(&fs,li->elem.data,sizeof(fs)) )) { - AppendFea0LEX(lex,true,&fs); + AppendFeatLEX(lex,true,&fs); modified = true; } @@ -2957,7 +2965,7 @@ bool PatchLEX ( lex_t * lex, const szs_have_t *have ) } - //--- section FEA0 + //--- section FEAT if ( HavePatchFeaturesLEX() && have && have->valid ) { @@ -3002,7 +3010,7 @@ bool PurgeLEX ( lex_t * lex ) bool remove = false; switch(ntohl((*ss)->elem.magic)) { - case LEXS_FEA0: + case LEXS_FEAT: remove = GetFeaturesStatusSZS((features_szs_t*)data) < 2; break; diff --git a/project/src/lib-lex.h b/project/src/lib-lex.h index da54ab3..b1c4973 100644 --- a/project/src/lib-lex.h +++ b/project/src/lib-lex.h @@ -95,7 +95,7 @@ typedef struct features_szs_t //--- LEX sections (initial list) - u8 lex_sect_fea0; // HAVELEXS_FEA0 + u8 lex_sect_feat; // HAVELEXS_FEAT u8 lex_sect_test; // HAVELEXS_TEST u8 lex_sect_set1; // HAVELEXS_SET1 u8 lex_sect_cann; // HAVELEXS_CANN @@ -125,8 +125,8 @@ void SetIsLexFeaturesSZS ( features_szs_t *fs ); int GetFeaturesStatusSZS ( const features_szs_t *fs ); // returns // 0: all features set to null - // 1: all features except f_lex + lex_sect_fea0 are set to null - // 2: any features except f_lex + lex_sect_fea0 is not NULL + // 1: all features except f_lex + lex_sect_feat are set to null + // 2: any features except f_lex + lex_sect_feat is not NULL void PrintFeaturesSZS ( @@ -134,6 +134,7 @@ void PrintFeaturesSZS const features_szs_t *fs, // valid source bool is_lex, // TRUE: Create output for a LEX file int comments, // >0: add extended comments + int print_options, // >0: print options as additional bits int print_modes, // >0: append ",MODES" u8 include, // print only if all bits match u8 exclude // exclude if any bit match @@ -202,8 +203,8 @@ const features_szs_t * GetFeaturesModes(); typedef struct check_features_szs_t { - bool have_features; // true: szs has LEX/FEA0 section - bool need_features; // true: szs needs a LEX/FEA0 section + bool have_features; // true: szs has LEX/FEAT section + bool need_features; // true: szs needs a LEX/FEAT section bool wrong_features; // true: 'current' and 'correct' differ features_szs_t current; // current features @@ -239,7 +240,7 @@ typedef enum have_lex_sect_t HAVELEXS_CANN, HAVELEXS_TEST, HAVELEXS_HIPT, - HAVELEXS_FEA0, + HAVELEXS_FEAT, //--- add new elements here (order is important) HAVELEXS__N } @@ -269,7 +270,6 @@ typedef enum lex_stream_id LEXS_TERMINATE = 0, // terminate stream LEXS_IGNORE = 0x2d2d2d2d, // "----" ignore and remove - LEXS_FEA0 = 0x46454130, // "FEA0" features LEXS_FEAT = 0x46454154, // "FEAT" features LEXS_SET1 = 0x53455431, // "SET1" primary settings LEXS_CANN = 0x43414e4e, // "CANN" cannon settings @@ -431,7 +431,7 @@ void InitializeLEX ( lex_t * lex ); void ResetLEX ( lex_t * lex ); void UpdateLEX ( lex_t * lex, bool add_missing, bool add_test ); -lex_item_t * AppendFea0LEX ( lex_t * lex, bool overwrite, const features_szs_t *src_fs ); +lex_item_t * AppendFeatLEX ( lex_t * lex, bool overwrite, const features_szs_t *src_fs ); lex_item_t * AppendSet1LEX ( lex_t * lex, bool overwrite ); lex_item_t * AppendCannLEX ( lex_t * lex, bool overwrite ); lex_item_t * AppendHiptLEX ( lex_t * lex, bool overwrite ); diff --git a/project/src/lib-std.c b/project/src/lib-std.c index 1059810..62c70c2 100644 --- a/project/src/lib-std.c +++ b/project/src/lib-std.c @@ -81,6 +81,7 @@ ccp std_share_path = 0; ccp share_path = 0; volatile int verbose = 0; volatile int logging = 0; +volatile int ext_errors = 0; volatile int log_timing = 0; bool allow_all = false; char escape_char = '%'; @@ -509,13 +510,21 @@ void SetupLib ( int argc, char ** argv, ccp tname, ccp tvers, ccp ttitle ) /////////////////////////////////////////////////////////////////////////////// +enumError CheckEnvOptions2 ( ccp varname, check_opt_func func ) +{ + const enumError err = CheckEnvOptions("WIIMMS_SZS_TOOLS",func); + return err ? err : CheckEnvOptions(varname,func); +} + +/////////////////////////////////////////////////////////////////////////////// + void NormalizeOptions ( uint log_level // >0: print PROGRAM_NAME and pathes ) { SetupColors(); - ProgInfo.error_level = logging > 0 ? ERRLEV_EXTENDED : ERRLEV_HEADING; + ProgInfo.error_level = logging > 0 || ext_errors ? ERRLEV_EXTENDED : ERRLEV_HEADING; //--- load configuration diff --git a/project/src/lib-std.h b/project/src/lib-std.h index 599a25c..8a6ca3a 100644 --- a/project/src/lib-std.h +++ b/project/src/lib-std.h @@ -118,6 +118,9 @@ void LogSHA1 ( ccp func, ccp file, uint line, cvp data, uint size, ccp info ); void SetupColors(); void SetupLib ( int argc, char ** argv, ccp tname, ccp tvers, ccp ttitle ); +typedef enumError (*check_opt_func) ( int argc, char ** argv, bool mode ); +enumError CheckEnvOptions2 ( ccp varname, check_opt_func func ); + void NormalizeOptions ( uint log_level // >0: print PROGRAM_NAME and pathes @@ -2149,66 +2152,136 @@ enumError SavePrefixTableFN ( ccp fname, const mkw_prefix_t * tab ); /////////////////////////////////////////////////////////////////////////////// // [[split_filename_t]] -#define SUPPORT_SPLIT_SIGN 0 - typedef struct split_filename_t { - mem_t source; // full source without leading directories + mem_t source; // full source without leading directories //--- split source into 3 parts - mem_t f_name; // name part - mem_t f_d; // empty or "_d" - mem_t f_ext; // file extention + mem_t f_name; // %F source name, stripped + mem_t f_d; // %D empty or "_d" + mem_t f_ext; // %E file extention //--- split name into 3 parts - mem_t norm; // normalized name, alloced - - mem_t plus; - #if SUPPORT_SPLIT_SIGN - mem_t sign; - #endif - mem_t boost; - mem_t game1; - mem_t game2; - mem_t game; - mem_t name; - mem_t extra; - mem_t version; - mem_t authors; - mem_t attribs; - + mem_t norm; // %O normalized name, alloced + + mem_t plus; // %P Plus prefix + mem_t boost; // %b boost prefix + mem_t game1; // %g first game prefix + mem_t game2; // %G second game prefix + mem_t game; // %p combined game prefix + mem_t name; // %n name + mem_t extra; // %x extra info + mem_t version; // %v version nummber + mem_t authors; // %a list of authors + mem_t attribs; // %A list of attributes + //--- misc uint plus_order; uint game_order; - uint game_color; + uint game1_color; + uint game2_color; + + u8 lap_count; // %l number of laps, valid if >0.0 + float speed_factor; // %s speed factor, valid if >0.0 ccp input; bool input_alloced; } split_filename_t; -//----------------------------------------------------------------------------- +/////////////////////////////////////////////////////////////////////////////// +// [[print_split_par_t]] + +typedef struct print_split_par_t +{ + ccp format; // format string + ccp plus_mode; // plus mode, only needed by PrintNameSPF() + + u8 lap_count; // number of laps, valid if >0.0 + float speed_factor; // speed factor, valid if >0.0 + + int u_skip_mode; // skip '+': <0:never, 0:if unique, >0: always + int u_skip_count; // number of skipped tags + bool u_use_list; // true: use 'u_list' to find multi-used names + exmem_list_t u_list; // list of keywords until first '%+' + exmem_key_t *u_item; // last inderted/used element of 'u_list' +} +print_split_par_t; + +/////////////////////////////////////////////////////////////////////////////// extern ccp opt_plus; +extern ccp opt_printf; static inline void InitializeSPF ( split_filename_t *spf ) { DASSERT(spf); memset(spf,0,sizeof(*spf)); } void ResetSPF ( split_filename_t *spf ); + void AnalyseSPF ( - split_filename_t *spf, // valid pointet + split_filename_t *spf, // valid pointer bool init_spf, // true: InitializeSPF(), false: ResetSPF() ccp source, // NULL or ponter to name - ccp src_end, // end of source. if 0 then use strlen() + ccp src_end, // end of source. if 0 then use strlen(). CopyMode_t cpm, // copy mode for 'source' - ccp plus_mode // NULL or string of format '[max][','][chars]' + ccp plus_mode // NULL or priority string ); +//----------------------------------------------------------------------------- + +void ResetPSP ( print_split_par_t *psp ); + +exmem_t PrintSPF +( + exmem_dest_t *dest, // Kind of destination, if NULL then MALLOC() + const split_filename_t + *spf, // Valid and initialized source + print_split_par_t *par // valid struct with parameters +); + +exmem_t PrintNameSPF +( + exmem_dest_t *dest, // Kind of destination, if NULL then MALLOC() + ccp source, // NULL or pointer to name to analyze + ccp src_end, // End of source. If 0 then use strlen(). + print_split_par_t *par // valid struct with parameters +); + +// Convertion types in alphabertic order: +// +// %a authors, list of authors, format "(authors)", options=0, curly braces +// %A attribs, list of attributes, format "(authors)", options=0 +// %b boost, boost prefix +// %D f_d, empty or "_d" +// %e extra, extra info, format "(extra)", options=0, curly braces +// %E f_ext, file extention, format ".ext", options=0 +// %g game1, first game prefix +// %G game2, second game prefix +// %F f_name, file name, stripped +// %l lap_count +// %L LOTTERY ALIAS +// %n name, name +// %N NAME ALIAS for plus+boost+pre+name +// %O norm, normalized file name, alloced +// %p game, combined game prefix +// %P plus, plus prefix +// %R RACE ALIAS +// %s speed_factor +// %v version, version nummber + +// Format options: +// '-' align left +// ' ' add leading space if not empty +// '0' leading space +// '!' suppress braces +// '({[<' force a kind of braces +// 'c' insert color escape if known + // /////////////////////////////////////////////////////////////////////////////// /////////////// output_mode_t /////////////// @@ -2420,6 +2493,7 @@ extern ccp std_share_path; extern ccp share_path; extern volatile int verbose; extern volatile int logging; +extern volatile int ext_errors; extern volatile int log_timing; extern bool allow_all; extern char escape_char; diff --git a/project/src/lib-szs-create.c b/project/src/lib-szs-create.c index 8d394b7..d268a44 100644 --- a/project/src/lib-szs-create.c +++ b/project/src/lib-szs-create.c @@ -1727,10 +1727,15 @@ static int add_missing_file InitializeLEX(&lex); if ( PatchLEX(&lex,&am->szs->have) && CreateRawLEX(&lex) == ERR_OK ) size = lex.raw_data_size; + PRINT0("LEX size=%lld\n",size); } szs_subfile_t *file = 0; - if (am->sd) + if (!size) + { + // [[2do]] maybe remove "course.lex" from list + } + else if (am->sd) { file = AppendSubfileSZS(am->szs,0,0); DASSERT(file); @@ -1891,6 +1896,7 @@ void AddSectionsLEX ( szs_file_t *szs, szs_norm_t *norm, const szs_have_t * have { features_szs_t fs; SetupFeaturesSZS(&fs,have,true); + //PRINT1("GetFeaturesStatusSZS()=%d\n",GetFeaturesStatusSZS(&fs)); if ( GetFeaturesStatusSZS(&fs) > 1 ) add_course_lex = true; ResetFeaturesSZS(&fs); @@ -2549,7 +2555,7 @@ static int transform_collect_func break; case FF_LEX: - if ( !szs->allow_ext_data || !HavePatchTestLEX()) + if ( !szs->allow_ext_data || !HavePatchLEX() ) { PRINT("### Patch/NOT LEX: %s\n",it->name); break; @@ -2670,7 +2676,10 @@ bool PatchSZS ( szs_file_t * szs ) if ( szs->data && szs->size ) { if (patch_lex) + { + CalcHaveSZS(szs); dirty |= NormalizeExSZS(szs,0,0,0); + } if ( have_patch_count > 0 || opt_lex_purge ) { @@ -2704,7 +2713,10 @@ void CalcHaveSZS ( szs_file_t * szs ) { szs_file_t temp; CopySZS(&temp,true,szs); + analyse_szs_t as; + AnalyseSZS(&as,true,&temp,temp.fname); szs->have = temp.have; + ResetAnalyseSZS(&as); ResetSZS(&temp); } } diff --git a/project/src/lib-szs.h b/project/src/lib-szs.h index 834b4e0..3223e89 100644 --- a/project/src/lib-szs.h +++ b/project/src/lib-szs.h @@ -58,6 +58,7 @@ #include "lib-checksum.h" #include "lib-kmp.h" #include "db-mkw.h" +#include "dclib-ui.h" // /////////////////////////////////////////////////////////////////////////////// @@ -484,7 +485,7 @@ typedef enum szs_norm_info_t SZI_AI_PARAM, // A: have AI param SZI_SPEED, // S: have speed KMP/STGI factoe SZI_LAPS, // #: (1-9) KMP/STGI number of laps - SZI_RM_LEX_FEA0, // F: have LEX section FEA0 + SZI_RM_LEX_FEAT, // F: have LEX section FEAT SZI_RM_LEX_TEST, // T: have LEX section TEST SZI__N // number of flags @@ -516,7 +517,7 @@ typedef struct szs_norm_t u8 max_laps; // >0: limit number of laps (KMP/STGI) u8 set_laps; // >0: set number of laps (KMP/STGI) bool rm_lex_test; // remove LEX section TEST - bool manage_lex_fea0; // manage LEX section FEA0: 0:off, 1:remove, 2:auto + bool manage_lex_feat; // manage LEX section FEAT: 0:off, 1:remove, 2:auto bool purge_lex; // purge lex section and remove course.bin if empty //--- for output via PrintNorm() diff --git a/project/src/prefix.inc b/project/src/prefix.inc index 00ea477..333e010 100644 --- a/project/src/prefix.inc +++ b/project/src/prefix.inc @@ -1,81 +1,83 @@ static const u8 prefix_inc_bz2[] = { - // decompressed size: 0x9c1 = 2497 bytes - 0x00,0x00,0x09,0xc1, + // decompressed size: 0x9eb = 2539 bytes + 0x00,0x00,0x09,0xeb, // bzipped data - 0x42,0x5a,0x68,0x39, 0x31,0x41,0x59,0x26, 0x53,0x59,0xb6,0xa4, 0x97,0xb5,0x00,0x00, - 0xe9,0xdf,0x80,0x00, 0x12,0x61,0xef,0x7f, 0xf0,0x3f,0xef,0xdf, 0xf0,0x3f,0xef,0xff, - 0xe4,0x50,0x04,0x3e, 0x64,0xe8,0x6b,0x76, 0xdd,0xbb,0x6d,0xb3, 0x93,0x98,0x68,0x85, - 0x3d,0x34,0xd1,0x3d, 0x13,0x43,0x04,0xda, 0xa3,0x4f,0x28,0xda, 0x69,0x0c,0x80,0x00, - 0x00,0xd0,0x34,0x25, 0x31,0xa6,0x4c,0x9a, 0x69,0xa9,0x18,0x01, 0x06,0x80,0x62,0x06, - 0x80,0xd0,0x68,0x01, 0xa0,0x9a,0x14,0xf4, 0x29,0x93,0xf4,0xd5, 0x07,0xa4,0xd0,0x34, - 0x68,0xd0,0x7a,0x80, 0x00,0x68,0x00,0x1c, 0xd3,0x13,0x26,0x4d, 0x18,0x4c,0x13,0x13, - 0x4c,0x02,0x60,0x10, 0xc1,0x18,0x11,0x80, 0x48,0x90,0x99,0x05, 0x32,0x30,0x8d,0x35, - 0x3d,0x02,0x81,0xb5, 0x06,0xd4,0x1b,0x21, 0x91,0xa9,0xed,0x0a, 0x1e,0xa3,0x04,0x83, - 0xd8,0x12,0x0f,0x4f, 0x8f,0x1f,0xcf,0x62, 0xf3,0xa7,0x6b,0xfb, 0x7b,0x6f,0x95,0x62, - 0x02,0x47,0x86,0x11, 0x59,0xfa,0xdf,0x33, 0x67,0x8d,0x76,0x56, 0xec,0x0f,0x49,0x5b, - 0xa3,0xef,0xe0,0xac, 0x11,0x79,0xe9,0xbf, 0xca,0x78,0x97,0xe8, 0xad,0xaf,0xf3,0xe2, - 0xc6,0xc9,0x43,0x41, 0x6c,0x19,0x85,0xa9, 0x64,0xa1,0x96,0x5c, 0x29,0xaa,0x08,0x49, - 0x5d,0x5d,0xf5,0xbd, 0xcf,0xab,0x70,0xba, 0xf6,0x09,0xee,0xb5, 0x20,0x31,0xc4,0xda, - 0xa9,0x4d,0x01,0xf3, 0x15,0xc8,0x3f,0x73, 0xc9,0x91,0xd5,0x34, 0x61,0x38,0xae,0x29, - 0x4c,0x66,0xf2,0x7b, 0xb3,0xb6,0x39,0xc7, 0x8d,0x87,0x28,0xdc, 0x05,0xfd,0xea,0xc2, - 0x3f,0x62,0xa6,0xbd, 0x2f,0xcb,0x8f,0x7b, 0x61,0x51,0xab,0x40, 0x07,0xac,0x81,0x28, - 0xfb,0x69,0x5c,0xdd, 0xda,0x68,0x09,0xfd, 0x6c,0xa5,0x72,0x45, 0x55,0x7b,0xed,0x65, - 0x72,0xfd,0xfb,0x0b, 0xc5,0xa0,0x73,0xee, 0x1b,0x6d,0x26,0x21, 0x2b,0xb0,0xc7,0x28, - 0x72,0x93,0x3b,0xa8, 0x44,0x44,0x28,0x85, 0x3e,0x89,0xc9,0x09, 0x29,0xfb,0xe0,0xf9, - 0x31,0x82,0x49,0x9b, 0x35,0x59,0xa8,0x2e, 0x34,0xc9,0x6d,0x89, 0x3c,0x00,0x56,0x6c, - 0xe1,0x84,0x35,0x17, 0xc1,0x51,0xe0,0x42, 0xe3,0x41,0x16,0x65, 0x41,0x0f,0x4d,0x0c, - 0xe2,0x85,0x58,0xdb, 0x4f,0xd7,0x6f,0x7d, 0xc6,0x8a,0x99,0x9e, 0xdf,0x73,0x8e,0x3c, - 0xb1,0xd8,0xca,0x7d, 0x60,0x33,0x26,0x1c, 0xfa,0x8e,0x23,0x75, 0x16,0xac,0x9b,0x51, - 0x55,0xe7,0x9e,0x65, 0xfe,0x25,0x24,0xc2, 0x7a,0x21,0x32,0xe3, 0xca,0x43,0xdf,0x3e, - 0x37,0x75,0x65,0xb2, 0x45,0x40,0xe4,0x60, 0xb2,0x66,0x6c,0xd6, 0x9b,0x26,0x41,0xf1, - 0xa0,0x96,0x01,0xc2, 0xcb,0xaf,0x64,0x34, 0x3e,0x5e,0x4e,0x4c, 0xb1,0x46,0x22,0x4c, - 0x69,0x8d,0xa7,0x99, 0xa2,0xd6,0xd5,0x21, 0x27,0x41,0xe7,0x25, 0x22,0x96,0xc7,0x86, - 0xe8,0x53,0xb5,0x6b, 0xb5,0x8a,0xeb,0xed, 0xa7,0xdf,0x6b,0xfd, 0x59,0x62,0x22,0x61, - 0x91,0x9a,0xef,0x5e, 0x93,0x46,0x3b,0x0e, 0x6d,0x88,0xf5,0xbb, 0xe4,0xe8,0x0e,0x4a, - 0xc1,0xa0,0x2b,0x4c, 0x81,0x5a,0xda,0x54, 0x14,0x75,0x88,0x3f, 0x84,0x40,0xc4,0xdb, - 0x1b,0xd7,0x10,0xdb, 0x11,0xbd,0x64,0x2e, 0x6b,0x5f,0x23,0x5e, 0x06,0x9e,0x23,0x0c, - 0x18,0xd3,0x26,0xd2, 0x4f,0x7e,0x7c,0xe5, 0x2b,0x61,0x13,0x89, 0xcd,0xfb,0x6b,0x3c, - 0x54,0x88,0x08,0x64, 0xe8,0x81,0x94,0x94, 0x28,0x13,0x6a,0xf2, 0x58,0xd8,0xc1,0xc2, - 0xa2,0x5e,0x8e,0x93, 0xd6,0x6c,0x71,0x02, 0x45,0xdb,0x53,0x4a, 0xa8,0x97,0x36,0x90, - 0xcd,0x66,0xc3,0xdf, 0x70,0xb2,0x5e,0xe8, 0xe8,0x37,0x21,0x52, 0x85,0xbf,0x7c,0xcb, - 0x00,0x15,0x59,0xf4, 0x80,0x56,0xca,0x16, 0x59,0x2b,0xae,0xe0, 0x95,0xee,0xff,0xe4, - 0xaf,0xb5,0xa5,0xf3, 0x33,0x53,0x31,0x75, 0xb5,0x8b,0xb6,0x3a, 0xf9,0xe4,0x6d,0x7c, - 0x29,0x84,0x24,0x70, 0x82,0x1b,0x56,0x60, 0xc3,0x9d,0xba,0xe5, 0x53,0xca,0x26,0xfc, - 0x35,0xa0,0xed,0x53, 0x91,0x8d,0x8d,0xa5, 0xc6,0x1a,0x3a,0x35, 0x36,0x6d,0xbe,0xf1, - 0xf8,0xc6,0xe6,0x9c, 0xc3,0x18,0x2e,0x18, 0x21,0xb7,0x0a,0x77, 0x6d,0x68,0xd6,0x79, - 0x85,0x8b,0xb5,0x57, 0xb1,0x3b,0xae,0x70, 0x1a,0xea,0x29,0xb3, 0x10,0xbe,0xc0,0xd0, - 0xa2,0xdc,0xcc,0x9b, 0x72,0x09,0x74,0xb9, 0x01,0x8a,0x30,0x5d, 0x1e,0xe5,0x2d,0x65, - 0xb3,0xb5,0x0c,0x38, 0x2c,0x2e,0xad,0xda, 0x7e,0xea,0x2e,0x2d, 0xdc,0x37,0x5e,0x44, - 0x2e,0x9d,0x72,0xb9, 0xe1,0xbe,0x46,0x19, 0xc5,0x06,0x70,0x41, 0x42,0xa3,0x04,0x43, - 0x3d,0xd9,0x35,0x70, 0x49,0x29,0x3d,0xb9, 0x6f,0x9d,0x71,0xd4, 0x4b,0x40,0xbf,0x88, - 0xc9,0x47,0x62,0xb2, 0x22,0x0e,0x49,0xf2, 0x85,0x65,0xce,0x8c, 0x8b,0x15,0x23,0x14, - 0x60,0x4d,0x2e,0x5b, 0x84,0xa6,0x16,0xbd, 0x73,0xd1,0x32,0x1b, 0x98,0xa6,0xf5,0xc0, - 0x50,0xb8,0x6e,0x08, 0x74,0xca,0x14,0xd3, 0x72,0x80,0x20,0x44, 0xfa,0xef,0xa4,0xf1, - 0xa1,0x0c,0x91,0x29, 0x36,0x5c,0x22,0x30, 0x40,0x19,0x90,0x3c, 0x0d,0x91,0xe1,0x22, - 0xb9,0x81,0xec,0x54, 0x34,0x36,0xc0,0x8c, 0x25,0x05,0x3d,0xe3, 0x56,0x94,0xc2,0x8e, - 0x4d,0x0b,0xaf,0x8d, 0xa1,0x70,0x8b,0x74, 0x6a,0x32,0xc9,0x36, 0x08,0x60,0x00,0xa2, - 0x84,0x66,0x11,0x40, 0xcc,0x10,0x96,0x14, 0x51,0x9d,0x89,0x4b, 0x59,0x86,0xe9,0x4b, - 0x7d,0xb9,0x0e,0xaa, 0x9f,0x64,0x64,0x62, 0x5f,0x4e,0x96,0x02, 0x6f,0x94,0xa1,0x9f, - 0xfa,0x82,0x32,0x82, 0x8d,0x80,0x37,0x41, 0x89,0xdf,0x26,0x7a, 0xea,0x66,0xa8,0xb4, - 0x99,0x76,0x88,0x39, 0xf6,0x60,0x89,0x9c, 0xb7,0xe3,0xc0,0xe9, 0x73,0xc7,0xaa,0x7b, - 0x5f,0x5e,0x5a,0xfc, 0x4a,0x8b,0x3b,0xfd, 0x1a,0x53,0x6b,0x76, 0x25,0x2d,0x39,0x35, - 0x4e,0x65,0x38,0x1d, 0x8a,0x81,0xe8,0x4c, 0x66,0x6a,0xf4,0x0b, 0xfd,0x29,0x67,0xbf, - 0x8a,0x8e,0xe5,0x64, 0x00,0x9f,0xc8,0x7b, 0x96,0x84,0x2a,0xb1, 0x50,0x97,0x2c,0x49, - 0xcf,0x7a,0x00,0x77, 0xa8,0xe3,0xa0,0x4b, 0x64,0xa7,0x74,0x57, 0x3e,0x46,0x74,0x21, - 0x82,0x0e,0xef,0xf3, 0x20,0x5f,0xa6,0x07, 0xd6,0x88,0x47,0x8d, 0x20,0x5f,0xe4,0x43, - 0x60,0x8f,0x26,0xa9, 0x28,0x6e,0x90,0xe1, 0x43,0x6e,0x23,0xca, 0x37,0xd6,0xca,0xa9, - 0x4f,0x6d,0xe4,0x49, 0xb4,0x09,0x31,0x1e, 0x22,0x12,0xc0,0x3f, 0x2b,0x97,0xc3,0xb6, - 0x03,0x2e,0xce,0xef, 0x09,0xae,0x57,0x4e, 0x6c,0xf8,0x1f,0xc4, 0xbd,0xba,0x7f,0x3e, - 0xae,0xff,0x0e,0xd6, 0xcf,0x0a,0x4e,0xc7, 0xdc,0xd9,0x0f,0xf8, 0xed,0x49,0xfd,0xb1, - 0xc1,0x60,0x49,0x96, 0x7d,0x94,0xa4,0x66, 0xaf,0x43,0xd7,0x4f, 0xa5,0x4f,0x92,0x68, - 0x3c,0x52,0xb3,0x4c, 0x3e,0x0a,0xa5,0xde, 0x71,0xcd,0xb5,0x0a, 0x6d,0x45,0x45,0x7d, - 0xf5,0xee,0x29,0x8c, 0x6e,0xe5,0x46,0x26, 0x40,0xcc,0x5d,0x8b, 0xb6,0xd8,0xf8,0x6d, - 0x89,0xc2,0x23,0x7e, 0x3a,0x4e,0xac,0x63, 0x22,0x6a,0xbe,0x4f, 0x07,0x28,0x61,0x65, - 0x10,0x6a,0x87,0xf8, 0xbb,0x92,0x29,0xc2, 0x84,0x85,0xb5,0x24, 0xbd,0xa8, - // 0x45e = 1118 data bytes (45%) + 0x42,0x5a,0x68,0x39, 0x31,0x41,0x59,0x26, 0x53,0x59,0x1a,0x48, 0x97,0x32,0x00,0x00, + 0xee,0xdf,0x80,0x00, 0x12,0x61,0xef,0x7f, 0xf0,0x3f,0xef,0xdf, 0xf0,0x3f,0xef,0xff, + 0xe4,0x50,0x04,0x3e, 0xee,0x66,0xa8,0x3a, 0xdb,0x49,0x4c,0x59, 0x86,0x88,0x4d,0x13, + 0xd1,0x34,0xf5,0x34, 0xd1,0xa6,0x04,0x69, 0xa4,0xc4,0x68,0xf4, 0x21,0x91,0x91,0xa0, + 0x06,0x84,0x42,0x8c, 0x9e,0x81,0xea,0x66, 0xa9,0xa6,0x80,0xd0, 0xd0,0x00,0x34,0x00, + 0x1a,0x06,0x80,0x1a, 0x68,0x21,0x4f,0x22, 0xa7,0x83,0x52,0x36, 0x8d,0x27,0xa8,0xfd, + 0x51,0xa3,0xd4,0xd1, 0xea,0x00,0xc8,0x36, 0xa7,0xa3,0x50,0x07, 0x34,0xc4,0xc9,0x93, + 0x46,0x13,0x04,0xc4, 0xd3,0x00,0x98,0x04, 0x30,0x46,0x04,0x60, 0x12,0x24,0x8d,0x32, + 0x69,0x04,0xda,0x26, 0x22,0x9f,0xa5,0x3d, 0x20,0x78,0xa0,0xc8, 0x69,0xe4,0x9a,0x6c, + 0xa3,0xd2,0x7a,0x87, 0xa8,0xd0,0x90,0x7a, 0xa1,0x20,0xfe,0xfd, 0xfc,0xff,0x0f,0x0e, + 0x2b,0xe7,0x3e,0xf7, 0xe3,0xeb,0xe7,0x2a, 0x44,0x22,0x45,0x31, 0x8c,0x2e,0xf4,0xad, + 0xc7,0x0f,0x2c,0x38, 0x61,0x2a,0x8e,0x2d, 0x4d,0x9e,0x6b,0xe6, 0xb9,0x8b,0x54,0x71, + 0xee,0xe0,0xf7,0x0a, 0xe9,0x9d,0x2b,0xdf, 0xa2,0xd4,0x00,0x29, 0x40,0x29,0x52,0x2b, + 0x48,0xa2,0x22,0x9c, 0x12,0x95,0xb4,0xea, 0xd0,0x64,0x29,0xdd, 0xcf,0x8b,0xc2,0xec, + 0xc1,0x08,0xb6,0x0c, 0xc2,0xe2,0x14,0x11, 0x11,0xdc,0x9d,0x49, 0x85,0x07,0x92,0x4c, + 0x00,0x33,0x09,0x9b, 0x29,0x18,0x25,0x32, 0x0f,0x92,0x1a,0x26, 0x39,0x0b,0xd1,0xb8, + 0x51,0x87,0x15,0x9e, 0x02,0x9e,0x63,0x7e, 0x95,0xb0,0x03,0xf6, 0x33,0x4f,0xe8,0x1b, + 0x51,0x43,0xbc,0xd4, 0x24,0xc0,0x03,0xfc, 0xd0,0x25,0x1e,0x39, 0xae,0x5d,0xf9,0xde, + 0x84,0xfe,0x54,0x09, 0x4d,0x23,0x05,0x87, 0xc6,0x94,0x53,0x5e, 0xef,0x69,0x51,0x6c, + 0x1d,0xdd,0xe3,0x6d, 0xa4,0xc4,0x25,0x3c, 0x6d,0x94,0x39,0x49, 0x9d,0xf7,0x91,0x11, + 0x01,0x10,0x17,0x7d, 0x37,0x49,0x09,0x2b, 0xbb,0x20,0xf0,0x60, 0x80,0x88,0x91,0x1d, + 0x36,0xe9,0xc0,0x6a, 0x2b,0xaf,0x4d,0xeb, 0xa3,0x20,0x17,0x18, 0x71,0x94,0x46,0x0d, + 0xf5,0x65,0x90,0x13, 0xd4,0x54,0x52,0x21, 0xa0,0xc3,0xc7,0xca, 0xfb,0x8b,0xcc,0x18, + 0xdb,0x4f,0xd3,0xa3, 0xe3,0x33,0x66,0x06, 0x97,0xd1,0xd2,0xe3, 0x9f,0x2b,0x70,0x65, + 0xff,0x28,0x46,0x94, 0xc3,0xab,0x68,0xce, 0x35,0xc2,0x61,0x71, 0x28,0xb3,0x4e,0xfc, + 0xae,0x32,0x6f,0x10, 0xc4,0x07,0xd0,0xa8, 0x44,0x87,0x06,0x07, 0xb9,0xfc,0x26,0x53, + 0x6e,0x56,0x13,0x40, 0xde,0xc1,0x64,0xcd, 0x3a,0x69,0x73,0x2e, 0x20,0xf7,0xde,0x25, + 0x88,0x6b,0x64,0xea, 0xc8,0x68,0x7c,0x77, 0xef,0xca,0xc8,0xb2, 0x49,0x8d,0x31,0xb4, + 0xf1,0xd3,0x08,0xad, 0x76,0xc9,0x24,0xe6, 0x3d,0x44,0xa4,0x5f, 0x5c,0xb5,0xce,0x15, + 0xd4,0xc3,0x0e,0x86, 0x29,0xd6,0x99,0xf6, 0x52,0xbe,0x8c,0xa2, 0x4b,0x16,0x9b,0xa7, + 0x0e,0x1a,0xec,0x72, 0xe6,0x77,0xf8,0x46, 0x9a,0x68,0xf9,0xbc, 0x0d,0x11,0xa8,0x70, + 0x2c,0xda,0x16,0x76, 0xac,0x89,0x33,0x51, 0xad,0xfe,0x51,0x03, 0x13,0x6c,0x6f,0x74, + 0x43,0x6c,0x47,0x9a, 0xeb,0xd0,0x2e,0xaa, 0xe3,0x23,0x9e,0xc6, 0xdd,0x85,0xac,0xc6, + 0x99,0x73,0x51,0x9f, 0xd9,0x9f,0xb9,0x63, 0xb7,0x0a,0x3a,0x3c, 0xe7,0xd7,0x2c,0xf5, + 0xee,0xa0,0x43,0x57, 0x50,0x33,0x52,0x24, 0x18,0xec,0x9c,0x14, 0x29,0xc9,0x81,0xba, + 0xf9,0x27,0x6e,0xe3, 0xd4,0x6f,0x42,0x40, 0x91,0x65,0xa9,0xc6, 0xa9,0x1b,0x1e,0x50, + 0xf6,0xa3,0x78,0xff, 0xac,0x14,0x37,0x84, 0x12,0x1c,0x28,0x53, 0x49,0xf2,0xff,0xb6, + 0x4d,0x02,0xe3,0xab, 0x34,0x06,0x14,0x50, 0xb2,0xc9,0x4e,0x7a, 0x25,0x57,0x5f,0xd0, + 0xc3,0xd6,0x92,0xf8, 0x1a,0x6f,0xd2,0x4e, 0x9b,0x85,0xfb,0x2e, 0xdf,0x1b,0x0e,0x63, + 0x98,0x02,0x10,0x54, 0xce,0x6a,0x62,0xe2, 0x08,0x77,0xf2,0xbb, 0x31,0xc4,0x68,0x96, + 0x5b,0xba,0xd8,0x75, 0xb9,0xb1,0x1a,0xf6, 0x26,0x70,0xe5,0xcf, 0x6c,0x55,0x47,0x6d, + 0xa3,0xf5,0xc6,0x3f, 0x5b,0xa6,0x18,0xc0, 0xa3,0x04,0x39,0xd0, 0x8d,0xfc,0xe0,0x1b, + 0x8e,0xb1,0x7d,0xec, 0x09,0x96,0x9b,0xbd, 0xeb,0x02,0xda,0x30, 0xaf,0x37,0x23,0x8e, + 0x25,0x89,0x2e,0x4c, 0xc9,0xb7,0x20,0x97, 0xb1,0xc8,0x0b,0x23, 0x10,0xeb,0xe9,0x52, + 0xdc,0x53,0x53,0x50, 0xc1,0x75,0xe0,0x59, 0xa5,0xc1,0x63,0x85, 0x7e,0x86,0xaf,0x51, + 0x10,0xcf,0x89,0x6d, 0x86,0x90,0xca,0xcc, 0x3d,0x5b,0xb8,0x41, 0x05,0x09,0x4c,0x88, + 0x86,0x1b,0x2f,0xe8, 0xaa,0xf3,0x40,0xa5, 0x98,0x34,0xe2,0x5c, 0x12,0x92,0xd0,0x25, + 0xa0,0xc9,0x27,0x7d, 0x35,0x21,0x03,0x4a, 0xf2,0x04,0xe4,0xad, 0x0c,0x89,0x89,0x8c, + 0xc3,0xb3,0x22,0xdb, 0xaa,0x7b,0x41,0xb6, 0x66,0x7a,0x6b,0x3a, 0x5f,0x0f,0x45,0x65, + 0x6e,0xd8,0x0b,0xc9, 0x8d,0xc1,0x0e,0xfc, 0xa1,0x5c,0x9b,0x94, 0x01,0x02,0x2e,0xed, + 0xad,0xf7,0x5a,0xf2, 0x19,0x22,0x52,0x6c, 0x99,0x66,0x90,0x36, 0x87,0xdc,0xe9,0x97, + 0x76,0xab,0xbf,0x11, 0xfd,0xf7,0x57,0x7e, 0x3f,0x41,0x1d,0xda, 0xc2,0xc5,0xa4,0x68, + 0xca,0x9b,0x88,0xea, 0x9d,0x73,0x67,0x60, 0x5b,0x62,0x7f,0x46, 0xc3,0x2a,0x9c,0x99, + 0xb3,0x00,0x51,0x20, 0x8c,0xc2,0x12,0x0c, 0xc1,0x08,0xe7,0x42, 0x5b,0xe6,0x8a,0xdb, + 0x1e,0x9d,0xcb,0x6e, 0xfb,0x75,0x3c,0xb2, 0x7e,0xd8,0xc8,0xb1, 0x5b,0xfa,0xda,0x04, + 0xdf,0x12,0xf3,0x57, 0xeb,0x04,0x65,0x05, 0xed,0xa0,0x1b,0xbc, 0x62,0x75,0x93,0x3d, + 0x36,0xb3,0x6c,0x52, 0x4c,0x9e,0xc8,0x3a, 0xb8,0x62,0x8b,0x8e, 0x35,0xb6,0x87,0x7c, + 0xdd,0xbd,0x97,0x74, 0x3e,0xdb,0xb9,0x37, 0x89,0xa2,0x65,0x3d, 0x45,0x11,0xca,0x6b, + 0xcc,0xc0,0x67,0xac, 0x59,0xe1,0x8c,0xcd, 0xec,0xa2,0x4a,0x90, 0x49,0x69,0x28,0x6f, + 0xf5,0x6b,0xb7,0x77, 0xab,0x07,0xf6,0x42, 0x80,0x92,0xf5,0x9f, 0x26,0x90,0xa9,0x7d, + 0xd9,0xb0,0x47,0xc7, 0x20,0x0f,0x39,0x73, 0xb0,0x0b,0xb9,0xc7, 0x57,0x20,0x5b,0x59, + 0x8f,0x35,0x1b,0x6f, 0x44,0x3c,0xe7,0x92, 0x6f,0xd9,0xf8,0x40, 0x9f,0xd2,0x07,0x1d, + 0xea,0x83,0x7c,0x28, 0x4f,0xda,0xa9,0x20, 0x20,0xe0,0x51,0xe1, 0xd8,0x96,0x53,0x0a, + 0x1b,0x71,0x1f,0xd4, 0x79,0xe1,0x40,0xc1, 0x2b,0xba,0x6a,0x44, 0x9b,0x40,0x93,0x46, + 0xc6,0x8f,0x21,0x09, 0x58,0x3b,0x30,0x5d, 0xde,0x28,0x02,0xed, 0xbb,0xf9,0x28,0x9f, + 0x37,0x2a,0xbc,0xc1, 0xbf,0x72,0xba,0x66, 0xd7,0x9b,0x8f,0x2e, 0x0f,0xc9,0x71,0x27, + 0x4d,0x59,0xd8,0xd3, 0xe8,0x76,0x24,0xfe, 0xde,0x84,0x2c,0x85, 0xe8,0xe4,0xed,0x95, + 0x22,0x39,0xe8,0xa9, 0x78,0xfd,0x65,0xaa, 0xf4,0x4e,0xf2,0x4a, 0xcd,0x37,0x38,0xab, + 0x1c,0x34,0xc1,0x16, 0xc4,0x29,0x92,0x94, 0x93,0x79,0xcd,0xb4, 0xa2,0x31,0xb7,0x5a, + 0xc5,0x27,0x48,0xfa, 0x4b,0x1c,0x6e,0xd9, 0x8d,0xbc,0x02,0xc7, 0xa2,0xfe,0x53,0xaa, + 0xf1,0x9d,0xad,0xba, 0xb2,0x06,0xb3,0xcb, 0x0c,0x27,0x16,0x1f, 0xf1,0x77,0x24,0x53, + 0x85,0x09,0x01,0xa4, 0x89,0x73,0x20, + // 0x477 = 1143 data bytes (45%) }; static BZ2Manager_t prefix_inc_mgr diff --git a/project/src/ui/tab-wbmgt.inc b/project/src/ui/tab-wbmgt.inc index 8e38144..717e869 100644 --- a/project/src/ui/tab-wbmgt.inc +++ b/project/src/ui/tab-wbmgt.inc @@ -229,6 +229,9 @@ { T_OPT_GM, "LOGGING", "L|logging", 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", + 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "TIMING", "timing", 0, 0 /* copy of wszst */ }, diff --git a/project/src/ui/tab-wctct.inc b/project/src/ui/tab-wctct.inc index 312a34a..95d3698 100644 --- a/project/src/ui/tab-wctct.inc +++ b/project/src/ui/tab-wctct.inc @@ -216,6 +216,9 @@ { T_OPT_GM, "LOGGING", "L|logging", 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", + 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "TIMING", "timing", 0, 0 /* copy of wszst */ }, diff --git a/project/src/ui/tab-wimgt.inc b/project/src/ui/tab-wimgt.inc index bc5e27e..62844b8 100644 --- a/project/src/ui/tab-wimgt.inc +++ b/project/src/ui/tab-wimgt.inc @@ -186,6 +186,9 @@ { T_OPT_GM, "LOGGING", "L|logging", 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", + 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "TIMING", "timing", 0, 0 /* copy of wszst */ }, diff --git a/project/src/ui/tab-wkclt.inc b/project/src/ui/tab-wkclt.inc index ebeda48..dc00429 100644 --- a/project/src/ui/tab-wkclt.inc +++ b/project/src/ui/tab-wkclt.inc @@ -299,6 +299,9 @@ { T_OPT_GM, "LOGGING", "L|logging", 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", + 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "TIMING", "timing", 0, 0 /* copy of wszst */ }, diff --git a/project/src/ui/tab-wkmpt.inc b/project/src/ui/tab-wkmpt.inc index b647c4d..dc4887c 100644 --- a/project/src/ui/tab-wkmpt.inc +++ b/project/src/ui/tab-wkmpt.inc @@ -283,6 +283,9 @@ { T_OPT_GM, "LOGGING", "L|logging", 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", + 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "TIMING", "timing", 0, 0 /* copy of wszst */ }, diff --git a/project/src/ui/tab-wlect.inc b/project/src/ui/tab-wlect.inc index 3581bef..eb3e181 100644 --- a/project/src/ui/tab-wlect.inc +++ b/project/src/ui/tab-wlect.inc @@ -245,6 +245,9 @@ { T_OPT_GM, "LOGGING", "L|logging", 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", + 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "TIMING", "timing", 0, 0 /* copy of wszst */ }, @@ -413,9 +416,9 @@ "Delete LEX sections without any impact." " This option is executed after all --lt-* options." }, - { H_OPT_G, "LEX_RM_FEAT", "rm-features|rmfeatures|lex-rm-features|lexrmfeatures", + { T_OPT_G, "LEX_RM_FEAT", "rm-features|rmfeatures|lex-rm-features|lexrmfeatures", 0, - "Remove LEX setion FEA0 (features) if exists." + "Remove LEX setion FEAT (features) if exists." " It is executed after --lex-purge." " {--lex-rm-features} is an alternative name." }, @@ -699,7 +702,7 @@ // { T_COPT, "LT_ENGINE", 0,0,0 }, // { T_COPT, "LT_RANDOM", 0,0,0 }, // { T_COPT, "LEX_PURGE", 0,0,0 }, -// { H_COPT, "LEX_RM_FEAT", 0,0,0 }, +// { T_COPT, "LEX_RM_FEAT", 0,0,0 }, //---------- wlect GROUP TRACK_COPY ---------- @@ -918,7 +921,7 @@ { T_COPT, "LT_ENGINE", 0,0,0 }, { T_COPT, "LT_RANDOM", 0,0,0 }, { T_COPT, "LEX_PURGE", 0,0,0 }, - { H_COPT, "LEX_RM_FEAT", 0,0,0 }, + { T_COPT, "LEX_RM_FEAT", 0,0,0 }, { T_SEP_OPT, 0,0,0,0 }, { T_COPT, "LE_DEFINE", 0,0,0 }, { T_COPT, "LOAD_BMG", 0,0,0 }, diff --git a/project/src/ui/tab-wmdlt.inc b/project/src/ui/tab-wmdlt.inc index bb03e3b..5be888e 100644 --- a/project/src/ui/tab-wmdlt.inc +++ b/project/src/ui/tab-wmdlt.inc @@ -209,6 +209,9 @@ { T_OPT_GM, "LOGGING", "L|logging", 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", + 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "TIMING", "timing", 0, 0 /* copy of wszst */ }, diff --git a/project/src/ui/tab-wpatt.inc b/project/src/ui/tab-wpatt.inc index aa7b71d..66301b5 100644 --- a/project/src/ui/tab-wpatt.inc +++ b/project/src/ui/tab-wpatt.inc @@ -177,6 +177,9 @@ { T_OPT_GM, "LOGGING", "L|logging", 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", + 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "TIMING", "timing", 0, 0 /* copy of wszst */ }, diff --git a/project/src/ui/tab-wstrt.inc b/project/src/ui/tab-wstrt.inc index d540bcd..223d29c 100644 --- a/project/src/ui/tab-wstrt.inc +++ b/project/src/ui/tab-wstrt.inc @@ -240,6 +240,9 @@ { T_OPT_GM, "LOGGING", "L|logging", 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", + 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "TIMING", "timing", 0, 0 /* copy of wszst */ }, @@ -1011,6 +1014,7 @@ { T_COPT, "FADDR", 0,0,0 }, { T_COPT, "SNAME", 0,0,0 }, { T_COPT, "LOGGING", 0,0,0 }, + { T_COPT, "EXT_ERRORS", 0,0,0 }, { T_COPT, "TIMING", 0,0,0 }, { T_SEP_OPT, 0,0,0,0 }, { T_COPY_GRP, "HEXDUMP", 0,0,0 }, diff --git a/project/src/ui/tab-wszst.inc b/project/src/ui/tab-wszst.inc index 3fbde8d..b9614b3 100644 --- a/project/src/ui/tab-wszst.inc +++ b/project/src/ui/tab-wszst.inc @@ -386,9 +386,12 @@ " Section ENPT is only checked if KCL contains a least one face" " of type force-recalculation." }, - { H_DEF_CMD, "FEATURES", "FEATURES", + { T_DEF_CMD, "FEATURES", "FEATURES", "wszst FEATURES [source]...", - "Analyse track files and create a feature list in machine readable format." }, + "Analyse track files and create a feature list for each source" + " in machine readable format." + " CTGP uses the feature lists to manage ghosts." + " See option {--lex-features} for details." }, { T_DEF_CMD, "DISTRIBUTION", "DISTRIBUTION|DIS|DISTRIB", "wszst DISTRIBUTION result source...\n" @@ -740,12 +743,18 @@ { T_OPT_GM, "LOGGING", "L|logging", 0, "This debug option enables the logging of internal lists and maps." - " Set it up to three times to be more verbose.\n" }, + " Set it up to three times to be more verbose." }, + + { T_OPT_GM, "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", + 0, + "Enable extended error messages. This includes a source file and line reference." + " Logging level 1 activates it too." + " @--xerr@ is a short cut." }, { T_OPT_GM, "TIMING", "timing", 0, "Activate the timing of some operations." - " Logging level 3 activates them too.\n" }, + " Logging level 3 activates them too." }, { T_OPT_GP, "WARN", "W|warn", "list", @@ -819,6 +828,11 @@ " If it is in parameter CHARS then the position determines the value," " otherwise the ASCII value to which 500 is added." }, + { T_OPT_CP, "PRINTF", "printf", + "format", + "Add an output line with a formatted string." + "\1 See https://szs.wiimm.de/opt/printf for details." }, + { T_OPT_GMP, "CHDIR", "chdir", "dir", "Set a new working directory for all following options," @@ -1499,17 +1513,19 @@ " Delete sub-file course.lex if it no longer contains a section." " This option is executed after all --lt-* and --lex-* options." }, - { H_OPT_G, "LEX_FEATURES", "lex-features|lexfeatures", + { T_OPT_G, "LEX_FEATURES", "lex-features|lexfeatures", 0, - "Calculate LEX setion FEA0 (features) by analysing the track file." + "Calculate LEX setion FEAT (features) by analysing the track file." " If no features found, delete the section and the possibly empty sub-file" " course.lex. If features found, then insert the section or update" " an existing section. If necessary, the sub-file course.lex is created." - " This option is executed after all --lt-* options and after --lex-purge." }, + " This option is executed after all --lt-* options and after --lex-purge." + "\n " + " CTGP uses the FEAT section to manage ghosts." }, - { H_OPT_G, "LEX_RM_FEAT", "lex-rm-features|lexrmfeatures", + { T_OPT_G, "LEX_RM_FEAT", "lex-rm-features|lexrmfeatures", 0, - "Remove LEX setion FEA0 (features) if exists" + "Remove LEX setion FEAT (features) if exists" " and the possibly empty sub-file course.lex." " This option is ignored if --lex-features is set." " It is executed after all --lt-* options and after --lex-purge." }, @@ -2488,8 +2504,8 @@ { T_COPT, "LT_ENGINE", 0,0,0 }, { T_COPT, "LT_RANDOM", 0,0,0 }, { T_COPT, "LEX_PURGE", 0,0,0 }, - { H_COPT, "LEX_FEATURES", 0,0,0 }, - { H_COPT, "LEX_RM_FEAT", 0,0,0 }, + { T_COPT, "LEX_FEATURES", 0,0,0 }, + { T_COPT, "LEX_RM_FEAT", 0,0,0 }, { T_COPT, "PATCH_BMG", 0,0,0 }, { T_COPT, "MACRO_BMG", 0,0,0 }, { T_COPT, "FILTER_BMG", 0,0,0 }, @@ -2632,6 +2648,7 @@ { T_COPT, "RM_AIPARAM", 0,0,0 }, { T_COPY_GRP, "ALIGN", 0,0,0 }, { T_COPT, "LOGGING", 0,0,0 }, + { T_COPT, "EXT_ERRORS", 0,0,0 }, { T_COPT, "TIMING", 0,0,0 }, { T_COPY_GRP, "ENCODE", 0,0,0 }, { T_COPT, "AUTO_ADD", 0,0,0 }, @@ -2899,6 +2916,7 @@ { T_COPT, "BRIEF", 0,0, "Limit output to SZS specific data." }, { T_COPT, "LOGGING", 0,0,0 }, + { T_COPT, "EXT_ERRORS", 0,0,0 }, { T_COPT, "TIMING", 0,0,0 }, //---------- COMMAND wszst _CODE ---------- @@ -3095,6 +3113,7 @@ { T_CMD_BEG, "SPLIT", 0,0,0 }, { T_COPT, "LOAD_PREFIX", 0,0,0 }, { T_COPT, "PLUS", 0,0,0 }, + { T_COPT, "PRINTF", 0,0,0 }, { T_SEP_OPT, 0,0,0,0 }, { T_COPT, "IGNORE", 0,0,0 }, { T_SEP_OPT, 0,0,0,0 }, @@ -3320,6 +3339,7 @@ { T_COPT, "IGNORE_SETUP", 0,0,0 }, { T_COPY_GRP, "ALIGN", 0,0,0 }, { T_COPT, "LOGGING", 0,0,0 }, + { T_COPT, "EXT_ERRORS", 0,0,0 }, { T_COPT, "TIMING", 0,0,0 }, { T_COPY_GRP, "ENCODE", 0,0,0 }, { T_COPT, "MIPMAPS", 0,0,0 }, diff --git a/project/src/ui/ui-wbmgt.c b/project/src/ui/ui-wbmgt.c index 0741af3..96371f8 100644 --- a/project/src/ui/ui-wbmgt.c +++ b/project/src/ui/ui-wbmgt.c @@ -374,13 +374,19 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = { OPT_LOGGING, false, false, false, false, false, 'L', "logging", 0, "This debug option enables the logging of internal lists and maps. Set" - " it up to three times to be more verbose.\n" + " it up to three times to be more verbose." + }, + + { OPT_EXT_ERRORS, false, false, false, false, false, 'Y', "extended-errors", + 0, + "Enable extended error messages. This includes a source file and line" + " reference. Logging level 1 activates it too. --xerr is a short cut." }, { OPT_TIMING, false, false, false, false, false, 0, "timing", 0, "Activate the timing of some operations. Logging level 3 activates" - " them too.\n" + " them too." }, { OPT_WARN, false, false, false, false, false, 'W', "warn", @@ -553,7 +559,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = " helper option." }, - {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 66 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 67 }; @@ -683,7 +689,7 @@ static const KeywordTab_t CommandTab[] = /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// -static const char OptionShort[] = "VhqvLW:c:lHBM:T:A:td:D:E:orupiP:1X"; +static const char OptionShort[] = "VhqvLYW:c:lHBM:T:A:td:D:E:orupiP:1X"; static const struct option OptionLong[] = { @@ -702,6 +708,9 @@ static const struct option OptionLong[] = { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, + { "extended-errors", 0, 0, 'Y' }, + { "extendederrors", 0, 0, 'Y' }, + { "xerr", 0, 0, 'Y' }, { "timing", 0, 0, GO_TIMING }, { "warn", 1, 0, 'W' }, { "de", 0, 0, GO_DE }, @@ -832,7 +841,8 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x056 V */ OPT_VERSION, /* 0x057 W */ OPT_WARN, /* 0x058 X */ OPT_EXPORT, - /* 0x059 */ 0,0,0,0, 0,0,0,0, 0,0, + /* 0x059 Y */ OPT_EXT_ERRORS, + /* 0x05a */ 0,0,0,0, 0,0,0,0, 0, /* 0x063 c */ OPT_CONST, /* 0x064 d */ OPT_DEST, /* 0x065 */ 0,0,0, @@ -1065,6 +1075,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_WARN, OptionInfo + OPT_DE, @@ -1454,7 +1465,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "wbmgt [option]... command [option|parameter|file]...", "Wiimms BMG Tool : Convert and patch raw and text BMG (message) files.", 0, - 28, + 29, option_tab_tool, 0 }, diff --git a/project/src/ui/ui-wbmgt.h b/project/src/ui/ui-wbmgt.h index 31f238f..ab88947 100644 --- a/project/src/ui/ui-wbmgt.h +++ b/project/src/ui/ui-wbmgt.h @@ -104,6 +104,7 @@ typedef enum enumOptions OPT_QUIET, OPT_VERBOSE, OPT_LOGGING, + OPT_EXT_ERRORS, OPT_TIMING, OPT_WARN, OPT_DE, @@ -127,7 +128,7 @@ typedef enum enumOptions OPT_NEW, OPT_EXTRACT, - OPT__N_TOTAL // == 66 + OPT__N_TOTAL // == 67 } enumOptions; @@ -358,6 +359,7 @@ typedef enum enumGetOpt GO_VERSION = 'V', GO_WARN = 'W', GO_EXPORT = 'X', + GO_EXT_ERRORS = 'Y', GO_CONST = 'c', GO_DEST = 'd', diff --git a/project/src/ui/ui-wctct.c b/project/src/ui/ui-wctct.c index 2d15c1f..8941129 100644 --- a/project/src/ui/ui-wctct.c +++ b/project/src/ui/ui-wctct.c @@ -474,13 +474,19 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = { OPT_LOGGING, false, false, false, false, false, 'L', "logging", 0, "This debug option enables the logging of internal lists and maps. Set" - " it up to three times to be more verbose.\n" + " it up to three times to be more verbose." + }, + + { OPT_EXT_ERRORS, false, false, false, false, false, 'Y', "extended-errors", + 0, + "Enable extended error messages. This includes a source file and line" + " reference. Logging level 1 activates it too. --xerr is a short cut." }, { OPT_TIMING, false, false, false, false, false, 0, "timing", 0, "Activate the timing of some operations. Logging level 3 activates" - " them too.\n" + " them too." }, { OPT_WARN, false, false, false, false, false, 'W', "warn", @@ -690,7 +696,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = " 0x3b:0x41 and 0x44:0xfe." }, - {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 86 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 87 }; @@ -880,7 +886,7 @@ static const KeywordTab_t CommandTab[] = /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// -static const char OptionShort[] = "VhqvLW:c:lHB1XPNM:T:A:td:D:E:orupi"; +static const char OptionShort[] = "VhqvLYW:c:lHB1XPNM:T:A:td:D:E:orupi"; static const struct option OptionLong[] = { @@ -899,6 +905,9 @@ static const struct option OptionLong[] = { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, + { "extended-errors", 0, 0, 'Y' }, + { "extendederrors", 0, 0, 'Y' }, + { "xerr", 0, 0, 'Y' }, { "timing", 0, 0, GO_TIMING }, { "warn", 1, 0, 'W' }, { "de", 0, 0, GO_DE }, @@ -1058,7 +1067,8 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x056 V */ OPT_VERSION, /* 0x057 W */ OPT_WARN, /* 0x058 X */ OPT_EXPORT, - /* 0x059 */ 0,0,0,0, 0,0,0,0, 0,0, + /* 0x059 Y */ OPT_EXT_ERRORS, + /* 0x05a */ 0,0,0,0, 0,0,0,0, 0, /* 0x063 c */ OPT_CONST, /* 0x064 d */ OPT_DEST, /* 0x065 */ 0,0,0, @@ -1309,6 +1319,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_WARN, OptionInfo + OPT_DE, @@ -1696,7 +1707,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "Wiimms CT-CODE Tool : Manage the CT-CODE extension. BRRES, TEX0," " CT-CODE, CT-TEXT and LE-BIN files are accepted as input.", 0, - 31, + 32, option_tab_tool, 0 }, diff --git a/project/src/ui/ui-wctct.h b/project/src/ui/ui-wctct.h index f55d4ad..2732a9d 100644 --- a/project/src/ui/ui-wctct.h +++ b/project/src/ui/ui-wctct.h @@ -119,6 +119,7 @@ typedef enum enumOptions OPT_QUIET, OPT_VERBOSE, OPT_LOGGING, + OPT_EXT_ERRORS, OPT_TIMING, OPT_WARN, OPT_DE, @@ -147,7 +148,7 @@ typedef enum enumOptions OPT_CT_LOG, OPT_ALLOW_SLOTS, - OPT__N_TOTAL // == 86 + OPT__N_TOTAL // == 87 } enumOptions; @@ -429,6 +430,7 @@ typedef enum enumGetOpt GO_VERSION = 'V', GO_WARN = 'W', GO_EXPORT = 'X', + GO_EXT_ERRORS = 'Y', GO_CONST = 'c', GO_DEST = 'd', diff --git a/project/src/ui/ui-wimgt.c b/project/src/ui/ui-wimgt.c index c6eca37..3b86509 100644 --- a/project/src/ui/ui-wimgt.c +++ b/project/src/ui/ui-wimgt.c @@ -337,13 +337,19 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = { OPT_LOGGING, false, false, false, false, false, 'L', "logging", 0, "This debug option enables the logging of internal lists and maps. Set" - " it up to three times to be more verbose.\n" + " it up to three times to be more verbose." + }, + + { OPT_EXT_ERRORS, false, false, false, false, false, 'Y', "extended-errors", + 0, + "Enable extended error messages. This includes a source file and line" + " reference. Logging level 1 activates it too. --xerr is a short cut." }, { OPT_TIMING, false, false, false, false, false, 0, "timing", 0, "Activate the timing of some operations. Logging level 3 activates" - " them too.\n" + " them too." }, { OPT_WARN, false, false, false, false, false, 'W', "warn", @@ -504,7 +510,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = " helper option." }, - {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 59 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 60 }; @@ -624,7 +630,7 @@ static const KeywordTab_t CommandTab[] = /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// -static const char OptionShort[] = "VhqvLW:c:lHBM:T:A:td:D:E:orupiaP:x:"; +static const char OptionShort[] = "VhqvLYW:c:lHBM:T:A:td:D:E:orupiaP:x:"; static const struct option OptionLong[] = { @@ -643,6 +649,9 @@ static const struct option OptionLong[] = { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, + { "extended-errors", 0, 0, 'Y' }, + { "extendederrors", 0, 0, 'Y' }, + { "xerr", 0, 0, 'Y' }, { "timing", 0, 0, GO_TIMING }, { "warn", 1, 0, 'W' }, { "de", 0, 0, GO_DE }, @@ -754,7 +763,9 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x055 */ 0, /* 0x056 V */ OPT_VERSION, /* 0x057 W */ OPT_WARN, - /* 0x058 */ 0,0,0,0, 0,0,0,0, 0, + /* 0x058 */ 0, + /* 0x059 Y */ OPT_EXT_ERRORS, + /* 0x05a */ 0,0,0,0, 0,0,0, /* 0x061 a */ OPT_ALL, /* 0x062 */ 0, /* 0x063 c */ OPT_CONST, @@ -931,6 +942,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_WARN, OptionInfo + OPT_DE, @@ -1218,7 +1230,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "Wiimms Image Tool : Extract and convert graphic images. The file" " formats TPL, TEX, BTI, BREFT and PNG are supported.", 0, - 25, + 26, option_tab_tool, 0 }, diff --git a/project/src/ui/ui-wimgt.h b/project/src/ui/ui-wimgt.h index 1373c02..25a6329 100644 --- a/project/src/ui/ui-wimgt.h +++ b/project/src/ui/ui-wimgt.h @@ -98,6 +98,7 @@ typedef enum enumOptions OPT_QUIET, OPT_VERBOSE, OPT_LOGGING, + OPT_EXT_ERRORS, OPT_TIMING, OPT_WARN, OPT_DE, @@ -120,7 +121,7 @@ typedef enum enumOptions OPT_NEW, OPT_EXTRACT, - OPT__N_TOTAL // == 59 + OPT__N_TOTAL // == 60 } enumOptions; @@ -289,6 +290,7 @@ typedef enum enumGetOpt GO_TRACKS = 'T', GO_VERSION = 'V', GO_WARN = 'W', + GO_EXT_ERRORS = 'Y', GO_ALL = 'a', GO_CONST = 'c', diff --git a/project/src/ui/ui-wkclt.c b/project/src/ui/ui-wkclt.c index df62da4..b355d73 100644 --- a/project/src/ui/ui-wkclt.c +++ b/project/src/ui/ui-wkclt.c @@ -474,13 +474,19 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = { OPT_LOGGING, false, false, false, false, false, 'L', "logging", 0, "This debug option enables the logging of internal lists and maps. Set" - " it up to three times to be more verbose.\n" + " it up to three times to be more verbose." + }, + + { OPT_EXT_ERRORS, false, false, false, false, false, 'Y', "extended-errors", + 0, + "Enable extended error messages. This includes a source file and line" + " reference. Logging level 1 activates it too. --xerr is a short cut." }, { OPT_TIMING, false, false, false, false, false, 0, "timing", 0, "Activate the timing of some operations. Logging level 3 activates" - " them too.\n" + " them too." }, { OPT_WARN, false, false, false, false, false, 'W', "warn", @@ -692,7 +698,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = " helper option." }, - {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 79 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 80 }; @@ -964,7 +970,7 @@ static const KeywordTab_t CommandTab[] = /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// -static const char OptionShort[] = "VhqvLW:c:lHBPNM:T:A:td:D:E:orupi"; +static const char OptionShort[] = "VhqvLYW:c:lHBPNM:T:A:td:D:E:orupi"; static const struct option OptionLong[] = { @@ -983,6 +989,9 @@ static const struct option OptionLong[] = { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, + { "extended-errors", 0, 0, 'Y' }, + { "extendederrors", 0, 0, 'Y' }, + { "xerr", 0, 0, 'Y' }, { "timing", 0, 0, GO_TIMING }, { "warn", 1, 0, 'W' }, { "de", 0, 0, GO_DE }, @@ -1114,7 +1123,9 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x055 */ 0, /* 0x056 V */ OPT_VERSION, /* 0x057 W */ OPT_WARN, - /* 0x058 */ 0,0,0,0, 0,0,0,0, 0,0,0, + /* 0x058 */ 0, + /* 0x059 Y */ OPT_EXT_ERRORS, + /* 0x05a */ 0,0,0,0, 0,0,0,0, 0, /* 0x063 c */ OPT_CONST, /* 0x064 d */ OPT_DEST, /* 0x065 */ 0,0,0, @@ -1420,6 +1431,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_WARN, OptionInfo + OPT_DE, @@ -2163,7 +2175,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "Wiimms KCL Tool : Analyze, modify, export and create KCL and OBJ" " files.", 0, - 29, + 30, option_tab_tool, 0 }, diff --git a/project/src/ui/ui-wkclt.h b/project/src/ui/ui-wkclt.h index 352a4b8..9695e87 100644 --- a/project/src/ui/ui-wkclt.h +++ b/project/src/ui/ui-wkclt.h @@ -113,6 +113,7 @@ typedef enum enumOptions OPT_QUIET, OPT_VERBOSE, OPT_LOGGING, + OPT_EXT_ERRORS, OPT_TIMING, OPT_WARN, OPT_DE, @@ -140,7 +141,7 @@ typedef enum enumOptions OPT_NEW, OPT_EXTRACT, - OPT__N_TOTAL // == 79 + OPT__N_TOTAL // == 80 } enumOptions; @@ -428,6 +429,7 @@ typedef enum enumGetOpt GO_TRACKS = 'T', GO_VERSION = 'V', GO_WARN = 'W', + GO_EXT_ERRORS = 'Y', GO_CONST = 'c', GO_DEST = 'd', diff --git a/project/src/ui/ui-wkmpt.c b/project/src/ui/ui-wkmpt.c index 6cce3b2..64a033c 100644 --- a/project/src/ui/ui-wkmpt.c +++ b/project/src/ui/ui-wkmpt.c @@ -566,13 +566,19 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = { OPT_LOGGING, false, false, false, false, false, 'L', "logging", 0, "This debug option enables the logging of internal lists and maps. Set" - " it up to three times to be more verbose.\n" + " it up to three times to be more verbose." + }, + + { OPT_EXT_ERRORS, false, false, false, false, false, 'Y', "extended-errors", + 0, + "Enable extended error messages. This includes a source file and line" + " reference. Logging level 1 activates it too. --xerr is a short cut." }, { OPT_TIMING, false, false, false, false, false, 0, "timing", 0, "Activate the timing of some operations. Logging level 3 activates" - " them too.\n" + " them too." }, { OPT_WARN, false, false, false, false, false, 'W', "warn", @@ -889,7 +895,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = " helper option." }, - {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 96 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 97 }; @@ -1174,7 +1180,7 @@ static const KeywordTab_t CommandTab[] = /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// -static const char OptionShort[] = "VhqvLW:c:w:lHBXPGNM:T:A:td:D:E:orupi"; +static const char OptionShort[] = "VhqvLYW:c:w:lHBXPGNM:T:A:td:D:E:orupi"; static const struct option OptionLong[] = { @@ -1193,6 +1199,9 @@ static const struct option OptionLong[] = { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, + { "extended-errors", 0, 0, 'Y' }, + { "extendederrors", 0, 0, 'Y' }, + { "xerr", 0, 0, 'Y' }, { "timing", 0, 0, GO_TIMING }, { "warn", 1, 0, 'W' }, { "de", 0, 0, GO_DE }, @@ -1357,7 +1366,8 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x056 V */ OPT_VERSION, /* 0x057 W */ OPT_WARN, /* 0x058 X */ OPT_EXPORT, - /* 0x059 */ 0,0,0,0, 0,0,0,0, 0,0, + /* 0x059 Y */ OPT_EXT_ERRORS, + /* 0x05a */ 0,0,0,0, 0,0,0,0, 0, /* 0x063 c */ OPT_CONST, /* 0x064 d */ OPT_DEST, /* 0x065 */ 0,0,0, @@ -1665,6 +1675,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_WARN, OptionInfo + OPT_DE, @@ -2228,7 +2239,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "Wiimms KMP Tool : Analyze, modify, export and create (compile) KMP" " files.", 0, - 38, + 39, option_tab_tool, 0 }, diff --git a/project/src/ui/ui-wkmpt.h b/project/src/ui/ui-wkmpt.h index 9bef264..a86288f 100644 --- a/project/src/ui/ui-wkmpt.h +++ b/project/src/ui/ui-wkmpt.h @@ -121,6 +121,7 @@ typedef enum enumOptions OPT_QUIET, OPT_VERBOSE, OPT_LOGGING, + OPT_EXT_ERRORS, OPT_TIMING, OPT_WARN, OPT_DE, @@ -157,7 +158,7 @@ typedef enum enumOptions OPT_NEW, OPT_EXTRACT, - OPT__N_TOTAL // == 96 + OPT__N_TOTAL // == 97 } enumOptions; @@ -443,6 +444,7 @@ typedef enum enumGetOpt GO_VERSION = 'V', GO_WARN = 'W', GO_EXPORT = 'X', + GO_EXT_ERRORS = 'Y', GO_CONST = 'c', GO_DEST = 'd', diff --git a/project/src/ui/ui-wlect.c b/project/src/ui/ui-wlect.c index 720e084..d2370c8 100644 --- a/project/src/ui/ui-wlect.c +++ b/project/src/ui/ui-wlect.c @@ -468,13 +468,19 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = { OPT_LOGGING, false, false, false, false, false, 'L', "logging", 0, "This debug option enables the logging of internal lists and maps. Set" - " it up to three times to be more verbose.\n" + " it up to three times to be more verbose." + }, + + { OPT_EXT_ERRORS, false, false, false, false, false, 'Y', "extended-errors", + 0, + "Enable extended error messages. This includes a source file and line" + " reference. Logging level 1 activates it too. --xerr is a short cut." }, { OPT_TIMING, false, false, false, false, false, 0, "timing", 0, "Activate the timing of some operations. Logging level 3 activates" - " them too.\n" + " them too." }, { OPT_WARN, false, false, false, false, false, 'W', "warn", @@ -602,9 +608,9 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = " all --lt-* options." }, - { OPT_LEX_RM_FEAT, false, true, false, false, false, 0, "rm-features", + { OPT_LEX_RM_FEAT, false, false, false, false, false, 0, "rm-features", 0, - "Remove LEX setion FEA0 (features) if exists. It is executed after" + "Remove LEX setion FEAT (features) if exists. It is executed after" " --lex-purge. --lex-rm-features is an alternative name." }, @@ -660,7 +666,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = " helper option." }, - {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 85 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 86 }; @@ -824,7 +830,7 @@ static const KeywordTab_t CommandTab[] = /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// -static const char OptionShort[] = "VhqvLW:c:lHBXPM:tCd:D:E:orupi"; +static const char OptionShort[] = "VhqvLYW:c:lHBXPM:tCd:D:E:orupi"; static const struct option OptionLong[] = { @@ -843,6 +849,9 @@ static const struct option OptionLong[] = { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, + { "extended-errors", 0, 0, 'Y' }, + { "extendederrors", 0, 0, 'Y' }, + { "xerr", 0, 0, 'Y' }, { "timing", 0, 0, GO_TIMING }, { "warn", 1, 0, 'W' }, { "de", 0, 0, GO_DE }, @@ -999,7 +1008,8 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x056 V */ OPT_VERSION, /* 0x057 W */ OPT_WARN, /* 0x058 X */ OPT_EXPORT, - /* 0x059 */ 0,0,0,0, 0,0,0,0, 0,0, + /* 0x059 Y */ OPT_EXT_ERRORS, + /* 0x05a */ 0,0,0,0, 0,0,0,0, 0, /* 0x063 c */ OPT_CONST, /* 0x064 d */ OPT_DEST, /* 0x065 */ 0,0,0, @@ -1276,6 +1286,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_WARN, OptionInfo + OPT_DE, @@ -1295,6 +1306,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_LT_ENGINE, OptionInfo + OPT_LT_RANDOM, OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_LEX_RM_FEAT, OptionInfo + OPT_NONE, // separator @@ -1601,6 +1613,7 @@ static const InfoOption_t * option_tab_cmd_CREATE[] = OptionInfo + OPT_LT_ENGINE, OptionInfo + OPT_LT_RANDOM, OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_LEX_RM_FEAT, OptionInfo + OPT_NONE, // separator @@ -1724,7 +1737,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "wlect [option]... command [option|parameter|file]...", "Wiimms LE-CODE Tool : Manage the LE-CODE and LEX extensions.", 0, - 31, + 33, option_tab_tool, 0 }, @@ -2102,7 +2115,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " listing.\n" " Use the command without keyword to get an extended description.", 0, - 31, + 32, option_tab_cmd_CREATE, option_allowed_cmd_CREATE }, diff --git a/project/src/ui/ui-wlect.h b/project/src/ui/ui-wlect.h index 854d96a..6138373 100644 --- a/project/src/ui/ui-wlect.h +++ b/project/src/ui/ui-wlect.h @@ -119,6 +119,7 @@ typedef enum enumOptions OPT_QUIET, OPT_VERBOSE, OPT_LOGGING, + OPT_EXT_ERRORS, OPT_TIMING, OPT_WARN, OPT_DE, @@ -146,7 +147,7 @@ typedef enum enumOptions OPT_NEW, OPT_EXTRACT, - OPT__N_TOTAL // == 85 + OPT__N_TOTAL // == 86 } enumOptions; @@ -408,6 +409,7 @@ typedef enum enumGetOpt GO_VERSION = 'V', GO_WARN = 'W', GO_EXPORT = 'X', + GO_EXT_ERRORS = 'Y', GO_CONST = 'c', GO_DEST = 'd', diff --git a/project/src/ui/ui-wmdlt.c b/project/src/ui/ui-wmdlt.c index 0be480c..7cce00d 100644 --- a/project/src/ui/ui-wmdlt.c +++ b/project/src/ui/ui-wmdlt.c @@ -396,13 +396,19 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = { OPT_LOGGING, false, false, false, false, false, 'L', "logging", 0, "This debug option enables the logging of internal lists and maps. Set" - " it up to three times to be more verbose.\n" + " it up to three times to be more verbose." + }, + + { OPT_EXT_ERRORS, false, false, false, false, false, 'Y', "extended-errors", + 0, + "Enable extended error messages. This includes a source file and line" + " reference. Logging level 1 activates it too. --xerr is a short cut." }, { OPT_TIMING, false, false, false, false, false, 0, "timing", 0, "Activate the timing of some operations. Logging level 3 activates" - " them too.\n" + " them too." }, { OPT_WARN, false, false, false, false, false, 'W', "warn", @@ -584,7 +590,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = " helper option." }, - {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 68 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 69 }; @@ -742,7 +748,7 @@ static const KeywordTab_t CommandTab[] = /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// -static const char OptionShort[] = "VhqvLW:c:lHBPNM:T:A:td:D:E:orupi"; +static const char OptionShort[] = "VhqvLYW:c:lHBPNM:T:A:td:D:E:orupi"; static const struct option OptionLong[] = { @@ -761,6 +767,9 @@ static const struct option OptionLong[] = { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, + { "extended-errors", 0, 0, 'Y' }, + { "extendederrors", 0, 0, 'Y' }, + { "xerr", 0, 0, 'Y' }, { "timing", 0, 0, GO_TIMING }, { "warn", 1, 0, 'W' }, { "de", 0, 0, GO_DE }, @@ -871,7 +880,9 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x055 */ 0, /* 0x056 V */ OPT_VERSION, /* 0x057 W */ OPT_WARN, - /* 0x058 */ 0,0,0,0, 0,0,0,0, 0,0,0, + /* 0x058 */ 0, + /* 0x059 Y */ OPT_EXT_ERRORS, + /* 0x05a */ 0,0,0,0, 0,0,0,0, 0, /* 0x063 c */ OPT_CONST, /* 0x064 d */ OPT_DEST, /* 0x065 */ 0,0,0, @@ -1101,6 +1112,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_WARN, OptionInfo + OPT_DE, @@ -1484,7 +1496,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "wmdlt [option]... command [option|parameter|file]...", "Wiimms MDL Tool : Decode raw MDL and encode text MDL files.", 0, - 27, + 28, option_tab_tool, 0 }, diff --git a/project/src/ui/ui-wmdlt.h b/project/src/ui/ui-wmdlt.h index 242795b..91502d8 100644 --- a/project/src/ui/ui-wmdlt.h +++ b/project/src/ui/ui-wmdlt.h @@ -105,6 +105,7 @@ typedef enum enumOptions OPT_QUIET, OPT_VERBOSE, OPT_LOGGING, + OPT_EXT_ERRORS, OPT_TIMING, OPT_WARN, OPT_DE, @@ -129,7 +130,7 @@ typedef enum enumOptions OPT_NEW, OPT_EXTRACT, - OPT__N_TOTAL // == 68 + OPT__N_TOTAL // == 69 } enumOptions; @@ -350,6 +351,7 @@ typedef enum enumGetOpt GO_TRACKS = 'T', GO_VERSION = 'V', GO_WARN = 'W', + GO_EXT_ERRORS = 'Y', GO_CONST = 'c', GO_DEST = 'd', diff --git a/project/src/ui/ui-wpatt.c b/project/src/ui/ui-wpatt.c index d2b9b3a..864622d 100644 --- a/project/src/ui/ui-wpatt.c +++ b/project/src/ui/ui-wpatt.c @@ -238,13 +238,19 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = { OPT_LOGGING, false, false, false, false, false, 'L', "logging", 0, "This debug option enables the logging of internal lists and maps. Set" - " it up to three times to be more verbose.\n" + " it up to three times to be more verbose." + }, + + { OPT_EXT_ERRORS, false, false, false, false, false, 'Y', "extended-errors", + 0, + "Enable extended error messages. This includes a source file and line" + " reference. Logging level 1 activates it too. --xerr is a short cut." }, { OPT_TIMING, false, false, false, false, false, 0, "timing", 0, "Activate the timing of some operations. Logging level 3 activates" - " them too.\n" + " them too." }, { OPT_WARN, false, false, false, false, false, 'W', "warn", @@ -415,7 +421,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = " helper option." }, - {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 52 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 53 }; @@ -539,7 +545,7 @@ static const KeywordTab_t CommandTab[] = /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// -static const char OptionShort[] = "VhqvLW:c:lHBPNM:T:A:td:D:E:orupi"; +static const char OptionShort[] = "VhqvLYW:c:lHBPNM:T:A:td:D:E:orupi"; static const struct option OptionLong[] = { @@ -558,6 +564,9 @@ static const struct option OptionLong[] = { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, + { "extended-errors", 0, 0, 'Y' }, + { "extendederrors", 0, 0, 'Y' }, + { "xerr", 0, 0, 'Y' }, { "timing", 0, 0, GO_TIMING }, { "warn", 1, 0, 'W' }, { "de", 0, 0, GO_DE }, @@ -650,7 +659,9 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x055 */ 0, /* 0x056 V */ OPT_VERSION, /* 0x057 W */ OPT_WARN, - /* 0x058 */ 0,0,0,0, 0,0,0,0, 0,0,0, + /* 0x058 */ 0, + /* 0x059 Y */ OPT_EXT_ERRORS, + /* 0x05a */ 0,0,0,0, 0,0,0,0, 0, /* 0x063 c */ OPT_CONST, /* 0x064 d */ OPT_DEST, /* 0x065 */ 0,0,0, @@ -823,6 +834,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_WARN, OptionInfo + OPT_DE, @@ -1031,7 +1043,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "wpatt [option]... command [option|parameter|file]...", "Wiimms PAT Tool : Decode raw PAT and encode text PAT files.", 0, - 26, + 27, option_tab_tool, 0 }, diff --git a/project/src/ui/ui-wpatt.h b/project/src/ui/ui-wpatt.h index 81e9549..f7bd275 100644 --- a/project/src/ui/ui-wpatt.h +++ b/project/src/ui/ui-wpatt.h @@ -90,6 +90,7 @@ typedef enum enumOptions OPT_QUIET, OPT_VERBOSE, OPT_LOGGING, + OPT_EXT_ERRORS, OPT_TIMING, OPT_WARN, OPT_DE, @@ -113,7 +114,7 @@ typedef enum enumOptions OPT_NEW, OPT_EXTRACT, - OPT__N_TOTAL // == 52 + OPT__N_TOTAL // == 53 } enumOptions; @@ -273,6 +274,7 @@ typedef enum enumGetOpt GO_TRACKS = 'T', GO_VERSION = 'V', GO_WARN = 'W', + GO_EXT_ERRORS = 'Y', GO_CONST = 'c', GO_DEST = 'd', diff --git a/project/src/ui/ui-wstrt.c b/project/src/ui/ui-wstrt.c index f3900b7..b32e648 100644 --- a/project/src/ui/ui-wstrt.c +++ b/project/src/ui/ui-wstrt.c @@ -572,13 +572,19 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = { OPT_LOGGING, false, false, false, false, false, 'L', "logging", 0, "This debug option enables the logging of internal lists and maps. Set" - " it up to three times to be more verbose.\n" + " it up to three times to be more verbose." + }, + + { OPT_EXT_ERRORS, false, false, false, false, false, 'Y', "extended-errors", + 0, + "Enable extended error messages. This includes a source file and line" + " reference. Logging level 1 activates it too. --xerr is a short cut." }, { OPT_TIMING, false, false, false, false, false, 0, "timing", 0, "Activate the timing of some operations. Logging level 3 activates" - " them too.\n" + " them too." }, { OPT_WARN, false, false, false, false, false, 'W', "warn", @@ -898,7 +904,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = " directory." }, - {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 120 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 121 }; @@ -1109,7 +1115,7 @@ static const KeywordTab_t CommandTab[] = /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// -static const char OptionShort[] = "Vh@qvLW:c:lBHT:A:R:td:D:E:orupi0U"; +static const char OptionShort[] = "Vh@qvLYW:c:lBHT:A:R:td:D:E:orupi0U"; static const struct option OptionLong[] = { @@ -1129,6 +1135,9 @@ static const struct option OptionLong[] = { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, + { "extended-errors", 0, 0, 'Y' }, + { "extendederrors", 0, 0, 'Y' }, + { "xerr", 0, 0, 'Y' }, { "timing", 0, 0, GO_TIMING }, { "warn", 1, 0, 'W' }, { "de", 0, 0, GO_DE }, @@ -1319,7 +1328,9 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x055 U */ OPT_UPPER, /* 0x056 V */ OPT_VERSION, /* 0x057 W */ OPT_WARN, - /* 0x058 */ 0,0,0,0, 0,0,0,0, 0,0,0, + /* 0x058 */ 0, + /* 0x059 Y */ OPT_EXT_ERRORS, + /* 0x05a */ 0,0,0,0, 0,0,0,0, 0, /* 0x063 c */ OPT_CONST, /* 0x064 d */ OPT_DEST, /* 0x065 */ 0,0,0, @@ -1640,6 +1651,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_WARN, OptionInfo + OPT_DE, @@ -1786,6 +1798,7 @@ static const InfoOption_t * option_tab_cmd_HEXDUMP[] = OptionInfo + OPT_FADDR, OptionInfo + OPT_SNAME, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_NONE, // separator @@ -2054,7 +2067,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "Wiimms StaticR Tool : Manipulate the 'main.dol' and 'StaticR.rel'" " files of Mario Kart Wii.", 0, - 42, + 43, option_tab_tool, 0 }, @@ -2281,7 +2294,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " Select parts by --vaddr, --faddr and --sname. Without selectors, the" " whole file is dumped.", 0, - 33, + 34, option_tab_cmd_HEXDUMP, option_allowed_cmd_HEXDUMP }, diff --git a/project/src/ui/ui-wstrt.h b/project/src/ui/ui-wstrt.h index 23742b8..3a4914f 100644 --- a/project/src/ui/ui-wstrt.h +++ b/project/src/ui/ui-wstrt.h @@ -139,6 +139,7 @@ typedef enum enumOptions OPT_QUIET, OPT_VERBOSE, OPT_LOGGING, + OPT_EXT_ERRORS, OPT_TIMING, OPT_WARN, OPT_DE, @@ -181,7 +182,7 @@ typedef enum enumOptions OPT_CLEAN_DOL, OPT_CT_DIR, - OPT__N_TOTAL // == 120 + OPT__N_TOTAL // == 121 } enumOptions; @@ -472,6 +473,7 @@ typedef enum enumGetOpt GO_UPPER = 'U', GO_VERSION = 'V', GO_WARN = 'W', + GO_EXT_ERRORS = 'Y', GO_CONST = 'c', GO_DEST = 'd', diff --git a/project/src/ui/ui-wszst.c b/project/src/ui/ui-wszst.c index 7c4445c..f9f1161 100644 --- a/project/src/ui/ui-wszst.c +++ b/project/src/ui/ui-wszst.c @@ -67,6 +67,12 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = " otherwise the ASCII value to which 500 is added." }, + { OPT_PRINTF, false, false, false, false, false, 0, "printf", + "format", + "Add an output line with a formatted string. See" + " https://szs.wiimm.de/opt/printf for details." + }, + { OPT_TOUCH, false, false, false, false, false, 0, "touch", 0, "Mark the minimap as modified to force a new calculation of the" @@ -1146,7 +1152,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = "Print in machine readable sections and parameter lines." }, - {0,0,0,0,0,0,0,0,0,0}, // OPT__N_SPECIFIC == 136 + {0,0,0,0,0,0,0,0,0,0}, // OPT__N_SPECIFIC == 137 //----- global options ----- @@ -1227,13 +1233,19 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = { OPT_LOGGING, false, false, false, false, false, 'L', "logging", 0, "This debug option enables the logging of internal lists and maps. Set" - " it up to three times to be more verbose.\n" + " it up to three times to be more verbose." + }, + + { OPT_EXT_ERRORS, false, false, false, false, false, 'Y', "extended-errors", + 0, + "Enable extended error messages. This includes a source file and line" + " reference. Logging level 1 activates it too. --xerr is a short cut." }, { OPT_TIMING, false, false, false, false, false, 0, "timing", 0, "Activate the timing of some operations. Logging level 3 activates" - " them too.\n" + " them too." }, { OPT_WARN, false, false, false, false, false, 'W', "warn", @@ -1579,19 +1591,20 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = " --lt-* and --lex-* options." }, - { OPT_LEX_FEATURES, false, true, false, false, false, 0, "lex-features", + { OPT_LEX_FEATURES, false, false, false, false, false, 0, "lex-features", 0, - "Calculate LEX setion FEA0 (features) by analysing the track file. If" + "Calculate LEX setion FEAT (features) by analysing the track file. If" " no features found, delete the section and the possibly empty" " sub-file course.lex. If features found, then insert the section or" " update an existing section. If necessary, the sub-file course.lex is" " created. This option is executed after all --lt-* options and after" - " --lex-purge." + " --lex-purge.\n" + " CTGP uses the FEAT section to manage ghosts." }, - { OPT_LEX_RM_FEAT, false, true, false, false, false, 0, "lex-rm-features", + { OPT_LEX_RM_FEAT, false, false, false, false, false, 0, "lex-rm-features", 0, - "Remove LEX setion FEA0 (features) if exists and the possibly empty" + "Remove LEX setion FEAT (features) if exists and the possibly empty" " sub-file course.lex. This option is ignored if --lex-features is" " set. It is executed after all --lt-* options and after --lex-purge." }, @@ -1801,7 +1814,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = " helper option." }, - {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 215 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 217 }; @@ -2401,7 +2414,7 @@ static const KeywordTab_t CommandTab[] = /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// -static const char OptionShort[] = "VhqvLW:c:lHB1XPS:M:T:A:x:ts:d:D:E:orupiNC:nRea"; +static const char OptionShort[] = "VhqvLYW:c:lHB1XPS:M:T:A:x:ts:d:D:E:orupiNC:nRea"; static const struct option OptionLong[] = { @@ -2420,6 +2433,9 @@ static const struct option OptionLong[] = { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, + { "extended-errors", 0, 0, 'Y' }, + { "extendederrors", 0, 0, 'Y' }, + { "xerr", 0, 0, 'Y' }, { "timing", 0, 0, GO_TIMING }, { "warn", 1, 0, 'W' }, { "de", 0, 0, GO_DE }, @@ -2433,6 +2449,7 @@ static const struct option OptionLong[] = { "load-prefix", 1, 0, GO_LOAD_PREFIX }, { "loadprefix", 1, 0, GO_LOAD_PREFIX }, { "plus", 1, 0, GO_PLUS }, + { "printf", 1, 0, GO_PRINTF }, { "chdir", 1, 0, GO_CHDIR }, { "const", 1, 0, 'c' }, { "touch", 0, 0, GO_TOUCH }, @@ -2803,7 +2820,8 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x056 V */ OPT_VERSION, /* 0x057 W */ OPT_WARN, /* 0x058 X */ OPT_EXPORT, - /* 0x059 */ 0,0,0,0, 0,0,0,0, + /* 0x059 Y */ OPT_EXT_ERRORS, + /* 0x05a */ 0,0,0,0, 0,0,0, /* 0x061 a */ OPT_ALL, /* 0x062 */ 0, /* 0x063 c */ OPT_CONST, @@ -2842,172 +2860,173 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x08c */ OPT_LE_CODE, /* 0x08d */ OPT_LOAD_PREFIX, /* 0x08e */ OPT_PLUS, - /* 0x08f */ OPT_CHDIR, - /* 0x090 */ OPT_TOUCH, - /* 0x091 */ OPT_AUTO, - /* 0x092 */ OPT_SET_FLAGS, - /* 0x093 */ OPT_SET_SCALE, - /* 0x094 */ OPT_SET_ROT, - /* 0x095 */ OPT_SET_X, - /* 0x096 */ OPT_SET_Y, - /* 0x097 */ OPT_SET_Z, - /* 0x098 */ OPT_XCENTER, - /* 0x099 */ OPT_YCENTER, - /* 0x09a */ OPT_ZCENTER, - /* 0x09b */ OPT_CENTER, - /* 0x09c */ OPT_SCALE, - /* 0x09d */ OPT_SHIFT, - /* 0x09e */ OPT_XSS, - /* 0x09f */ OPT_YSS, - /* 0x0a0 */ OPT_ZSS, - /* 0x0a1 */ OPT_ROT, - /* 0x0a2 */ OPT_XROT, - /* 0x0a3 */ OPT_YROT, - /* 0x0a4 */ OPT_ZROT, - /* 0x0a5 */ OPT_YPOS, - /* 0x0a6 */ OPT_TRANSLATE, - /* 0x0a7 */ OPT_NULL, - /* 0x0a8 */ OPT_NEXT, - /* 0x0a9 */ OPT_ASCALE, - /* 0x0aa */ OPT_AROT, - /* 0x0ab */ OPT_TFORM_SCRIPT, - /* 0x0ac */ OPT_MINIMAP, - /* 0x0ad */ OPT_RM_GOBJ, - /* 0x0ae */ OPT_BATTLE, - /* 0x0af */ OPT_EXPORT_FLAGS, - /* 0x0b0 */ OPT_ROUTE_OPTIONS, - /* 0x0b1 */ OPT_WIM0, - /* 0x0b2 */ OPT_SLOT, - /* 0x0b3 */ OPT_LOAD_KCL, - /* 0x0b4 */ OPT_KCL, - /* 0x0b5 */ OPT_KCL_FLAG, - /* 0x0b6 */ OPT_KCL_SCRIPT, - /* 0x0b7 */ OPT_TRI_AREA, - /* 0x0b8 */ OPT_TRI_HEIGHT, - /* 0x0b9 */ OPT_FLAG_FILE, - /* 0x0ba */ OPT_XTRIDATA, - /* 0x0bb */ OPT_KMP, - /* 0x0bc */ OPT_SPEED_MOD, - /* 0x0bd */ OPT_KTPT2, - /* 0x0be */ OPT_TFORM_KMP, - /* 0x0bf */ OPT_REPAIR_XPF, - /* 0x0c0 */ OPT_GAMEMODES, - /* 0x0c1 */ OPT_MDL, - /* 0x0c2 */ OPT_PAT, - /* 0x0c3 */ OPT_PATCH_FILE, - /* 0x0c4 */ OPT_KMG_LIMIT, - /* 0x0c5 */ OPT_KMG_COPY, - /* 0x0c6 */ OPT_LT_CLEAR, - /* 0x0c7 */ OPT_LT_ONLINE, - /* 0x0c8 */ OPT_LT_N_PLAYERS, - /* 0x0c9 */ OPT_LT_COND_BIT, - /* 0x0ca */ OPT_LT_GAME_MODE, - /* 0x0cb */ OPT_LT_ENGINE, - /* 0x0cc */ OPT_LT_RANDOM, - /* 0x0cd */ OPT_LEX_PURGE, - /* 0x0ce */ OPT_LEX_FEATURES, - /* 0x0cf */ OPT_LEX_RM_FEAT, - /* 0x0d0 */ OPT_LOAD_BMG, - /* 0x0d1 */ OPT_PATCH_BMG, - /* 0x0d2 */ OPT_MACRO_BMG, - /* 0x0d3 */ OPT_FILTER_BMG, - /* 0x0d4 */ OPT_CACHE, - /* 0x0d5 */ OPT_CNAME, - /* 0x0d6 */ OPT_ID, - /* 0x0d7 */ OPT_BASE64, - /* 0x0d8 */ OPT_DB64, - /* 0x0d9 */ OPT_CODING, - /* 0x0da */ OPT_VERIFY, - /* 0x0db */ OPT_ROUND, - /* 0x0dc */ OPT_PIPE, - /* 0x0dd */ OPT_DELTA, - /* 0x0de */ OPT_DIFF, - /* 0x0df */ OPT_EPSILON, - /* 0x0e0 */ OPT_BMG_ENDIAN, - /* 0x0e1 */ OPT_BMG_ENCODING, - /* 0x0e2 */ OPT_BMG_INF_SIZE, - /* 0x0e3 */ OPT_BMG_MID, - /* 0x0e4 */ OPT_FORCE_ATTRIB, - /* 0x0e5 */ OPT_DEF_ATTRIB, - /* 0x0e6 */ OPT_NO_ATTRIB, - /* 0x0e7 */ OPT_X_ESCAPES, - /* 0x0e8 */ OPT_OLD_ESCAPES, - /* 0x0e9 */ OPT_NO_BMG_COLORS, - /* 0x0ea */ OPT_BMG_COLORS, - /* 0x0eb */ OPT_NO_BMG_INLINE, - /* 0x0ec */ OPT_AUTOADD_PATH, - /* 0x0ed */ OPT_STRIP, - /* 0x0ee */ OPT_UTF_8, - /* 0x0ef */ OPT_NO_UTF_8, - /* 0x0f0 */ OPT_FORCE, - /* 0x0f1 */ OPT_REPAIR_MAGICS, - /* 0x0f2 */ OPT_TINY, - /* 0x0f3 */ OPT_YAZ0, - /* 0x0f4 */ OPT_YAZ1, - /* 0x0f5 */ OPT_XYZ, - /* 0x0f6 */ OPT_BZ, - /* 0x0f7 */ OPT_SH, - /* 0x0f8 */ OPT_BASH, - /* 0x0f9 */ OPT_JSON, - /* 0x0fa */ OPT_PHP, - /* 0x0fb */ OPT_MAKEDOC, - /* 0x0fc */ OPT_VAR, - /* 0x0fd */ OPT_ARRAY, - /* 0x0fe */ OPT_AVAR, - /* 0x0ff */ OPT_CASE, - /* 0x100 */ OPT_PMODES, - /* 0x101 */ OPT_FMODES, - /* 0x102 */ OPT_INSTALL, - /* 0x103 */ OPT_ANALYZE, - /* 0x104 */ OPT_ANALYZE_MODE, - /* 0x105 */ OPT_OLD, - /* 0x106 */ OPT_STD, - /* 0x107 */ OPT_NEW, - /* 0x108 */ OPT_EXTRACT, - /* 0x109 */ OPT_REFERENCE, - /* 0x10a */ OPT_NUMBER, - /* 0x10b */ OPT_REMOVE_SRC, - /* 0x10c */ OPT_IGNORE_SETUP, - /* 0x10d */ OPT_PURGE, - /* 0x10e */ OPT_ALIGN_U8, - /* 0x10f */ OPT_ALIGN_PACK, - /* 0x110 */ OPT_ALIGN_BRRES, - /* 0x111 */ OPT_ALIGN_BREFF, - /* 0x112 */ OPT_ALIGN_BREFT, - /* 0x113 */ OPT_ALIGN, - /* 0x114 */ OPT_ENCODE_ALL, - /* 0x115 */ OPT_ENCODE_IMG, - /* 0x116 */ OPT_NO_ENCODE, - /* 0x117 */ OPT_NO_RECURSE, - /* 0x118 */ OPT_AUTO_ADD, - /* 0x119 */ OPT_NO_ECHO, - /* 0x11a */ OPT_PT_DIR, - /* 0x11b */ OPT_RM_AIPARAM, - /* 0x11c */ OPT_U8, - /* 0x11d */ OPT_SZS, - /* 0x11e */ OPT_WU8, - /* 0x11f */ OPT_XWU8, - /* 0x120 */ OPT_WBZ, - /* 0x121 */ OPT_PACK, - /* 0x122 */ OPT_BRRES, - /* 0x123 */ OPT_BREFF, - /* 0x124 */ OPT_BREFT, - /* 0x125 */ OPT_NO_COMPRESS, - /* 0x126 */ OPT_FAST, - /* 0x127 */ OPT_LINKS, - /* 0x128 */ OPT_BASEDIR, - /* 0x129 */ OPT_DECODE, - /* 0x12a */ OPT_MIPMAPS, - /* 0x12b */ OPT_NO_MIPMAPS, - /* 0x12c */ OPT_N_MIPMAPS, - /* 0x12d */ OPT_MAX_MIPMAPS, - /* 0x12e */ OPT_MIPMAP_SIZE, - /* 0x12f */ OPT_FAST_MIPMAPS, - /* 0x130 */ OPT_CMPR_DEFAULT, - /* 0x131 */ OPT_CUT, - /* 0x132 */ OPT_RAW, - /* 0x133 */ OPT_SECTIONS, - /* 0x134 */ 0,0, + /* 0x08f */ OPT_PRINTF, + /* 0x090 */ OPT_CHDIR, + /* 0x091 */ OPT_TOUCH, + /* 0x092 */ OPT_AUTO, + /* 0x093 */ OPT_SET_FLAGS, + /* 0x094 */ OPT_SET_SCALE, + /* 0x095 */ OPT_SET_ROT, + /* 0x096 */ OPT_SET_X, + /* 0x097 */ OPT_SET_Y, + /* 0x098 */ OPT_SET_Z, + /* 0x099 */ OPT_XCENTER, + /* 0x09a */ OPT_YCENTER, + /* 0x09b */ OPT_ZCENTER, + /* 0x09c */ OPT_CENTER, + /* 0x09d */ OPT_SCALE, + /* 0x09e */ OPT_SHIFT, + /* 0x09f */ OPT_XSS, + /* 0x0a0 */ OPT_YSS, + /* 0x0a1 */ OPT_ZSS, + /* 0x0a2 */ OPT_ROT, + /* 0x0a3 */ OPT_XROT, + /* 0x0a4 */ OPT_YROT, + /* 0x0a5 */ OPT_ZROT, + /* 0x0a6 */ OPT_YPOS, + /* 0x0a7 */ OPT_TRANSLATE, + /* 0x0a8 */ OPT_NULL, + /* 0x0a9 */ OPT_NEXT, + /* 0x0aa */ OPT_ASCALE, + /* 0x0ab */ OPT_AROT, + /* 0x0ac */ OPT_TFORM_SCRIPT, + /* 0x0ad */ OPT_MINIMAP, + /* 0x0ae */ OPT_RM_GOBJ, + /* 0x0af */ OPT_BATTLE, + /* 0x0b0 */ OPT_EXPORT_FLAGS, + /* 0x0b1 */ OPT_ROUTE_OPTIONS, + /* 0x0b2 */ OPT_WIM0, + /* 0x0b3 */ OPT_SLOT, + /* 0x0b4 */ OPT_LOAD_KCL, + /* 0x0b5 */ OPT_KCL, + /* 0x0b6 */ OPT_KCL_FLAG, + /* 0x0b7 */ OPT_KCL_SCRIPT, + /* 0x0b8 */ OPT_TRI_AREA, + /* 0x0b9 */ OPT_TRI_HEIGHT, + /* 0x0ba */ OPT_FLAG_FILE, + /* 0x0bb */ OPT_XTRIDATA, + /* 0x0bc */ OPT_KMP, + /* 0x0bd */ OPT_SPEED_MOD, + /* 0x0be */ OPT_KTPT2, + /* 0x0bf */ OPT_TFORM_KMP, + /* 0x0c0 */ OPT_REPAIR_XPF, + /* 0x0c1 */ OPT_GAMEMODES, + /* 0x0c2 */ OPT_MDL, + /* 0x0c3 */ OPT_PAT, + /* 0x0c4 */ OPT_PATCH_FILE, + /* 0x0c5 */ OPT_KMG_LIMIT, + /* 0x0c6 */ OPT_KMG_COPY, + /* 0x0c7 */ OPT_LT_CLEAR, + /* 0x0c8 */ OPT_LT_ONLINE, + /* 0x0c9 */ OPT_LT_N_PLAYERS, + /* 0x0ca */ OPT_LT_COND_BIT, + /* 0x0cb */ OPT_LT_GAME_MODE, + /* 0x0cc */ OPT_LT_ENGINE, + /* 0x0cd */ OPT_LT_RANDOM, + /* 0x0ce */ OPT_LEX_PURGE, + /* 0x0cf */ OPT_LEX_FEATURES, + /* 0x0d0 */ OPT_LEX_RM_FEAT, + /* 0x0d1 */ OPT_LOAD_BMG, + /* 0x0d2 */ OPT_PATCH_BMG, + /* 0x0d3 */ OPT_MACRO_BMG, + /* 0x0d4 */ OPT_FILTER_BMG, + /* 0x0d5 */ OPT_CACHE, + /* 0x0d6 */ OPT_CNAME, + /* 0x0d7 */ OPT_ID, + /* 0x0d8 */ OPT_BASE64, + /* 0x0d9 */ OPT_DB64, + /* 0x0da */ OPT_CODING, + /* 0x0db */ OPT_VERIFY, + /* 0x0dc */ OPT_ROUND, + /* 0x0dd */ OPT_PIPE, + /* 0x0de */ OPT_DELTA, + /* 0x0df */ OPT_DIFF, + /* 0x0e0 */ OPT_EPSILON, + /* 0x0e1 */ OPT_BMG_ENDIAN, + /* 0x0e2 */ OPT_BMG_ENCODING, + /* 0x0e3 */ OPT_BMG_INF_SIZE, + /* 0x0e4 */ OPT_BMG_MID, + /* 0x0e5 */ OPT_FORCE_ATTRIB, + /* 0x0e6 */ OPT_DEF_ATTRIB, + /* 0x0e7 */ OPT_NO_ATTRIB, + /* 0x0e8 */ OPT_X_ESCAPES, + /* 0x0e9 */ OPT_OLD_ESCAPES, + /* 0x0ea */ OPT_NO_BMG_COLORS, + /* 0x0eb */ OPT_BMG_COLORS, + /* 0x0ec */ OPT_NO_BMG_INLINE, + /* 0x0ed */ OPT_AUTOADD_PATH, + /* 0x0ee */ OPT_STRIP, + /* 0x0ef */ OPT_UTF_8, + /* 0x0f0 */ OPT_NO_UTF_8, + /* 0x0f1 */ OPT_FORCE, + /* 0x0f2 */ OPT_REPAIR_MAGICS, + /* 0x0f3 */ OPT_TINY, + /* 0x0f4 */ OPT_YAZ0, + /* 0x0f5 */ OPT_YAZ1, + /* 0x0f6 */ OPT_XYZ, + /* 0x0f7 */ OPT_BZ, + /* 0x0f8 */ OPT_SH, + /* 0x0f9 */ OPT_BASH, + /* 0x0fa */ OPT_JSON, + /* 0x0fb */ OPT_PHP, + /* 0x0fc */ OPT_MAKEDOC, + /* 0x0fd */ OPT_VAR, + /* 0x0fe */ OPT_ARRAY, + /* 0x0ff */ OPT_AVAR, + /* 0x100 */ OPT_CASE, + /* 0x101 */ OPT_PMODES, + /* 0x102 */ OPT_FMODES, + /* 0x103 */ OPT_INSTALL, + /* 0x104 */ OPT_ANALYZE, + /* 0x105 */ OPT_ANALYZE_MODE, + /* 0x106 */ OPT_OLD, + /* 0x107 */ OPT_STD, + /* 0x108 */ OPT_NEW, + /* 0x109 */ OPT_EXTRACT, + /* 0x10a */ OPT_REFERENCE, + /* 0x10b */ OPT_NUMBER, + /* 0x10c */ OPT_REMOVE_SRC, + /* 0x10d */ OPT_IGNORE_SETUP, + /* 0x10e */ OPT_PURGE, + /* 0x10f */ OPT_ALIGN_U8, + /* 0x110 */ OPT_ALIGN_PACK, + /* 0x111 */ OPT_ALIGN_BRRES, + /* 0x112 */ OPT_ALIGN_BREFF, + /* 0x113 */ OPT_ALIGN_BREFT, + /* 0x114 */ OPT_ALIGN, + /* 0x115 */ OPT_ENCODE_ALL, + /* 0x116 */ OPT_ENCODE_IMG, + /* 0x117 */ OPT_NO_ENCODE, + /* 0x118 */ OPT_NO_RECURSE, + /* 0x119 */ OPT_AUTO_ADD, + /* 0x11a */ OPT_NO_ECHO, + /* 0x11b */ OPT_PT_DIR, + /* 0x11c */ OPT_RM_AIPARAM, + /* 0x11d */ OPT_U8, + /* 0x11e */ OPT_SZS, + /* 0x11f */ OPT_WU8, + /* 0x120 */ OPT_XWU8, + /* 0x121 */ OPT_WBZ, + /* 0x122 */ OPT_PACK, + /* 0x123 */ OPT_BRRES, + /* 0x124 */ OPT_BREFF, + /* 0x125 */ OPT_BREFT, + /* 0x126 */ OPT_NO_COMPRESS, + /* 0x127 */ OPT_FAST, + /* 0x128 */ OPT_LINKS, + /* 0x129 */ OPT_BASEDIR, + /* 0x12a */ OPT_DECODE, + /* 0x12b */ OPT_MIPMAPS, + /* 0x12c */ OPT_NO_MIPMAPS, + /* 0x12d */ OPT_N_MIPMAPS, + /* 0x12e */ OPT_MAX_MIPMAPS, + /* 0x12f */ OPT_MIPMAP_SIZE, + /* 0x130 */ OPT_FAST_MIPMAPS, + /* 0x131 */ OPT_CMPR_DEFAULT, + /* 0x132 */ OPT_CUT, + /* 0x133 */ OPT_RAW, + /* 0x134 */ OPT_SECTIONS, + /* 0x135 */ 0, }; // @@ -3015,724 +3034,724 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /////////////// opt_allowed_cmd_* /////////////// /////////////////////////////////////////////////////////////////////////////// -static u8 option_allowed_cmd_VERSION[136] = // cmd #1 +static u8 option_allowed_cmd_VERSION[137] = // cmd #1 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 1,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1 }; -static u8 option_allowed_cmd_HELP[136] = // cmd #2 +static u8 option_allowed_cmd_HELP[137] = // cmd #2 { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1 + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1 }; -static u8 option_allowed_cmd_CONFIG[136] = // cmd #3 +static u8 option_allowed_cmd_CONFIG[137] = // cmd #3 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 1,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,1,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1 }; -static u8 option_allowed_cmd_INSTALL[136] = // cmd #4 +static u8 option_allowed_cmd_INSTALL[137] = // cmd #4 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_ARGTEST[136] = // cmd #5 +static u8 option_allowed_cmd_ARGTEST[137] = // cmd #5 { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1 + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1 }; -static u8 option_allowed_cmd_EXPAND[136] = // cmd #6 +static u8 option_allowed_cmd_EXPAND[137] = // cmd #6 { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1 + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1 }; -static u8 option_allowed_cmd_TEST[136] = // cmd #7 +static u8 option_allowed_cmd_TEST[137] = // cmd #7 { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1 + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1 }; -static u8 option_allowed_cmd_COLORS[136] = // cmd #8 +static u8 option_allowed_cmd_COLORS[137] = // cmd #8 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 1,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_ERROR[136] = // cmd #9 +static u8 option_allowed_cmd_ERROR[137] = // cmd #9 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1 }; -static u8 option_allowed_cmd_FILETYPE[136] = // cmd #10 +static u8 option_allowed_cmd_FILETYPE[137] = // cmd #10 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_FILEATTRIB[136] = // cmd #11 +static u8 option_allowed_cmd_FILEATTRIB[137] = // cmd #11 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_BRSUB[136] = // cmd #12 +static u8 option_allowed_cmd_BRSUB[137] = // cmd #12 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_SYMBOLS[136] = // cmd #13 +static u8 option_allowed_cmd_SYMBOLS[137] = // cmd #13 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_FUNCTIONS[136] = // cmd #14 +static u8 option_allowed_cmd_FUNCTIONS[137] = // cmd #14 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_CALCULATE[136] = // cmd #15 +static u8 option_allowed_cmd_CALCULATE[137] = // cmd #15 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_MATRIX[136] = // cmd #16 +static u8 option_allowed_cmd_MATRIX[137] = // cmd #16 { - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 1,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_FLOAT[136] = // cmd #17 +static u8 option_allowed_cmd_FLOAT[137] = // cmd #17 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_VR_CALC[136] = // cmd #18 +static u8 option_allowed_cmd_VR_CALC[137] = // cmd #18 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_VR_RACE[136] = // cmd #19 +static u8 option_allowed_cmd_VR_RACE[137] = // cmd #19 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_AUTOADD[136] = // cmd #20 +static u8 option_allowed_cmd_AUTOADD[137] = // cmd #20 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,0,1,0, 0,1,0,1,1, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,1,0,1, 0,0,1,0,1, + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_TRACKS[136] = // cmd #21 +static u8 option_allowed_cmd_TRACKS[137] = // cmd #21 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,1,0, 0,1,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,1, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0 }; -static u8 option_allowed_cmd_SCANCACHE[136] = // cmd #22 +static u8 option_allowed_cmd_SCANCACHE[137] = // cmd #22 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_EXPORT[136] = // cmd #23 +static u8 option_allowed_cmd_EXPORT[137] = // cmd #23 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_SIZEOF[136] = // cmd #24 +static u8 option_allowed_cmd_SIZEOF[137] = // cmd #24 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_CODE[136] = // cmd #25 +static u8 option_allowed_cmd_CODE[137] = // cmd #25 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_RECODE[136] = // cmd #26 +static u8 option_allowed_cmd_RECODE[137] = // cmd #26 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_SUBFILE[136] = // cmd #27 +static u8 option_allowed_cmd_SUBFILE[137] = // cmd #27 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,1,1,1,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,0,1,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_TESTNORM[136] = // cmd #28 +static u8 option_allowed_cmd_TESTNORM[137] = // cmd #28 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_LIST[136] = // cmd #29 +static u8 option_allowed_cmd_LIST[137] = // cmd #29 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,1, - 1,0,1,1,0, 1,1,1,1,1, 1,1,1,1,0, 0 + 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, + 1,1,0,1,1, 0,1,1,1,1, 1,1,1,1,1, 0,0 }; -static u8 option_allowed_cmd_LIST_L[136] = // cmd #30 +static u8 option_allowed_cmd_LIST_L[137] = // cmd #30 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,1, - 1,0,1,1,0, 1,1,1,1,1, 1,1,1,1,0, 0 + 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, + 1,1,0,1,1, 0,1,1,1,1, 1,1,1,1,1, 0,0 }; -static u8 option_allowed_cmd_LIST_LL[136] = // cmd #31 +static u8 option_allowed_cmd_LIST_LL[137] = // cmd #31 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,1, - 1,0,1,1,0, 1,1,1,1,1, 1,1,1,1,0, 0 + 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, + 1,1,0,1,1, 0,1,1,1,1, 1,1,1,1,1, 0,0 }; -static u8 option_allowed_cmd_LIST_LLL[136] = // cmd #32 +static u8 option_allowed_cmd_LIST_LLL[137] = // cmd #32 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,1, - 1,0,1,1,0, 1,1,1,1,1, 1,1,1,1,0, 0 + 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, + 1,1,0,1,1, 0,1,1,1,1, 1,1,1,1,1, 0,0 }; -static u8 option_allowed_cmd_LIST_A[136] = // cmd #33 +static u8 option_allowed_cmd_LIST_A[137] = // cmd #33 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,1, - 1,0,1,1,0, 1,1,1,1,1, 1,1,1,1,0, 0 + 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, + 1,1,0,1,1, 0,1,1,1,1, 1,1,1,1,1, 0,0 }; -static u8 option_allowed_cmd_LIST_LA[136] = // cmd #34 +static u8 option_allowed_cmd_LIST_LA[137] = // cmd #34 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,1, - 1,0,1,1,0, 1,1,1,1,1, 1,1,1,1,0, 0 + 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, + 1,1,0,1,1, 0,1,1,1,1, 1,1,1,1,1, 0,0 }; -static u8 option_allowed_cmd_NAME_REF[136] = // cmd #35 +static u8 option_allowed_cmd_NAME_REF[137] = // cmd #35 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 1,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,1,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_ILIST[136] = // cmd #36 +static u8 option_allowed_cmd_ILIST[137] = // cmd #36 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,1, - 1,0,1,0,0, 1,1,1,1,1, 1,1,0,1,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, + 1,1,0,1,0, 0,1,1,1,1, 1,1,1,0,1, 0,0 }; -static u8 option_allowed_cmd_ILIST_L[136] = // cmd #37 +static u8 option_allowed_cmd_ILIST_L[137] = // cmd #37 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,1, - 1,0,1,0,0, 1,1,1,1,1, 1,1,0,1,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, + 1,1,0,1,0, 0,1,1,1,1, 1,1,1,0,1, 0,0 }; -static u8 option_allowed_cmd_ILIST_LL[136] = // cmd #38 +static u8 option_allowed_cmd_ILIST_LL[137] = // cmd #38 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,1, - 1,0,1,0,0, 1,1,1,1,1, 1,1,0,1,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, + 1,1,0,1,0, 0,1,1,1,1, 1,1,1,0,1, 0,0 }; -static u8 option_allowed_cmd_ILIST_A[136] = // cmd #39 +static u8 option_allowed_cmd_ILIST_A[137] = // cmd #39 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,1, - 1,0,1,0,0, 1,1,1,1,1, 1,1,0,1,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, + 1,1,0,1,0, 0,1,1,1,1, 1,1,1,0,1, 0,0 }; -static u8 option_allowed_cmd_ILIST_LA[136] = // cmd #40 +static u8 option_allowed_cmd_ILIST_LA[137] = // cmd #40 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,1, - 1,0,1,0,0, 1,1,1,1,1, 1,1,0,1,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, + 1,1,0,1,0, 0,1,1,1,1, 1,1,1,0,1, 0,0 }; -static u8 option_allowed_cmd_MEMORY[136] = // cmd #41 +static u8 option_allowed_cmd_MEMORY[137] = // cmd #41 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,1, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0 + 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, + 1,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0 }; -static u8 option_allowed_cmd_MEMORY_A[136] = // cmd #42 +static u8 option_allowed_cmd_MEMORY_A[137] = // cmd #42 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,1, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0 + 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, + 1,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0 }; -static u8 option_allowed_cmd_DUMP[136] = // cmd #43 +static u8 option_allowed_cmd_DUMP[137] = // cmd #43 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,1, - 1,0,0,0,0, 1,1,1,1,1, 1,1,0,1,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, + 1,1,0,0,0, 0,1,1,1,1, 1,1,1,0,1, 0,0 }; -static u8 option_allowed_cmd_SHA1[136] = // cmd #44 +static u8 option_allowed_cmd_SHA1[137] = // cmd #44 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,1, 1,1,0,1,0, 1,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,1, - 1,0,0,0,0, 1,1,1,1,1, 1,1,0,1,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,0,1, 0,1,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, + 1,1,0,0,0, 0,1,1,1,1, 1,1,1,0,1, 0,0 }; -static u8 option_allowed_cmd_ANALYZE[136] = // cmd #45 +static u8 option_allowed_cmd_ANALYZE[137] = // cmd #45 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,1, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,0,0, 0,0,0,0,0, + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1 }; -static u8 option_allowed_cmd_SPLIT[136] = // cmd #46 +static u8 option_allowed_cmd_SPLIT[137] = // cmd #46 { - 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,1, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,1,0,0, 0,0,0,0,0, + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1 }; -static u8 option_allowed_cmd_IS_TEXTURE[136] = // cmd #47 +static u8 option_allowed_cmd_IS_TEXTURE[137] = // cmd #47 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,1, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_FEATURES[136] = // cmd #48 +static u8 option_allowed_cmd_FEATURES[137] = // cmd #48 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 1,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,1, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,1,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,1,1,0,0, 0,0,0,0,0, + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1 }; -static u8 option_allowed_cmd_DISTRIBUTION[136] = // cmd #49 +static u8 option_allowed_cmd_DISTRIBUTION[137] = // cmd #49 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,1,1,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,1, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,1, - 1,0,0,0,0, 1,1,1,1,1, 1,1,0,1,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, + 1,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, + 1,1,0,0,0, 0,1,1,1,1, 1,1,1,0,1, 0,0 }; -static u8 option_allowed_cmd_DIFF[136] = // cmd #50 +static u8 option_allowed_cmd_DIFF[137] = // cmd #50 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,1,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,1,0,0, 0,0,0,0,0, 0,0,1,1,0, 0 + 0,0,0,1,0, 0,0,0,0,0, 0,0,0,1,1, 0,0 }; -static u8 option_allowed_cmd_CHECK[136] = // cmd #51 +static u8 option_allowed_cmd_CHECK[137] = // cmd #51 { - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 0,1,0,0,1, 1,1,0,0,0, 0,0,0,1,0, 1,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,0, - 1,0,0,0,0, 1,1,1,1,1, 1,1,0,1,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,0,1,0,0, 1,1,1,0,0, 0,0,0,0,1, 0,1,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, + 0,1,0,0,0, 0,1,1,1,1, 1,1,1,0,1, 0,0 }; -static u8 option_allowed_cmd_SLOTS[136] = // cmd #52 +static u8 option_allowed_cmd_SLOTS[137] = // cmd #52 { - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 0,1,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,0, - 1,0,0,0,0, 1,1,1,1,1, 1,1,0,1,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,0,1,0,0, 1,1,1,0,0, 0,0,0,0,0, 0,1,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,0,0,0, + 0,1,0,0,0, 0,1,1,1,1, 1,1,1,0,1, 0,0 }; -static u8 option_allowed_cmd_STGI[136] = // cmd #53 +static u8 option_allowed_cmd_STGI[137] = // cmd #53 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_ISARENA[136] = // cmd #54 +static u8 option_allowed_cmd_ISARENA[137] = // cmd #54 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_NORMALIZE[136] = // cmd #55 +static u8 option_allowed_cmd_NORMALIZE[137] = // cmd #55 { - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 0,1,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, - 0,0,1,1,1, 1,1,1,0,0, 0,0,1,0,0, 1,1,1,1,1, 1,1,0,0,0, 0,0,0,1,1, - 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,0,1,0,0, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,1,1,1,1, + 1,0,0,1,1, 1,1,1,1,0, 0,0,0,1,0, 0,1,1,1,1, 1,1,1,0,0, 0,0,0,0,1, + 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_PATCH[136] = // cmd #56 +static u8 option_allowed_cmd_PATCH[137] = // cmd #56 { - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 0,1,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, - 0,0,1,1,1, 1,1,1,0,0, 0,0,1,0,0, 1,1,1,1,1, 1,1,0,0,0, 0,0,1,1,1, - 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,0,1,0,0, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,1,1,1,1, + 1,0,0,1,1, 1,1,1,1,0, 0,0,0,1,0, 0,1,1,1,1, 1,1,1,0,0, 0,0,0,1,1, + 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_COPY[136] = // cmd #57 +static u8 option_allowed_cmd_COPY[137] = // cmd #57 { - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 0,1,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, - 0,0,1,1,1, 1,1,1,0,0, 0,0,1,0,0, 1,1,1,1,1, 1,1,0,0,0, 0,0,1,1,1, - 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,0,1,0,0, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,1,1,1,1, + 1,0,0,1,1, 1,1,1,1,0, 0,0,0,1,0, 0,1,1,1,1, 1,1,1,0,0, 0,0,0,1,1, + 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_DUPLICATE[136] = // cmd #58 +static u8 option_allowed_cmd_DUPLICATE[137] = // cmd #58 { - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 0,1,1,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, - 0,0,1,1,1, 1,1,1,0,0, 0,0,1,0,0, 1,1,1,1,1, 1,1,0,0,0, 0,0,1,1,1, - 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,0,1,1,0, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,1,1,1,1, + 1,0,0,1,1, 1,1,1,1,0, 0,0,0,1,0, 0,1,1,1,1, 1,1,1,0,0, 0,0,0,1,1, + 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_MINIMAP[136] = // cmd #59 +static u8 option_allowed_cmd_MINIMAP[137] = // cmd #59 { - 0,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,1,1, - 0,0,1,1,1, 1,1,1,0,0, 0,0,1,0,0, 1,1,0,0,0, 0,0,0,0,0, 0,0,1,1,1, - 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,1, + 1,0,0,1,1, 1,1,1,1,0, 0,0,0,1,0, 0,1,1,0,0, 0,0,0,0,0, 0,0,0,1,1, + 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_COMPRESS[136] = // cmd #60 +static u8 option_allowed_cmd_COMPRESS[137] = // cmd #60 { - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 0,1,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, - 0,0,1,1,1, 1,1,1,0,0, 0,0,1,0,0, 1,1,1,1,1, 1,1,0,0,0, 0,0,1,1,1, - 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,0,1,0,0, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,1,1,1,1, + 1,0,0,1,1, 1,1,1,1,0, 0,0,0,1,0, 0,1,1,1,1, 1,1,1,0,0, 0,0,0,1,1, + 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_DECOMPRESS[136] = // cmd #61 +static u8 option_allowed_cmd_DECOMPRESS[137] = // cmd #61 { - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 0,1,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, - 0,0,1,1,1, 1,1,1,0,0, 0,0,1,0,0, 1,1,1,0,1, 0,0,0,0,0, 0,0,0,0,1, - 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,0,1,0,0, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,1,1,1,1, + 1,0,0,1,1, 1,1,1,1,0, 0,0,0,1,0, 0,1,1,1,0, 1,0,0,0,0, 0,0,0,0,0, + 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_ENCODE[136] = // cmd #62 +static u8 option_allowed_cmd_ENCODE[137] = // cmd #62 { - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 0,1,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 1,0,1,1,1, 1,1,1,1,1, 1,1,0,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 1,1,1,1,1, 1,1,0,1,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,0,1,0,0, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,1,0,1,1, 1,1,1,1,1, 1,1,1,0,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,1,1,1,1, 1,1,1,0,1, 0,0 }; -static u8 option_allowed_cmd_CREATE[136] = // cmd #63 +static u8 option_allowed_cmd_CREATE[137] = // cmd #63 { - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 0,1,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,1,1,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,1,1,1,0, - 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, - 1,0,0,0,0, 1,1,1,1,1, 1,1,0,1,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,0,1,0,0, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,1,1,1,1, 1,0,1,1,1, + 0,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 0,1,0,0,0, 0,1,1,1,1, 1,1,1,0,1, 0,0 }; -static u8 option_allowed_cmd_UPDATE[136] = // cmd #64 +static u8 option_allowed_cmd_UPDATE[137] = // cmd #64 { - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 0,1,0,0,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,1,1,0,0, 0,0,0,1,0, 1,1,1,1,1, 0,1,1,1,1, - 0,0,0,0,0, 0,0,0,1,1, 1,1,0,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,0, - 0,0,1,0,0, 0,0,0,0,0, 0,0,0,1,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,0,1,0,0, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,1, 0,1,1,1,1, 1,0,1,1,1, + 1,0,0,0,0, 0,0,0,0,1, 1,1,1,0,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,1,1,1, + 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,1, 0,0 }; -static u8 option_allowed_cmd_EXTRACT[136] = // cmd #65 +static u8 option_allowed_cmd_EXTRACT[137] = // cmd #65 { - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 0,1,0,0,1, 1,1,0,0,0, 0,0,0,0,1, 1,0,1,1,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,1,1,0,0, 1,1,1,1,1, 0,1,1,1,1, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 1,1,1,1,1, 1,1,0,0,0, 1,1,1,1,1, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,0,1,0,0, 1,1,1,0,0, 0,0,0,0,0, 1,1,0,1,1, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,1,1,0, 0,1,1,1,1, 1,0,1,1,1, + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,1,1,1,1, 1,1,1,0,0, 0,1,1,1,1, 1,0 }; -static u8 option_allowed_cmd_XDECODE[136] = // cmd #66 +static u8 option_allowed_cmd_XDECODE[137] = // cmd #66 { - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 0,1,0,0,1, 1,1,0,0,0, 0,0,0,0,1, 1,0,1,1,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,1,1,0,0, 1,1,1,1,1, 0,1,1,1,1, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 1,1,1,1,1, 1,1,0,0,0, 1,1,1,1,1, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,0,1,0,0, 1,1,1,0,0, 0,0,0,0,0, 1,1,0,1,1, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,1,1,0, 0,1,1,1,1, 1,0,1,1,1, + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,1,1,1,1, 1,1,1,0,0, 0,1,1,1,1, 1,0 }; -static u8 option_allowed_cmd_XEXPORT[136] = // cmd #67 +static u8 option_allowed_cmd_XEXPORT[137] = // cmd #67 { - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 0,1,0,0,1, 1,1,0,0,0, 0,0,0,0,1, 1,0,1,1,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,1,1,0,0, 1,1,1,1,1, 0,1,1,1,1, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 1,1,1,1,1, 1,1,0,0,0, 1,1,1,1,1, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,0,1,0,0, 1,1,1,0,0, 0,0,0,0,0, 1,1,0,1,1, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,1,1,0, 0,1,1,1,1, 1,0,1,1,1, + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,1,1,1,1, 1,1,1,0,0, 0,1,1,1,1, 1,0 }; -static u8 option_allowed_cmd_XALL[136] = // cmd #68 +static u8 option_allowed_cmd_XALL[137] = // cmd #68 { - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 0,1,0,0,1, 1,1,0,0,0, 0,0,0,0,1, 1,0,1,1,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,1,1,0,0, 1,1,1,1,1, 0,1,1,1,1, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 1,1,1,1,1, 1,1,0,0,0, 1,1,1,1,1, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,0,1,0,0, 1,1,1,0,0, 0,0,0,0,0, 1,1,0,1,1, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,1,1,0, 0,1,1,1,1, 1,0,1,1,1, + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,1,1,1,1, 1,1,1,0,0, 0,1,1,1,1, 1,0 }; -static u8 option_allowed_cmd_XCOMMON[136] = // cmd #69 +static u8 option_allowed_cmd_XCOMMON[137] = // cmd #69 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,1,1,1,1, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,0,1,1,1, + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_BINARY[136] = // cmd #70 +static u8 option_allowed_cmd_BINARY[137] = // cmd #70 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,1,1,1,1, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,0,1,1,1, + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_TEXT[136] = // cmd #71 +static u8 option_allowed_cmd_TEXT[137] = // cmd #71 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,0,1,1,0, 1,1,1,1,1, - 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,1,1,1,1, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,0,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,0,1,1,1, + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_CAT[136] = // cmd #72 +static u8 option_allowed_cmd_CAT[137] = // cmd #72 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,0,1,1,0, 1,1,1,1,1, - 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,0,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_BMG[136] = // cmd #73 +static u8 option_allowed_cmd_BMG[137] = // cmd #73 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,0,0,0,0, 1,1,1,1,1, - 1,1,1,1,1, 1,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,0,0,0, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_KCL[136] = // cmd #74 +static u8 option_allowed_cmd_KCL[137] = // cmd #74 { - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 0,1,0,0,1, 1,1,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,0,1,0,0, 1,1,1,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_KMP[136] = // cmd #75 +static u8 option_allowed_cmd_KMP[137] = // cmd #75 { - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1,1,1,1, 0,1,0,0,1, 1,1,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,0,1,0,0, 1,1,1,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_LEX[136] = // cmd #76 +static u8 option_allowed_cmd_LEX[137] = // cmd #76 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_INFO[136] = // cmd #77 +static u8 option_allowed_cmd_INFO[137] = // cmd #77 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_GHOST[136] = // cmd #78 +static u8 option_allowed_cmd_GHOST[137] = // cmd #78 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 0,0,0,0,1, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,1,0,0, 0,0,0,0,0, + 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1 }; -static u8 option_allowed_cmd_YAZDUMP[136] = // cmd #79 +static u8 option_allowed_cmd_YAZDUMP[137] = // cmd #79 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,1,1,1,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,0,1,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; -static u8 option_allowed_cmd_VEHICLE[136] = // cmd #80 +static u8 option_allowed_cmd_VEHICLE[137] = // cmd #80 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 1,1,0,1,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,1,1,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0 + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 }; @@ -3755,6 +3774,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_WARN, OptionInfo + OPT_DE, @@ -3790,6 +3810,8 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_LT_ENGINE, OptionInfo + OPT_LT_RANDOM, OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_LEX_FEATURES, + OptionInfo + OPT_LEX_RM_FEAT, OptionInfo + OPT_CACHE, OptionInfo + OPT_CNAME, OptionInfo + OPT_MAX_FILE_SIZE, @@ -4052,6 +4074,7 @@ static const InfoOption_t * option_tab_cmd_SIZEOF[] = &option_cmd_SIZEOF_SORT, &option_cmd_SIZEOF_BRIEF, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, 0 @@ -4126,6 +4149,7 @@ static const InfoOption_t * option_tab_cmd_LIST[] = OptionInfo + OPT_ALIGN_BREFT, OptionInfo + OPT_ALIGN, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_ENCODE_ALL, OptionInfo + OPT_ENCODE_IMG, @@ -4190,6 +4214,7 @@ static const InfoOption_t * option_tab_cmd_LIST_L[] = OptionInfo + OPT_ALIGN_BREFT, OptionInfo + OPT_ALIGN, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_ENCODE_ALL, OptionInfo + OPT_ENCODE_IMG, @@ -4254,6 +4279,7 @@ static const InfoOption_t * option_tab_cmd_LIST_LL[] = OptionInfo + OPT_ALIGN_BREFT, OptionInfo + OPT_ALIGN, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_ENCODE_ALL, OptionInfo + OPT_ENCODE_IMG, @@ -4318,6 +4344,7 @@ static const InfoOption_t * option_tab_cmd_LIST_LLL[] = OptionInfo + OPT_ALIGN_BREFT, OptionInfo + OPT_ALIGN, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_ENCODE_ALL, OptionInfo + OPT_ENCODE_IMG, @@ -4382,6 +4409,7 @@ static const InfoOption_t * option_tab_cmd_LIST_A[] = OptionInfo + OPT_ALIGN_BREFT, OptionInfo + OPT_ALIGN, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_ENCODE_ALL, OptionInfo + OPT_ENCODE_IMG, @@ -4446,6 +4474,7 @@ static const InfoOption_t * option_tab_cmd_LIST_LA[] = OptionInfo + OPT_ALIGN_BREFT, OptionInfo + OPT_ALIGN, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_ENCODE_ALL, OptionInfo + OPT_ENCODE_IMG, @@ -4517,6 +4546,7 @@ static const InfoOption_t * option_tab_cmd_ILIST[] = OptionInfo + OPT_ALIGN_BREFT, OptionInfo + OPT_ALIGN, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_ENCODE_ALL, OptionInfo + OPT_ENCODE_IMG, @@ -4578,6 +4608,7 @@ static const InfoOption_t * option_tab_cmd_ILIST_L[] = OptionInfo + OPT_ALIGN_BREFT, OptionInfo + OPT_ALIGN, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_ENCODE_ALL, OptionInfo + OPT_ENCODE_IMG, @@ -4639,6 +4670,7 @@ static const InfoOption_t * option_tab_cmd_ILIST_LL[] = OptionInfo + OPT_ALIGN_BREFT, OptionInfo + OPT_ALIGN, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_ENCODE_ALL, OptionInfo + OPT_ENCODE_IMG, @@ -4700,6 +4732,7 @@ static const InfoOption_t * option_tab_cmd_ILIST_A[] = OptionInfo + OPT_ALIGN_BREFT, OptionInfo + OPT_ALIGN, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_ENCODE_ALL, OptionInfo + OPT_ENCODE_IMG, @@ -4761,6 +4794,7 @@ static const InfoOption_t * option_tab_cmd_ILIST_LA[] = OptionInfo + OPT_ALIGN_BREFT, OptionInfo + OPT_ALIGN, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_ENCODE_ALL, OptionInfo + OPT_ENCODE_IMG, @@ -4827,6 +4861,7 @@ static const InfoOption_t * option_tab_cmd_MEMORY[] = OptionInfo + OPT_ALIGN_BREFT, OptionInfo + OPT_ALIGN, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_ENCODE_ALL, OptionInfo + OPT_ENCODE_IMG, @@ -4893,6 +4928,7 @@ static const InfoOption_t * option_tab_cmd_MEMORY_A[] = OptionInfo + OPT_ALIGN_BREFT, OptionInfo + OPT_ALIGN, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_ENCODE_ALL, OptionInfo + OPT_ENCODE_IMG, @@ -4949,6 +4985,7 @@ static const InfoOption_t * option_tab_cmd_DUMP[] = OptionInfo + OPT_ALIGN_BREFT, OptionInfo + OPT_ALIGN, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_ENCODE_ALL, OptionInfo + OPT_ENCODE_IMG, @@ -5008,6 +5045,7 @@ static const InfoOption_t * option_tab_cmd_SHA1[] = OptionInfo + OPT_ALIGN_BREFT, OptionInfo + OPT_ALIGN, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_ENCODE_ALL, OptionInfo + OPT_ENCODE_IMG, @@ -5075,6 +5113,7 @@ static const InfoOption_t * option_tab_cmd_SPLIT[] = { OptionInfo + OPT_LOAD_PREFIX, OptionInfo + OPT_PLUS, + OptionInfo + OPT_PRINTF, OptionInfo + OPT_NONE, // separator @@ -5170,6 +5209,7 @@ static const InfoOption_t * option_tab_cmd_DISTRIBUTION[] = OptionInfo + OPT_ALIGN_BREFT, OptionInfo + OPT_ALIGN, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_ENCODE_ALL, OptionInfo + OPT_ENCODE_IMG, @@ -5248,6 +5288,7 @@ static const InfoOption_t * option_tab_cmd_CHECK[] = OptionInfo + OPT_ALIGN_BREFT, OptionInfo + OPT_ALIGN, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_ENCODE_ALL, OptionInfo + OPT_ENCODE_IMG, @@ -5316,6 +5357,8 @@ static const InfoOption_t * option_tab_cmd_CHECK[] = OptionInfo + OPT_LT_ENGINE, OptionInfo + OPT_LT_RANDOM, OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_LEX_FEATURES, + OptionInfo + OPT_LEX_RM_FEAT, OptionInfo + OPT_PATCH_BMG, OptionInfo + OPT_MACRO_BMG, OptionInfo + OPT_FILTER_BMG, @@ -5352,6 +5395,7 @@ static const InfoOption_t * option_tab_cmd_SLOTS[] = OptionInfo + OPT_ALIGN_BREFT, OptionInfo + OPT_ALIGN, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_ENCODE_ALL, OptionInfo + OPT_ENCODE_IMG, @@ -5421,6 +5465,8 @@ static const InfoOption_t * option_tab_cmd_SLOTS[] = OptionInfo + OPT_LT_ENGINE, OptionInfo + OPT_LT_RANDOM, OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_LEX_FEATURES, + OptionInfo + OPT_LEX_RM_FEAT, OptionInfo + OPT_PATCH_BMG, OptionInfo + OPT_MACRO_BMG, OptionInfo + OPT_FILTER_BMG, @@ -5535,6 +5581,8 @@ static const InfoOption_t * option_tab_cmd_NORMALIZE[] = OptionInfo + OPT_LT_ENGINE, OptionInfo + OPT_LT_RANDOM, OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_LEX_FEATURES, + OptionInfo + OPT_LEX_RM_FEAT, OptionInfo + OPT_PATCH_BMG, OptionInfo + OPT_MACRO_BMG, OptionInfo + OPT_FILTER_BMG, @@ -5628,6 +5676,8 @@ static const InfoOption_t * option_tab_cmd_PATCH[] = OptionInfo + OPT_LT_ENGINE, OptionInfo + OPT_LT_RANDOM, OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_LEX_FEATURES, + OptionInfo + OPT_LEX_RM_FEAT, OptionInfo + OPT_PATCH_BMG, OptionInfo + OPT_MACRO_BMG, OptionInfo + OPT_FILTER_BMG, @@ -5721,6 +5771,8 @@ static const InfoOption_t * option_tab_cmd_COPY[] = OptionInfo + OPT_LT_ENGINE, OptionInfo + OPT_LT_RANDOM, OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_LEX_FEATURES, + OptionInfo + OPT_LEX_RM_FEAT, OptionInfo + OPT_PATCH_BMG, OptionInfo + OPT_MACRO_BMG, OptionInfo + OPT_FILTER_BMG, @@ -5815,6 +5867,8 @@ static const InfoOption_t * option_tab_cmd_DUPLICATE[] = OptionInfo + OPT_LT_ENGINE, OptionInfo + OPT_LT_RANDOM, OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_LEX_FEATURES, + OptionInfo + OPT_LEX_RM_FEAT, OptionInfo + OPT_PATCH_BMG, OptionInfo + OPT_MACRO_BMG, OptionInfo + OPT_FILTER_BMG, @@ -5963,6 +6017,8 @@ static const InfoOption_t * option_tab_cmd_COMPRESS[] = OptionInfo + OPT_LT_ENGINE, OptionInfo + OPT_LT_RANDOM, OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_LEX_FEATURES, + OptionInfo + OPT_LEX_RM_FEAT, OptionInfo + OPT_PATCH_BMG, OptionInfo + OPT_MACRO_BMG, OptionInfo + OPT_FILTER_BMG, @@ -6046,6 +6102,8 @@ static const InfoOption_t * option_tab_cmd_DECOMPRESS[] = OptionInfo + OPT_LT_ENGINE, OptionInfo + OPT_LT_RANDOM, OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_LEX_FEATURES, + OptionInfo + OPT_LEX_RM_FEAT, OptionInfo + OPT_PATCH_BMG, OptionInfo + OPT_MACRO_BMG, OptionInfo + OPT_FILTER_BMG, @@ -6063,6 +6121,7 @@ static const InfoOption_t * option_tab_cmd_ENCODE[] = OptionInfo + OPT_ALIGN_BREFT, OptionInfo + OPT_ALIGN, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_ENCODE_ALL, OptionInfo + OPT_ENCODE_IMG, @@ -6131,6 +6190,8 @@ static const InfoOption_t * option_tab_cmd_ENCODE[] = OptionInfo + OPT_LT_ENGINE, OptionInfo + OPT_LT_RANDOM, OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_LEX_FEATURES, + OptionInfo + OPT_LEX_RM_FEAT, OptionInfo + OPT_PATCH_BMG, OptionInfo + OPT_MACRO_BMG, OptionInfo + OPT_FILTER_BMG, @@ -6176,6 +6237,7 @@ static const InfoOption_t * option_tab_cmd_CREATE[] = OptionInfo + OPT_ALIGN_BREFT, OptionInfo + OPT_ALIGN, OptionInfo + OPT_LOGGING, + OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_ENCODE_ALL, OptionInfo + OPT_ENCODE_IMG, @@ -6248,6 +6310,8 @@ static const InfoOption_t * option_tab_cmd_CREATE[] = OptionInfo + OPT_LT_ENGINE, OptionInfo + OPT_LT_RANDOM, OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_LEX_FEATURES, + OptionInfo + OPT_LEX_RM_FEAT, OptionInfo + OPT_PATCH_BMG, OptionInfo + OPT_MACRO_BMG, OptionInfo + OPT_FILTER_BMG, @@ -6334,6 +6398,8 @@ static const InfoOption_t * option_tab_cmd_UPDATE[] = OptionInfo + OPT_LT_ENGINE, OptionInfo + OPT_LT_RANDOM, OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_LEX_FEATURES, + OptionInfo + OPT_LEX_RM_FEAT, OptionInfo + OPT_PATCH_BMG, OptionInfo + OPT_MACRO_BMG, OptionInfo + OPT_FILTER_BMG, @@ -6419,6 +6485,8 @@ static const InfoOption_t * option_tab_cmd_EXTRACT[] = OptionInfo + OPT_LT_ENGINE, OptionInfo + OPT_LT_RANDOM, OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_LEX_FEATURES, + OptionInfo + OPT_LEX_RM_FEAT, OptionInfo + OPT_PATCH_BMG, OptionInfo + OPT_MACRO_BMG, OptionInfo + OPT_FILTER_BMG, @@ -6504,6 +6572,8 @@ static const InfoOption_t * option_tab_cmd_XDECODE[] = OptionInfo + OPT_LT_ENGINE, OptionInfo + OPT_LT_RANDOM, OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_LEX_FEATURES, + OptionInfo + OPT_LEX_RM_FEAT, OptionInfo + OPT_PATCH_BMG, OptionInfo + OPT_MACRO_BMG, OptionInfo + OPT_FILTER_BMG, @@ -6589,6 +6659,8 @@ static const InfoOption_t * option_tab_cmd_XEXPORT[] = OptionInfo + OPT_LT_ENGINE, OptionInfo + OPT_LT_RANDOM, OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_LEX_FEATURES, + OptionInfo + OPT_LEX_RM_FEAT, OptionInfo + OPT_PATCH_BMG, OptionInfo + OPT_MACRO_BMG, OptionInfo + OPT_FILTER_BMG, @@ -6674,6 +6746,8 @@ static const InfoOption_t * option_tab_cmd_XALL[] = OptionInfo + OPT_LT_ENGINE, OptionInfo + OPT_LT_RANDOM, OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_LEX_FEATURES, + OptionInfo + OPT_LEX_RM_FEAT, OptionInfo + OPT_PATCH_BMG, OptionInfo + OPT_MACRO_BMG, OptionInfo + OPT_FILTER_BMG, @@ -6867,6 +6941,8 @@ static const InfoOption_t * option_tab_cmd_KCL[] = OptionInfo + OPT_LT_ENGINE, OptionInfo + OPT_LT_RANDOM, OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_LEX_FEATURES, + OptionInfo + OPT_LEX_RM_FEAT, OptionInfo + OPT_PATCH_BMG, OptionInfo + OPT_MACRO_BMG, OptionInfo + OPT_FILTER_BMG, @@ -6927,6 +7003,8 @@ static const InfoOption_t * option_tab_cmd_KMP[] = OptionInfo + OPT_LT_ENGINE, OptionInfo + OPT_LT_RANDOM, OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_LEX_FEATURES, + OptionInfo + OPT_LEX_RM_FEAT, OptionInfo + OPT_PATCH_BMG, OptionInfo + OPT_MACRO_BMG, OptionInfo + OPT_FILTER_BMG, @@ -7027,7 +7105,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " SZS, U8, PACK, BRRES, BREFF and BREFT archives. Additonally, RARC" " archive can be extracted. It is also a wrapper to all other tools.", 0, - 70, + 73, option_tab_tool, 0 }, @@ -7440,7 +7518,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "This hidden command prints a list with the size of data structures" " and variables.", 0, - 4, + 5, option_tab_cmd_SIZEOF, option_allowed_cmd_SIZEOF }, @@ -7515,7 +7593,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " archives. If listing a directory, then a virtual SZS file is created" " (like CREATE does it) and listed.", 0, - 49, + 50, option_tab_cmd_LIST, option_allowed_cmd_LIST }, @@ -7530,7 +7608,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "List all sub files with size. 'LIST-L' and 'LL' are short cuts for" " 'LIST --long'.", 0, - 49, + 50, option_tab_cmd_LIST_L, option_allowed_cmd_LIST_L }, @@ -7545,7 +7623,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "List all sub files with offset and size. 'LIST-LL' and 'LLL' are" " short cuts for 'LIST --long --long'.", 0, - 49, + 50, option_tab_cmd_LIST_LL, option_allowed_cmd_LIST_LL }, @@ -7560,7 +7638,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "List all sub files with offset and size in debugging mode. 'LIST-LLL'" " and 'LLLL' are short cuts for 'LIST --long --long --long'.", 0, - 49, + 50, option_tab_cmd_LIST_LLL, option_allowed_cmd_LIST_LLL }, @@ -7575,7 +7653,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "List recursive all sub files with size. 'LIST-A' and 'LA' are short" " cuts for 'LIST --long --all --all'.", 0, - 49, + 50, option_tab_cmd_LIST_A, option_allowed_cmd_LIST_A }, @@ -7590,7 +7668,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "List recursive all sub files with offset and size. 'LIST-LA' and" " 'LLA' are short cuts for 'LIST --long --long --all --all'.", 0, - 49, + 50, option_tab_cmd_LIST_LA, option_allowed_cmd_LIST_LA }, @@ -7624,7 +7702,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " listing a directory, then a virtual SZS file is created (like CREATE" " does it) and listed.", 0, - 46, + 47, option_tab_cmd_ILIST, option_allowed_cmd_ILIST }, @@ -7639,7 +7717,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "List all image files with geometry data. 'ILIST-L' and 'ILL' are" " short cuts for 'ILIST --long'.", 0, - 46, + 47, option_tab_cmd_ILIST_L, option_allowed_cmd_ILIST_L }, @@ -7654,7 +7732,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "List all sub files with advanced geometry data. 'ILIST-LL' and 'ILLL'" " are short cuts for 'ILIST --long --long'.", 0, - 46, + 47, option_tab_cmd_ILIST_LL, option_allowed_cmd_ILIST_LL }, @@ -7669,7 +7747,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "List recursive all image files. 'ILIST-A' and 'ILA' are short cuts" " for 'ILIST --all'.", 0, - 46, + 47, option_tab_cmd_ILIST_A, option_allowed_cmd_ILIST_A }, @@ -7684,7 +7762,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "List recursive all image files with geometry data. 'ILIST-LA' and" " 'ILLA' are short cuts for 'ILIST --long --all'.", 0, - 46, + 47, option_tab_cmd_ILIST_LA, option_allowed_cmd_ILIST_LA }, @@ -7699,7 +7777,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "Dump a memory map of each source file. Virtual images (extracted" " directories) are also supported.", 0, - 48, + 49, option_tab_cmd_MEMORY, option_allowed_cmd_MEMORY }, @@ -7714,7 +7792,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "Dump recursive a memory map of each source file. 'MEMORY-A' and" " 'MEMA' are short cuts for 'MEMORY --all --all'.", 0, - 48, + 49, option_tab_cmd_MEMORY_A, option_allowed_cmd_MEMORY_A }, @@ -7731,7 +7809,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " relocation. Virtual images (extracted directories) are also" " supported.", 0, - 42, + 43, option_tab_cmd_DUMP, option_allowed_cmd_DUMP }, @@ -7746,7 +7824,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "Print a SHA1 checksum for each source. The checksum is calculated by" " using the uncompressed data and after patching.", 0, - 49, + 50, option_tab_cmd_SHA1, option_allowed_cmd_SHA1 }, @@ -7775,7 +7853,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "Analyse (file) names and split them into the different parts. Print" " the results in machine readable format.", 0, - 15, + 16, option_tab_cmd_SPLIT, option_allowed_cmd_SPLIT }, @@ -7801,14 +7879,15 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = }, { CMD_FEATURES, - true, + false, false, false, "FEATURES", 0, "wszst FEATURES [source]...", - "Analyse track files and create a feature list in machine readable" - " format.", + "Analyse track files and create a feature list for each source in" + " machine readable format. CTGP uses the feature lists to manage" + " ghosts. See option --lex-features for details.", 0, 18, option_tab_cmd_FEATURES, @@ -7837,7 +7916,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " See »welect DISTRIBUTION« for a new and alternative implementation" " of this.", 0, - 46, + 47, option_tab_cmd_DISTRIBUTION, option_allowed_cmd_DISTRIBUTION }, @@ -7873,7 +7952,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " internal object and file database. The source can be a SZS, U8, WU8" " or WBZ file, or an U8 like directory.", 0, - 91, + 94, option_tab_cmd_CHECK, option_allowed_cmd_CHECK }, @@ -7891,7 +7970,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " positive or a negative slot list, whatever is shorter. For battle" " arenas, the keyword ARENA is printed.", 0, - 87, + 90, option_tab_cmd_SLOTS, option_allowed_cmd_SLOTS }, @@ -7949,7 +8028,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " changed.\n" " 'wszst NORMALIZE' is the same as 'wszst PATCH --norm'.", 0, - 74, + 76, option_tab_cmd_NORMALIZE, option_allowed_cmd_NORMALIZE }, @@ -7966,7 +8045,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " Compressed sources are compressed again. The destination is only" " written if any data changed.", 0, - 75, + 77, option_tab_cmd_PATCH, option_allowed_cmd_PATCH }, @@ -7987,7 +8066,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " destination filename with escapes. Patching is also possible and" " option --overwrite is set implicitly.", 0, - 75, + 77, option_tab_cmd_COPY, option_allowed_cmd_COPY }, @@ -8012,7 +8091,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " Use command 'wkmpt GAMEMODES' to list all variants and to check them" " beforehand.", 0, - 76, + 78, option_tab_cmd_DUPLICATE, option_allowed_cmd_DUPLICATE }, @@ -8046,7 +8125,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " compressed, then decompress and compress it again. The default" " destination is '%P/%N.szs'.", 0, - 75, + 77, option_tab_cmd_COMPRESS, option_allowed_cmd_COMPRESS }, @@ -8060,7 +8139,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "wszst DECOMPRESS [szs]...", "Decompress SZS files. The default destination is '%P/%N.u8'.", 0, - 68, + 70, option_tab_cmd_DECOMPRESS, option_allowed_cmd_DECOMPRESS }, @@ -8075,7 +8154,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " Create and/or encode sub files if necessary. It works like command" " CREATE, but without creating a new first level archive file.", 0, - 70, + 73, option_tab_cmd_ENCODE, option_allowed_cmd_ENCODE }, @@ -8091,7 +8170,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " not hidden files of the directory structure. Create and/or encode" " sub files if necessary. The default destination is '%P/%N%T'.", 0, - 96, + 99, option_tab_cmd_CREATE, option_allowed_cmd_CREATE }, @@ -8110,7 +8189,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " secondary source is used to find the source sub files. The default" " secondary source is '%P/%N.d/'.", 0, - 68, + 70, option_tab_cmd_UPDATE, option_allowed_cmd_UPDATE }, @@ -8125,7 +8204,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "Extract all sub files of SZS, U8, PACK, BRRES, BREFF, BREFT and RARC" " archives. The default destination is '%P/%N.d/'.", 0, - 73, + 75, option_tab_cmd_EXTRACT, option_allowed_cmd_EXTRACT }, @@ -8142,7 +8221,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " and decodes all supported files. The default destination is" " '%P/%N.d/'.", 0, - 73, + 75, option_tab_cmd_XDECODE, option_allowed_cmd_XDECODE }, @@ -8159,7 +8238,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " archives and decodes all supported files with enabled export mode." " The default destination is '%P/%N.d/'.", 0, - 73, + 75, option_tab_cmd_XEXPORT, option_allowed_cmd_XEXPORT }, @@ -8176,7 +8255,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " recursively and decodes all supported files. The default destination" " is '%P/%N.d/'.", 0, - 73, + 75, option_tab_cmd_XALL, option_allowed_cmd_XALL }, @@ -8277,7 +8356,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " Automated dropping of bad KCL triangles is enabled if no other drop" " option is specified by option --kcl.", 0, - 50, + 52, option_tab_cmd_KCL, option_allowed_cmd_KCL }, @@ -8292,7 +8371,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "For each archive the KMP sub file course.kmp is searched and, if" " found, decoded and printed (copied to stdout).", 0, - 51, + 53, option_tab_cmd_KMP, option_allowed_cmd_KMP }, diff --git a/project/src/ui/ui-wszst.h b/project/src/ui/ui-wszst.h index cdd1c7a..ef30a33 100644 --- a/project/src/ui/ui-wszst.h +++ b/project/src/ui/ui-wszst.h @@ -57,6 +57,7 @@ typedef enum enumOptions //----- command specific options ----- OPT_PLUS, + OPT_PRINTF, OPT_TOUCH, OPT_AUTO, OPT_SET_FLAGS, @@ -192,7 +193,7 @@ typedef enum enumOptions OPT_RAW, OPT_SECTIONS, - OPT__N_SPECIFIC, // == 136 + OPT__N_SPECIFIC, // == 137 //----- global options ----- @@ -208,6 +209,7 @@ typedef enum enumOptions OPT_QUIET, OPT_VERBOSE, OPT_LOGGING, + OPT_EXT_ERRORS, OPT_TIMING, OPT_WARN, OPT_DE, @@ -276,7 +278,7 @@ typedef enum enumOptions OPT_NEW, OPT_EXTRACT, - OPT__N_TOTAL // == 215 + OPT__N_TOTAL // == 217 } enumOptions; @@ -292,6 +294,7 @@ typedef enum enumOptions // //----- command specific options ----- // // OB_PLUS = 1llu << OPT_PLUS, +// OB_PRINTF = 1llu << OPT_PRINTF, // OB_TOUCH = 1llu << OPT_TOUCH, // OB_AUTO = 1llu << OPT_AUTO, // OB_SET_FLAGS = 1llu << OPT_SET_FLAGS, @@ -731,6 +734,7 @@ typedef enum enumOptions // | OB_DEST2, // // OB_CMD_SPLIT = OB_PLUS +// | OB_PRINTF // | OB_IGNORE // | OB_GRP_SCRIPT // | OB_DEST @@ -1077,6 +1081,7 @@ typedef enum enumGetOpt GO_VERSION = 'V', GO_WARN = 'W', GO_EXPORT = 'X', + GO_EXT_ERRORS = 'Y', GO_ALL = 'a', GO_CONST = 'c', @@ -1111,6 +1116,7 @@ typedef enum enumGetOpt GO_LE_CODE, GO_LOAD_PREFIX, GO_PLUS, + GO_PRINTF, GO_CHDIR, GO_TOUCH, GO_AUTO, diff --git a/project/src/ui/ui.def b/project/src/ui/ui.def index ed569a1..986824b 100644 --- a/project/src/ui/ui.def +++ b/project/src/ui/ui.def @@ -281,6 +281,12 @@ " CAME has been intentionally left out. Section ENPT is only checked" \ " if KCL contains a least one face of type force-recalculation." ) +#:def_cmd( "FEATURES", "FEATURES", \ + "wszst FEATURES [source]...", \ + "Analyse track files and create a feature list for each source in" \ + " machine readable format. CTGP uses the feature lists to manage" \ + " ghosts. See option {--lex-features} for details." ) + #:def_cmd( "DISTRIBUTION", "DISTRIBUTION|DIS|DISTRIB", \ "wszst DISTRIBUTION result source...\n" \ "wszst DISTRIBUTION directory [source]...", \ @@ -576,12 +582,18 @@ #:def_opt( "LOGGING", "L|logging", "GM", \ "", \ "This debug option enables the logging of internal lists and maps. Set" \ - " it up to three times to be more verbose.\n" ) + " it up to three times to be more verbose." ) + +#:def_opt( "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", "GM", \ + "", \ + "Enable extended error messages. This includes a source file and line" \ + " reference. Logging level 1 activates it too. @--xerr@ is a short" \ + " cut." ) #:def_opt( "TIMING", "timing", "GM", \ "", \ "Activate the timing of some operations. Logging level 3 activates" \ - " them too.\n" ) + " them too." ) #:def_opt( "WARN", "W|warn", "GP", \ "list", \ @@ -642,6 +654,10 @@ " If it is in parameter CHARS then the position determines the value," \ " otherwise the ASCII value to which 500 is added." ) +#:def_opt( "PRINTF", "printf", "CP", \ + "format", \ + "Add an output line with a formatted string." ) + #:def_opt( "CHDIR", "chdir", "GMP", \ "dir", \ "Set a new working directory for all following options, for all" \ @@ -1202,6 +1218,22 @@ " it no longer contains a section. This option is executed after all" \ " --lt-* and --lex-* options." ) +#:def_opt( "LEX_FEATURES", "lex-features|lexfeatures", "G", \ + "", \ + "Calculate LEX setion FEAT (features) by analysing the track file. If" \ + " no features found, delete the section and the possibly empty" \ + " sub-file course.lex. If features found, then insert the section or" \ + " update an existing section. If necessary, the sub-file course.lex is" \ + " created. This option is executed after all --lt-* options and after" \ + " --lex-purge.\n" \ + " CTGP uses the FEAT section to manage ghosts." ) + +#:def_opt( "LEX_RM_FEAT", "lex-rm-features|lexrmfeatures", "G", \ + "", \ + "Remove LEX setion FEAT (features) if exists and the possibly empty" \ + " sub-file course.lex. This option is ignored if --lex-features is" \ + " set. It is executed after all --lt-* options and after --lex-purge." ) + #:def_opt( "LOAD_BMG", "load-bmg|loadbmg", "CMP", \ "file", \ "Load immediately the file to fill an internal message pool. The" \ @@ -2314,6 +2346,10 @@ "", \ "" ) +#:def_cmd_opt( "SIZEOF", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "SIZEOF", "TIMING", \ "", \ "" ) @@ -2467,6 +2503,10 @@ "", \ "" ) +#:def_cmd_opt( "LIST", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "LIST", "TIMING", \ "", \ "" ) @@ -2664,6 +2704,10 @@ "", \ "" ) +#:def_cmd_opt( "LIST_L", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "LIST_L", "TIMING", \ "", \ "" ) @@ -2861,6 +2905,10 @@ "", \ "" ) +#:def_cmd_opt( "LIST_LL", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "LIST_LL", "TIMING", \ "", \ "" ) @@ -3058,6 +3106,10 @@ "", \ "" ) +#:def_cmd_opt( "LIST_LLL", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "LIST_LLL", "TIMING", \ "", \ "" ) @@ -3255,6 +3307,10 @@ "", \ "" ) +#:def_cmd_opt( "LIST_A", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "LIST_A", "TIMING", \ "", \ "" ) @@ -3452,6 +3508,10 @@ "", \ "" ) +#:def_cmd_opt( "LIST_LA", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "LIST_LA", "TIMING", \ "", \ "" ) @@ -3660,6 +3720,10 @@ "", \ "" ) +#:def_cmd_opt( "ILIST", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "ILIST", "TIMING", \ "", \ "" ) @@ -3845,6 +3909,10 @@ "", \ "" ) +#:def_cmd_opt( "ILIST_L", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "ILIST_L", "TIMING", \ "", \ "" ) @@ -4030,6 +4098,10 @@ "", \ "" ) +#:def_cmd_opt( "ILIST_LL", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "ILIST_LL", "TIMING", \ "", \ "" ) @@ -4215,6 +4287,10 @@ "", \ "" ) +#:def_cmd_opt( "ILIST_A", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "ILIST_A", "TIMING", \ "", \ "" ) @@ -4400,6 +4476,10 @@ "", \ "" ) +#:def_cmd_opt( "ILIST_LA", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "ILIST_LA", "TIMING", \ "", \ "" ) @@ -4593,6 +4673,10 @@ "", \ "" ) +#:def_cmd_opt( "MEMORY", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "MEMORY", "TIMING", \ "", \ "" ) @@ -4786,6 +4870,10 @@ "", \ "" ) +#:def_cmd_opt( "MEMORY_A", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "MEMORY_A", "TIMING", \ "", \ "" ) @@ -4950,6 +5038,10 @@ "", \ "" ) +#:def_cmd_opt( "DUMP", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "DUMP", "TIMING", \ "", \ "" ) @@ -5127,6 +5219,10 @@ "", \ "" ) +#:def_cmd_opt( "SHA1", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "SHA1", "TIMING", \ "", \ "" ) @@ -5307,6 +5403,10 @@ "", \ "" ) +#:def_cmd_opt( "SPLIT", "PRINTF", \ + "", \ + "" ) + #:def_cmd_opt( "SPLIT", "IGNORE", \ "", \ "" ) @@ -5546,6 +5646,10 @@ "", \ "" ) +#:def_cmd_opt( "DISTRIBUTION", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "DISTRIBUTION", "TIMING", \ "", \ "" ) @@ -5782,6 +5886,10 @@ "", \ "" ) +#:def_cmd_opt( "CHECK", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "CHECK", "TIMING", \ "", \ "" ) @@ -6019,6 +6127,14 @@ "", \ "" ) +#:def_cmd_opt( "CHECK", "LEX_FEATURES", \ + "", \ + "" ) + +#:def_cmd_opt( "CHECK", "LEX_RM_FEAT", \ + "", \ + "" ) + #:def_cmd_opt( "CHECK", "PATCH_BMG", \ "", \ "" ) @@ -6127,6 +6243,10 @@ "", \ "" ) +#:def_cmd_opt( "SLOTS", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "SLOTS", "TIMING", \ "", \ "" ) @@ -6368,6 +6488,14 @@ "", \ "" ) +#:def_cmd_opt( "SLOTS", "LEX_FEATURES", \ + "", \ + "" ) + +#:def_cmd_opt( "SLOTS", "LEX_RM_FEAT", \ + "", \ + "" ) + #:def_cmd_opt( "SLOTS", "PATCH_BMG", \ "", \ "" ) @@ -6707,6 +6835,14 @@ "", \ "" ) +#:def_cmd_opt( "NORMALIZE", "LEX_FEATURES", \ + "", \ + "" ) + +#:def_cmd_opt( "NORMALIZE", "LEX_RM_FEAT", \ + "", \ + "" ) + #:def_cmd_opt( "NORMALIZE", "PATCH_BMG", \ "", \ "" ) @@ -7007,6 +7143,14 @@ "", \ "" ) +#:def_cmd_opt( "PATCH", "LEX_FEATURES", \ + "", \ + "" ) + +#:def_cmd_opt( "PATCH", "LEX_RM_FEAT", \ + "", \ + "" ) + #:def_cmd_opt( "PATCH", "PATCH_BMG", \ "", \ "" ) @@ -7307,6 +7451,14 @@ "", \ "" ) +#:def_cmd_opt( "COPY", "LEX_FEATURES", \ + "", \ + "" ) + +#:def_cmd_opt( "COPY", "LEX_RM_FEAT", \ + "", \ + "" ) + #:def_cmd_opt( "COPY", "PATCH_BMG", \ "", \ "" ) @@ -7611,6 +7763,14 @@ "", \ "" ) +#:def_cmd_opt( "DUPLICATE", "LEX_FEATURES", \ + "", \ + "" ) + +#:def_cmd_opt( "DUPLICATE", "LEX_RM_FEAT", \ + "", \ + "" ) + #:def_cmd_opt( "DUPLICATE", "PATCH_BMG", \ "", \ "" ) @@ -8096,6 +8256,14 @@ "", \ "" ) +#:def_cmd_opt( "COMPRESS", "LEX_FEATURES", \ + "", \ + "" ) + +#:def_cmd_opt( "COMPRESS", "LEX_RM_FEAT", \ + "", \ + "" ) + #:def_cmd_opt( "COMPRESS", "PATCH_BMG", \ "", \ "" ) @@ -8368,6 +8536,14 @@ "", \ "" ) +#:def_cmd_opt( "DECOMPRESS", "LEX_FEATURES", \ + "", \ + "" ) + +#:def_cmd_opt( "DECOMPRESS", "LEX_RM_FEAT", \ + "", \ + "" ) + #:def_cmd_opt( "DECOMPRESS", "PATCH_BMG", \ "", \ "" ) @@ -8412,6 +8588,10 @@ "", \ "" ) +#:def_cmd_opt( "ENCODE", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "ENCODE", "TIMING", \ "", \ "" ) @@ -8649,6 +8829,14 @@ "", \ "" ) +#:def_cmd_opt( "ENCODE", "LEX_FEATURES", \ + "", \ + "" ) + +#:def_cmd_opt( "ENCODE", "LEX_RM_FEAT", \ + "", \ + "" ) + #:def_cmd_opt( "ENCODE", "PATCH_BMG", \ "", \ "" ) @@ -8781,6 +8969,10 @@ "", \ "" ) +#:def_cmd_opt( "CREATE", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "CREATE", "TIMING", \ "", \ "" ) @@ -9034,6 +9226,14 @@ "", \ "" ) +#:def_cmd_opt( "CREATE", "LEX_FEATURES", \ + "", \ + "" ) + +#:def_cmd_opt( "CREATE", "LEX_RM_FEAT", \ + "", \ + "" ) + #:def_cmd_opt( "CREATE", "PATCH_BMG", \ "", \ "" ) @@ -9306,6 +9506,14 @@ "", \ "" ) +#:def_cmd_opt( "UPDATE", "LEX_FEATURES", \ + "", \ + "" ) + +#:def_cmd_opt( "UPDATE", "LEX_RM_FEAT", \ + "", \ + "" ) + #:def_cmd_opt( "UPDATE", "PATCH_BMG", \ "", \ "" ) @@ -9598,6 +9806,14 @@ "", \ "" ) +#:def_cmd_opt( "EXTRACT", "LEX_FEATURES", \ + "", \ + "" ) + +#:def_cmd_opt( "EXTRACT", "LEX_RM_FEAT", \ + "", \ + "" ) + #:def_cmd_opt( "EXTRACT", "PATCH_BMG", \ "", \ "" ) @@ -9890,6 +10106,14 @@ "", \ "" ) +#:def_cmd_opt( "XDECODE", "LEX_FEATURES", \ + "", \ + "" ) + +#:def_cmd_opt( "XDECODE", "LEX_RM_FEAT", \ + "", \ + "" ) + #:def_cmd_opt( "XDECODE", "PATCH_BMG", \ "", \ "" ) @@ -10182,6 +10406,14 @@ "", \ "" ) +#:def_cmd_opt( "XEXPORT", "LEX_FEATURES", \ + "", \ + "" ) + +#:def_cmd_opt( "XEXPORT", "LEX_RM_FEAT", \ + "", \ + "" ) + #:def_cmd_opt( "XEXPORT", "PATCH_BMG", \ "", \ "" ) @@ -10474,6 +10706,14 @@ "", \ "" ) +#:def_cmd_opt( "XALL", "LEX_FEATURES", \ + "", \ + "" ) + +#:def_cmd_opt( "XALL", "LEX_RM_FEAT", \ + "", \ + "" ) + #:def_cmd_opt( "XALL", "PATCH_BMG", \ "", \ "" ) @@ -11045,6 +11285,14 @@ "", \ "" ) +#:def_cmd_opt( "KCL", "LEX_FEATURES", \ + "", \ + "" ) + +#:def_cmd_opt( "KCL", "LEX_RM_FEAT", \ + "", \ + "" ) + #:def_cmd_opt( "KCL", "PATCH_BMG", \ "", \ "" ) @@ -11249,6 +11497,14 @@ "", \ "" ) +#:def_cmd_opt( "KMP", "LEX_FEATURES", \ + "", \ + "" ) + +#:def_cmd_opt( "KMP", "LEX_RM_FEAT", \ + "", \ + "" ) + #:def_cmd_opt( "KMP", "PATCH_BMG", \ "", \ "" ) @@ -11631,12 +11887,18 @@ #:def_opt( "LOGGING", "L|logging", "GM", \ "", \ "This debug option enables the logging of internal lists and maps. Set" \ - " it up to three times to be more verbose.\n" ) + " it up to three times to be more verbose." ) + +#:def_opt( "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", "GM", \ + "", \ + "Enable extended error messages. This includes a source file and line" \ + " reference. Logging level 1 activates it too. @--xerr@ is a short" \ + " cut." ) #:def_opt( "TIMING", "timing", "GM", \ "", \ "Activate the timing of some operations. Logging level 3 activates" \ - " them too.\n" ) + " them too." ) #:def_opt( "WARN", "W|warn", "GP", \ "list", \ @@ -12914,12 +13176,18 @@ #:def_opt( "LOGGING", "L|logging", "GM", \ "", \ "This debug option enables the logging of internal lists and maps. Set" \ - " it up to three times to be more verbose.\n" ) + " it up to three times to be more verbose." ) + +#:def_opt( "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", "GM", \ + "", \ + "Enable extended error messages. This includes a source file and line" \ + " reference. Logging level 1 activates it too. @--xerr@ is a short" \ + " cut." ) #:def_opt( "TIMING", "timing", "GM", \ "", \ "Activate the timing of some operations. Logging level 3 activates" \ - " them too.\n" ) + " them too." ) #:def_opt( "WARN", "W|warn", "GP", \ "list", \ @@ -14302,12 +14570,18 @@ #:def_opt( "LOGGING", "L|logging", "GM", \ "", \ "This debug option enables the logging of internal lists and maps. Set" \ - " it up to three times to be more verbose.\n" ) + " it up to three times to be more verbose." ) + +#:def_opt( "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", "GM", \ + "", \ + "Enable extended error messages. This includes a source file and line" \ + " reference. Logging level 1 activates it too. @--xerr@ is a short" \ + " cut." ) #:def_opt( "TIMING", "timing", "GM", \ "", \ "Activate the timing of some operations. Logging level 3 activates" \ - " them too.\n" ) + " them too." ) #:def_opt( "WARN", "W|warn", "GP", \ "list", \ @@ -15329,12 +15603,18 @@ #:def_opt( "LOGGING", "L|logging", "GM", \ "", \ "This debug option enables the logging of internal lists and maps. Set" \ - " it up to three times to be more verbose.\n" ) + " it up to three times to be more verbose." ) + +#:def_opt( "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", "GM", \ + "", \ + "Enable extended error messages. This includes a source file and line" \ + " reference. Logging level 1 activates it too. @--xerr@ is a short" \ + " cut." ) #:def_opt( "TIMING", "timing", "GM", \ "", \ "Activate the timing of some operations. Logging level 3 activates" \ - " them too.\n" ) + " them too." ) #:def_opt( "WARN", "W|warn", "GP", \ "list", \ @@ -17858,12 +18138,18 @@ #:def_opt( "LOGGING", "L|logging", "GM", \ "", \ "This debug option enables the logging of internal lists and maps. Set" \ - " it up to three times to be more verbose.\n" ) + " it up to three times to be more verbose." ) + +#:def_opt( "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", "GM", \ + "", \ + "Enable extended error messages. This includes a source file and line" \ + " reference. Logging level 1 activates it too. @--xerr@ is a short" \ + " cut." ) #:def_opt( "TIMING", "timing", "GM", \ "", \ "Activate the timing of some operations. Logging level 3 activates" \ - " them too.\n" ) + " them too." ) #:def_opt( "WARN", "W|warn", "GP", \ "list", \ @@ -19955,12 +20241,18 @@ #:def_opt( "LOGGING", "L|logging", "GM", \ "", \ "This debug option enables the logging of internal lists and maps. Set" \ - " it up to three times to be more verbose.\n" ) + " it up to three times to be more verbose." ) + +#:def_opt( "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", "GM", \ + "", \ + "Enable extended error messages. This includes a source file and line" \ + " reference. Logging level 1 activates it too. @--xerr@ is a short" \ + " cut." ) #:def_opt( "TIMING", "timing", "GM", \ "", \ "Activate the timing of some operations. Logging level 3 activates" \ - " them too.\n" ) + " them too." ) #:def_opt( "WARN", "W|warn", "GP", \ "list", \ @@ -20123,6 +20415,11 @@ "Delete LEX sections without any impact. This option is executed after" \ " all --lt-* options." ) +#:def_opt( "LEX_RM_FEAT", "rm-features|rmfeatures|lex-rm-features|lexrmfeatures", "G", \ + "", \ + "Remove LEX setion FEAT (features) if exists. It is executed after" \ + " --lex-purge. {--lex-rm-features} is an alternative name." ) + #:def_opt( "TEST", "t|test", "GM", \ "", \ "Run in test mode, modify nothing.\n" \ @@ -20933,6 +21230,10 @@ "", \ "" ) +#:def_cmd_opt( "CREATE", "LEX_RM_FEAT", \ + "", \ + "" ) + #:def_cmd_opt( "CREATE", "LE_DEFINE", \ "", \ "" ) @@ -21385,12 +21686,18 @@ #:def_opt( "LOGGING", "L|logging", "GM", \ "", \ "This debug option enables the logging of internal lists and maps. Set" \ - " it up to three times to be more verbose.\n" ) + " it up to three times to be more verbose." ) + +#:def_opt( "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", "GM", \ + "", \ + "Enable extended error messages. This includes a source file and line" \ + " reference. Logging level 1 activates it too. @--xerr@ is a short" \ + " cut." ) #:def_opt( "TIMING", "timing", "GM", \ "", \ "Activate the timing of some operations. Logging level 3 activates" \ - " them too.\n" ) + " them too." ) #:def_opt( "WARN", "W|warn", "GP", \ "list", \ @@ -22672,12 +22979,18 @@ #:def_opt( "LOGGING", "L|logging", "GM", \ "", \ "This debug option enables the logging of internal lists and maps. Set" \ - " it up to three times to be more verbose.\n" ) + " it up to three times to be more verbose." ) + +#:def_opt( "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", "GM", \ + "", \ + "Enable extended error messages. This includes a source file and line" \ + " reference. Logging level 1 activates it too. @--xerr@ is a short" \ + " cut." ) #:def_opt( "TIMING", "timing", "GM", \ "", \ "Activate the timing of some operations. Logging level 3 activates" \ - " them too.\n" ) + " them too." ) #:def_opt( "WARN", "W|warn", "GP", \ "list", \ @@ -23318,12 +23631,18 @@ #:def_opt( "LOGGING", "L|logging", "GM", \ "", \ "This debug option enables the logging of internal lists and maps. Set" \ - " it up to three times to be more verbose.\n" ) + " it up to three times to be more verbose." ) + +#:def_opt( "EXT_ERRORS", "Y|extended-errors|extendederrors|xerr", "GM", \ + "", \ + "Enable extended error messages. This includes a source file and line" \ + " reference. Logging level 1 activates it too. @--xerr@ is a short" \ + " cut." ) #:def_opt( "TIMING", "timing", "GM", \ "", \ "Activate the timing of some operations. Logging level 3 activates" \ - " them too.\n" ) + " them too." ) #:def_opt( "WARN", "W|warn", "GP", \ "list", \ @@ -23952,6 +24271,10 @@ "", \ "" ) +#:def_cmd_opt( "HEXDUMP", "EXT_ERRORS", \ + "", \ + "" ) + #:def_cmd_opt( "HEXDUMP", "TIMING", \ "", \ "" ) diff --git a/project/src/wbmgt.c b/project/src/wbmgt.c index 530c28f..06e51de 100644 --- a/project/src/wbmgt.c +++ b/project/src/wbmgt.c @@ -775,6 +775,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) 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_EXT_ERRORS: ext_errors++; break; case GO_TIMING: log_timing++; break; case GO_WARN: err += ScanOptWarn(optarg); break; case GO_DE: use_de = true; break; @@ -960,7 +961,7 @@ static enumError CheckCommand ( int argc, char ** argv ) hint_exit(ERR_OK); } - enumError err = CheckEnvOptions("WBMGT_OPT",CheckOptions); + enumError err = CheckEnvOptions2("WBMGT_OPT",CheckOptions); if (err) hint_exit(err); diff --git a/project/src/wctct.c b/project/src/wctct.c index 73652d9..92ed705 100644 --- a/project/src/wctct.c +++ b/project/src/wctct.c @@ -753,6 +753,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) 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_EXT_ERRORS: ext_errors++; break; case GO_TIMING: log_timing++; break; case GO_WARN: err += ScanOptWarn(optarg); break; case GO_DE: use_de = true; break; @@ -969,7 +970,7 @@ static enumError CheckCommand ( int argc, char ** argv ) hint_exit(ERR_OK); } - enumError err = CheckEnvOptions("WCTCT_OPT",CheckOptions); + enumError err = CheckEnvOptions2("WCTCT_OPT",CheckOptions); if (err) hint_exit(err); diff --git a/project/src/wimgt.c b/project/src/wimgt.c index ce84ef3..a6359dc 100644 --- a/project/src/wimgt.c +++ b/project/src/wimgt.c @@ -588,6 +588,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) 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_EXT_ERRORS: ext_errors++; break; case GO_TIMING: log_timing++; break; case GO_WARN: err += ScanOptWarn(optarg); break; case GO_DE: use_de = true; break; @@ -759,7 +760,7 @@ static enumError CheckCommand ( int argc, char ** argv ) hint_exit(ERR_OK); } - enumError err = CheckEnvOptions("WIMGT_OPT",CheckOptions); + enumError err = CheckEnvOptions2("WIMGT_OPT",CheckOptions); if (err) hint_exit(err); diff --git a/project/src/wkclt.c b/project/src/wkclt.c index 0592df1..e294fcd 100644 --- a/project/src/wkclt.c +++ b/project/src/wkclt.c @@ -1286,6 +1286,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) 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_EXT_ERRORS: ext_errors++; break; case GO_TIMING: log_timing++; break; case GO_WARN: err += ScanOptWarn(optarg); break; case GO_DE: use_de = true; break; @@ -1495,7 +1496,7 @@ static enumError CheckCommand ( int argc, char ** argv ) hint_exit(ERR_OK); } - enumError err = CheckEnvOptions("WKCLT_OPT",CheckOptions); + enumError err = CheckEnvOptions2("WKCLT_OPT",CheckOptions); if (err) hint_exit(err); diff --git a/project/src/wkmpt.c b/project/src/wkmpt.c index 11eb940..701db6e 100644 --- a/project/src/wkmpt.c +++ b/project/src/wkmpt.c @@ -1584,6 +1584,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) 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_EXT_ERRORS: ext_errors++; break; case GO_TIMING: log_timing++; break; case GO_WARN: err += ScanOptWarn(optarg); break; case GO_DE: use_de = true; break; @@ -1809,7 +1810,7 @@ static enumError CheckCommand ( int argc, char ** argv ) hint_exit(ERR_OK); } - enumError err = CheckEnvOptions("WKMPT_OPT",CheckOptions); + enumError err = CheckEnvOptions2("WKMPT_OPT",CheckOptions); if (err) hint_exit(err); diff --git a/project/src/wlect.c b/project/src/wlect.c index cf0a9f0..c5c4e39 100644 --- a/project/src/wlect.c +++ b/project/src/wlect.c @@ -820,11 +820,8 @@ static void help_create ( enumError exit_code ) " but includes all devoloper sections.\n" #endif "\n" - #if HAVE_WIIMM_EXTxx "\t{info|FEATURES}:\t|" - "This {warn|hidden sub-command} create a LEX text file with section »FEA0« only." - " {warn|This section is under development.}\n" - #endif + "Create a LEX text file with section »FEAT« only.\n" "\t{name|SET1}:\t|" "Create a LEX text file with section »SET1« only.\n" "\t{name|CANNONS}:\t|" @@ -956,7 +953,7 @@ static enumError cmd_create() InitializeLEX(&lex); switch (cmd->id) { - case C_FEATURES: AppendFea0LEX(&lex,false,0); break; + case C_FEATURES: AppendFeatLEX(&lex,false,0); break; case C_SET1: AppendSet1LEX(&lex,false); break; case C_CANNON: AppendCannLEX(&lex,false); break; case C_HIDE_PT: AppendHiptLEX(&lex,false); break; @@ -1218,7 +1215,7 @@ static void help_distrib ( enumError exit_code ) "\t{name|INFO}:\t|" "Create a human readable reference file with cup info slots and track names." " Only tracks with known name (not empty) are printed." - " The tracks are ordered by cups.\n" + " The tracks are ordered by cups.\n" "\t{name|XINFO}:\t|" "Same as {name|INFO}, but use extended names if available.\n" "\n" @@ -1279,9 +1276,11 @@ static void help_distrib ( enumError exit_code ) "\n" "\t{name|BMG}:\t|" "Create a BMG binary file. BMG options are recognized." - " But if the output goes to a terminal, then use {name|BMGTXT} insted.\n" + " But if the output goes to a terminal, then use {name|BMGTXT} insted." + " If no {heading|BMG selector} is defined," + " then {name|MKW,LE-CODE} (all except {name|CT-CODE}) is used.\n" "\t{name|BMGTXT}:\t|" - "Create a BMG text file. BMG options are recognized.\n" + "Create a BMG text file. Global BMG options are recognized.\n" "\n" "\t{name|REF}:\t|" "Create a machine readable track reference (type {name|LEREF})," @@ -1322,8 +1321,35 @@ static void help_distrib ( enumError exit_code ) " {heading|String functions:}\n" "\n" + "\t{name|SEPARATOR}:| " + "Define a separator string that is used by other commands." + " The default is a space.\r" + " {heading|Syntax:} {syntax|SEPARATOR '=' STRING} or {syntax|SEP '=' STRING}\n" + "\n" + + "\t{name|COPY}:\t|" + "This instruction copies the texts of 1 or more sources to a destination.\r" + " {heading|Syntax of PARAMETER:} {syntax|DEST '=' SRC [ '+' SRC ]...}\r" + "\r" + "{syntax|DEST} and {syntax|SRC} are storage indicators" + " explained in section »{name|Processing Options: Storage}«." + " The sources are joined textually, with a separator" + " (defined by instruction {name|SEPARATOR}, see above)" + " inserted between the sources.\r" + "\r" + "Example: |{syntax|copy=[result]=sha1+[size]}\n" + "\n" + + "\t{name|SPLIT}:\t|" + "This instruction analyses the {syntax|SOURCE} like command {cmd|wszst split} does it." + " Then the directives of {syntax|FORMAT} create a string that is copied" + " to {syntax|DESTINATION}.\r" + " {heading|Syntax of PARAMETER:} {syntax|DESTINATION ',' SOURCE ',' FORMAT}\r" + "Visit {file|https://szs.wiimm.de/opt/printf} for more details.\n" + "\n" + "\t{name|SUBST}:\t|" - "This command searches for text passages using a regular expression" + "This instruction searches for text passages using a regular expression" " and replaces the found passages with another text.\r" " {heading|Syntax of PARAMETER:} |{syntax|STORAGE ',' SEP REGEXP SEP REPLACEMENT SEP OPTIONS}\n" "\n\t\t|" @@ -1344,19 +1370,6 @@ static void help_distrib ( enumError exit_code ) "{syntax|subst=[key],/search ([0-9])/replace $1/gi}\n" "\n" - "\t{name|COPY}:\t|" - "This command copies the texts of 1 or more sources to a destination.\r" - " {heading|Syntax of PARAMETER:} {syntax|DEST '=' SRC [ '+' SRC ]...}\r" - "\r" - "{syntax|DEST} and {syntax|SRC} are storage indicators" - " explained in section »{name|Processing Options: Storage}«." - " The sources are joined textually, with CTRL-A (ASCII 1, '\\1')" - " inserted as a separator between the sources." - " Use instruction {name|SUBST} to change the separators.\r" - "\r" - "Example: |{syntax|copy=[result]=sha1+[size]}\n" - "\n" - //------------------------- " {heading|Copy, move or link track files:}\n" "\n|[4,12,14,22]" @@ -1413,7 +1426,7 @@ static void help_distrib ( enumError exit_code ) //------------------------- - " |{heading|BMG source:}\n" + " |{heading|BMG selector:}\n" "\n" "\t|Define which BMG strings are used as input." " Multiple source can be selected. If none is selected, then all are used." @@ -1495,6 +1508,13 @@ static void help_distrib ( enumError exit_code ) "Define a new standard and a new extended name." " If reading, then get the extended name, if valid, or the standard name as fallback.\n" "\n" + "\t{name|TEMP1}:\t|" + "A temporary variable with no specific purpose." + " Access is much faster than for dynamic strings by {name|[key]}." + " They are therefore intended for multi-level string manipulations.\n" + "\t{name|TEMP2}:\t|" + "A second temporary variable.\n" + "\n" "\t{name|[key]}:\t|" "For each track there is a set of character strings at the user's disposal." " The character strings are addressed via KEY." @@ -1644,15 +1664,16 @@ static enumError cmd_distrib_instruction ( le_distrib_t *ld, ccp mode, char * ar u_nsec_t start_nsec = GetTimerNSec(); enum { C_NAMES, C_INFO, C_LEINFO, C_SHA1, C_DISTRIB, - C_CTDEF, C_LEDEF, C_REF, C_STRINGS, C_DUMP, + C_CTDEF, C_LEDEF, C_LEREF, C_STRINGS, C_DUMP, C_LECODE, C_LECODE4, C_LPAR, - C_BMG, C_SUBST, C_COPY, + C_BMG, C_SEPARATOR, C_COPY, C_SPLIT, C_SUBST, C_TRACKS, C_PREFIX, C_RESERVE, C_DEBUG }; enum { O_PARAM_D = 0x100, // scan storage DEST O_PARAM_S = 0x200, // scan storage SRC + O_PARAM_S2 = 0x400, // scan second storage SRC O_PARAM_SS = 0x600, // scan storage SRC [ + SRC ]... O_PARAM_A = 0x800, // allow additonal arguments }; @@ -1673,7 +1694,8 @@ static enumError cmd_distrib_instruction ( le_distrib_t *ld, ccp mode, char * ar { C_CTDEF, "CT-DEF", "CTDEF", 0 }, { C_LEDEF, "LE-DEF", "LEDEF", 0 }, { C_LEDEF, "DEFINITION", "DEF", 0 }, - { C_REF, "REFERENCE", "REF", 0 }, + { C_LEREF, "LE-REF", "LEREF", 0 }, + { C_LEREF, "REFERENCE", "REF", 0 }, { C_STRINGS, "STRINGS", "STR", 0 }, { C_DUMP, "DUMP", 0, 0 }, @@ -1689,8 +1711,10 @@ static enumError cmd_distrib_instruction ( le_distrib_t *ld, ccp mode, char * ar { C_BMG, "BMG-TXT", "BMGTXT", 1 }, - { C_SUBST, "SUBST", 0, O_PARAM_D|O_PARAM_A }, + { C_SEPARATOR, "SEPARATOR", "SEP", 0 }, { C_COPY, "COPY", 0, O_PARAM_D|O_PARAM_SS }, + { C_SPLIT, "SPLIT", 0, O_PARAM_D|O_PARAM_S|O_PARAM_A }, + { C_SUBST, "SUBST", 0, O_PARAM_D|O_PARAM_A }, { C_TRACKS, "TRACKS", 0, 0 }, @@ -1778,7 +1802,7 @@ static enumError cmd_distrib_instruction ( le_distrib_t *ld, ccp mode, char * ar if ( opt & O_PARAM_S ) { - const int max = opt & O_PARAM_SS ? MAX_PAR_SRC : 1; + const int max = opt & O_PARAM_S2 ? MAX_PAR_SRC : 1; le_strpar_t *src = par_src; while ( n_par_src < max ) { @@ -1797,6 +1821,7 @@ static enumError cmd_distrib_instruction ( le_distrib_t *ld, ccp mode, char * ar arg++; } } + if ( *arg && !(opt&O_PARAM_A) ) return ERROR0( ERR_SEMANTIC,"%s: Missing end-of-line: %s\n",cmd->name1,arg); } @@ -1807,9 +1832,11 @@ static enumError cmd_distrib_instruction ( le_distrib_t *ld, ccp mode, char * ar err = ~0; switch (cmd->id) { - case C_LECODE4: err = CreateLecode4LD(arg,ld); break; - case C_SUBST: err = SubstLD(ld,&par_dest,arg); break; - case C_COPY: err = CopyLD(ld,&par_dest,par_src,n_par_src); break; + case C_LECODE4: err = CreateLecode4LD(arg,ld); break; + case C_SEPARATOR: err = SeparatorLD(ld,arg); break; + case C_COPY: err = CopyLD(ld,&par_dest,par_src,n_par_src); break; + case C_SPLIT: err = SplitLD(ld,&par_dest,par_src,arg); break; + case C_SUBST: err = SubstLD(ld,&par_dest,arg); break; case C_TRACKS: cmd = ScanKeyword(&cmd_stat,arg,tracks_tab); @@ -1842,7 +1869,7 @@ static enumError cmd_distrib_instruction ( le_distrib_t *ld, ccp mode, char * ar if ( *end == ',' || *end == 'x' ) n2 = str2ul(end+1,0,10); ccp ltty_name = ltty==LTTY_TRACK ? "versus track" : "battle arena"; - PRINT1("RESERVE %s %dx%d\n", ltty_name, n1, n2 ); + PRINT0("RESERVE %s %dx%d\n", ltty_name, n1, n2 ); if ( n2 > 0 ) { if ( verbose >= 1 ) @@ -1875,6 +1902,14 @@ static enumError cmd_distrib_instruction ( le_distrib_t *ld, ccp mode, char * ar if ( err == ~0 ) { + #ifdef __CYGWIN__ + char norm[PATH_MAX]; + NormalizeFilenameCygwin(norm,sizeof(norm),arg); + if ( verbose >= 2 && strcmp(arg,norm) ) + fprintf(stdlog," > Normalized filename: %s\n",norm); + arg = norm; + #endif + File_t F; err = CreateFileOpt(&F,true,arg,false,0); if (!err) @@ -1890,7 +1925,7 @@ static enumError cmd_distrib_instruction ( le_distrib_t *ld, ccp mode, char * ar case C_CTDEF: err = CreateCtDefLD(F.f,ld); break; case C_LEDEF: err = CreateLeDefLD(F.f,ld); break; - case C_REF: err = CreateRefLD(F.f,ld,true); break; + case C_LEREF: err = CreateRefLD(F.f,ld,true); break; case C_STRINGS: err = CreateStringsLD(F.f,ld); break; case C_DUMP: err = CreateDumpLD(F.f,ld); break; @@ -1980,7 +2015,6 @@ static enumError cmd_distrib() if ( verbose >= 1 ) PrintHead("Read file(s): %s",arg); const u_nsec_t start_nsec = GetTimerNSec(); - NORMALIZE_FILENAME_PARAM(param); ImportFileLD(&ld,arg,true,false); if ( verbose >= 2 ) { @@ -2220,6 +2254,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) 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_EXT_ERRORS: ext_errors++; break; case GO_TIMING: log_timing++; break; case GO_WARN: err += ScanOptWarn(optarg); break; case GO_DE: use_de = true; break; @@ -2457,7 +2492,7 @@ static enumError CheckCommand ( int argc, char ** argv ) hint_exit(ERR_OK); } - enumError err = CheckEnvOptions("WLECT_OPT",CheckOptions); + enumError err = CheckEnvOptions2("WLECT_OPT",CheckOptions); if (err) hint_exit(err); diff --git a/project/src/wmdlt.c b/project/src/wmdlt.c index 133e53e..edf4c8b 100644 --- a/project/src/wmdlt.c +++ b/project/src/wmdlt.c @@ -545,6 +545,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) 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_EXT_ERRORS: ext_errors++; break; case GO_TIMING: log_timing++; break; case GO_WARN: err += ScanOptWarn(optarg); break; case GO_DE: use_de = true; break; @@ -731,7 +732,7 @@ static enumError CheckCommand ( int argc, char ** argv ) hint_exit(ERR_OK); } - enumError err = CheckEnvOptions("WMDLT_OPT",CheckOptions); + enumError err = CheckEnvOptions2("WMDLT_OPT",CheckOptions); if (err) hint_exit(err); diff --git a/project/src/wpatt.c b/project/src/wpatt.c index e383ab0..6a37868 100644 --- a/project/src/wpatt.c +++ b/project/src/wpatt.c @@ -354,6 +354,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) 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_EXT_ERRORS: ext_errors++; break; case GO_TIMING: log_timing++; break; case GO_WARN: err += ScanOptWarn(optarg); break; case GO_DE: use_de = true; break; @@ -521,7 +522,7 @@ static enumError CheckCommand ( int argc, char ** argv ) hint_exit(ERR_OK); } - enumError err = CheckEnvOptions("WPATT_OPT",CheckOptions); + enumError err = CheckEnvOptions2("WPATT_OPT",CheckOptions); if (err) hint_exit(err); diff --git a/project/src/wstrt.c b/project/src/wstrt.c index 81ee94d..f02cd6a 100644 --- a/project/src/wstrt.c +++ b/project/src/wstrt.c @@ -1587,6 +1587,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) 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_EXT_ERRORS: ext_errors++; break; case GO_TIMING: log_timing++; break; case GO_WARN: err += ScanOptWarn(optarg); break; case GO_DE: use_de = true; break; @@ -1867,7 +1868,7 @@ static enumError CheckCommand ( int argc, char ** argv ) xparam.print_format = false; xparam.print_summary= false; - enumError err = CheckEnvOptions("WSTRT_OPT",CheckOptions); + enumError err = CheckEnvOptions2("WSTRT_OPT",CheckOptions); if (err) hint_exit(err); diff --git a/project/src/wszst.c b/project/src/wszst.c index 7d8d475..bc8e864 100644 --- a/project/src/wszst.c +++ b/project/src/wszst.c @@ -601,6 +601,7 @@ static const sizeof_info_t sizeof_info_szs_list[] = SIZEOF_INFO_ENTRY(file_type_t) SIZEOF_INFO_ENTRY(mkw_prefix_t) SIZEOF_INFO_ENTRY(split_filename_t) + SIZEOF_INFO_ENTRY(print_split_par_t) SIZEOF_INFO_TERM() }; @@ -2598,6 +2599,8 @@ static enumError cmd_split() split_filename_t spf; InitializeSPF(&spf); + print_split_par_t psp = { .format = opt_printf, .u_use_list = true }; + File_t fo; InitializeFile(&fo); @@ -2640,26 +2643,36 @@ static enumError cmd_split() 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 ); + PrintScriptVars(&ps,0,"game_order=%d\ngame1_color=%d\ngame2_color=%d\n", + spf.game_order, spf.game1_color, spf.game2_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,0,"lap_count=%u\n",spf.lap_count); + if ( spf.speed_factor > 0.0 ) + PrintScriptVars(&ps,0,"speed_factor=%5.3f\n",spf.speed_factor); + else + PutScriptVars(&ps,0,"speed_factor=0\n"); + + if (opt_printf) + { + exmem_t res = PrintSPF(0,&spf,&psp); + print_split_val(&ps,"printf",res.data); + FreeExMem(&res); + } PrintScriptVars(&ps,2,"duration_nsec=%llu\n",duration_nsec); + fflush(ps.f); if (!script_array) { PrintScriptFooter(&ps); @@ -2671,6 +2684,7 @@ static enumError cmd_split() PrintScriptFooter(&ps); ResetPrintScript(&ps); ResetFile(&fo,0); + ResetPSP(&psp); ResetSPF(&spf); return max_err; } @@ -2842,7 +2856,7 @@ static enumError cmd_features() //--- print result PrintScriptVars(&ps,1,"file=\"%s\"\n",dest); - PrintFeaturesSZS( &ps, &fs, false, comments, + PrintFeaturesSZS( &ps, &fs, false, comments, long_count, opt_pmodes, opt_fmodes_include, opt_fmodes_exclude ); PutScriptVars(&ps,2,0); @@ -5596,6 +5610,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) 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_EXT_ERRORS: ext_errors++; break; case GO_TIMING: log_timing++; break; case GO_WARN: err += ScanOptWarn(optarg); break; case GO_DE: use_de = true; break; @@ -5610,6 +5625,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) case GO_AUTO: break; case GO_LOAD_PREFIX: err += ScanOptLoadPrefix(optarg); break; case GO_PLUS: opt_plus = optarg; break; + case GO_PRINTF: opt_printf = 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; @@ -6017,7 +6033,7 @@ int main_wszst ( int argc, char ** argv ) hint_exit(ERR_OK); } - enumError err = CheckEnvOptions("WSZST_OPT",CheckOptions); + enumError err = CheckEnvOptions2("WSZST_OPT",CheckOptions); if (err) hint_exit(err); -- cgit v1.3.1