diff options
| author | Wiimm <wiimm@wiimm.de> | 2024-03-26 10:35:38 +0100 |
|---|---|---|
| committer | Wiimm <wiimm@wiimm.de> | 2024-03-26 10:35:38 +0100 |
| commit | 246fdb38d7c2fb3054b8f8528e11dc8f17691750 (patch) | |
| tree | c106adbb6c640ab93c4b3f19864fde6046b1a759 | |
| parent | b8aca433e32346c9293acc34a9e2242809ac5692 (diff) | |
SZS 2.42a
69 files changed, 2164 insertions, 783 deletions
diff --git a/project/Makefile b/project/Makefile index c52ba26..8ad4f88 100644 --- a/project/Makefile +++ b/project/Makefile @@ -57,7 +57,7 @@ WPATT_LONG = Wiimms PAT Tool WSTRT_SHORT = wstrt WSTRT_LONG = Wiimms StaticR Tool -VERSION_NUM = 2.41b +VERSION_NUM = 2.42a BETA_VERSION = 0 # 0:off -1:"beta" >0:"beta#" @@ -142,7 +142,7 @@ DEFINES1 += -DLARGE_FILES -D_FILE_OFFSET_BITS=64 DEFINES1 += -DWSZST # compile szs tools (switch for shared sources) DEFINES1 += -DDEBUG_ASSERT # enable ASSERTions in release version too DEFINES1 += -DEXTENDED_ERRORS=1 # enable extended error messages (function,line,file) -DEFINES1 += -DUIOPT_INDEX_SIZE=330 # define max number of options (default 0x100) +DEFINES1 += -DUIOPT_INDEX_SIZE=340 # define max number of options (default 0x100) CFLAGS += $(DCLIB_CFLAGS) CFLAGS += -std=gnu99 -fomit-frame-pointer -fno-strict-aliasing -funroll-loops diff --git a/project/revision.sh b/project/revision.sh index 2f377c3..03f89d5 100644 --- a/project/revision.sh +++ b/project/revision.sh @@ -1 +1 @@ -revision=8971 +revision=8989 diff --git a/project/src/analyze.c b/project/src/analyze.c index 09d08b0..c34a454 100644 --- a/project/src/analyze.c +++ b/project/src/analyze.c @@ -228,7 +228,7 @@ static analyze_item_t * add_item } ERROR0(ERR_FATAL,"Analyze list full (max=%u): %s\n",MAX_ANA_ITEM,ana->szs->fname); - exit(ERR_FATAL); + ExitFixed(ERR_FATAL); } /////////////////////////////////////////////////////////////////////////////// diff --git a/project/src/file-type.c b/project/src/file-type.c index 97ba5a8..0af6f8b 100644 --- a/project/src/file-type.c +++ b/project/src/file-type.c @@ -78,7 +78,19 @@ const file_type_t FileTypeTab[FF_N+1] = "YAZ0 like, but with bzip2 compression" }, - // FF_BZIP2 = 5 + // FF_YBZ = 5 + { + FF_YBZ, 0, 0, "YBZ", + ".ybz", ".szs", ".ybz", + FFT_VALID | FFT_COMPRESS | FFT_TRACK, + 4, {0x59,0x42,0x5a,0x30}, // "YBZ0" + 0, + MinusString, + MinusString, + "YAZ0 like header, but with bzip2 compression" + }, + + // FF_BZIP2 = 6 { FF_BZIP2, 0, 0, "BZIP2", ".bz2", ".szs", ".bz2", @@ -90,7 +102,7 @@ const file_type_t FileTypeTab[FF_N+1] = "bzip2 compressed file" }, - // FF_LZ = 6 + // FF_LZ = 7 { FF_LZ, 0, 0, "LZ", ".lz", ".szs", ".lz", @@ -102,7 +114,19 @@ const file_type_t FileTypeTab[FF_N+1] = "YAZ0 like, but with LZMA compression" }, - // FF_LZMA = 7 + // FF_YLZ = 8 + { + FF_YLZ, 0, 0, "YLZ", + ".ylz", ".szs", ".ylz", + FFT_VALID | FFT_COMPRESS | FFT_TRACK, + 4, {0x59,0x4c,0x5a,0x30}, // "YLZ0" + 0, + MinusString, + MinusString, + "YAZ0 like header, but with LZMA compression" + }, + + // FF_LZMA = 9 { FF_LZMA, 0, 0, "LZMA", ".lzma", ".szs", ".lzma", @@ -114,7 +138,7 @@ const file_type_t FileTypeTab[FF_N+1] = "LZMA compressed file" }, - // FF_XZ = 8 + // FF_XZ = 10 { FF_XZ, 0, 0, "XZ", ".xz", ".szs", ".xz", @@ -126,7 +150,7 @@ const file_type_t FileTypeTab[FF_N+1] = "xz compressed file" }, - // FF_U8 = 9 + // FF_U8 = 11 { FF_U8, 0, 0, "U8", ".u8", ".szs", ".u8", @@ -138,7 +162,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Nintendos archive format" }, - // FF_WU8 = 10 + // FF_WU8 = 12 { FF_WU8, 0, 0, "WU8", ".wu8", ".wu8", ".wu8", @@ -150,7 +174,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Wiimms differential U8" }, - // FF_RARC = 11 + // FF_RARC = 13 { FF_RARC, 0, 0, "RARC", ".rarc", ".arc", ".rarc", @@ -162,7 +186,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Archive format for objects" }, - // FF_BRRES = 12 + // FF_BRRES = 14 { FF_BRRES, 0, 0, "BRRES", ".brres", ".szs", ".bres", @@ -174,7 +198,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Archive format for objects" }, - // FF_BREFF = 13 + // FF_BREFF = 15 { FF_BREFF, 0, 0, "BREFF", ".breff", ".szs", ".reff", @@ -186,7 +210,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Main file of an effect pair" }, - // FF_BREFT = 14 + // FF_BREFT = 16 { FF_BREFT, 0, 0, "BREFT", ".breft", ".szs", ".reft", @@ -198,7 +222,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Image file of an effect pair" }, - // FF_RKC = 15 + // FF_RKC = 17 { FF_RKC, 0, 0, "RKC", ".rkc", ".szs", ".rkc", @@ -210,7 +234,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_PACK = 16 + // FF_PACK = 18 { FF_PACK, 0, 0, "PACK", ".pack", ".szs", ".pack", @@ -222,7 +246,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Simple archive format" }, - // FF_USE_LTA = 17 + // FF_USE_LTA = 19 { FF_USE_LTA, 0, 0, "USE-LTA", ".szs", ".szs", ".szs", @@ -234,7 +258,7 @@ const file_type_t FileTypeTab[FF_N+1] = "LE-CODE redirect to LTA" }, - // FF_LTA = 18 + // FF_LTA = 20 { FF_LTA, 0, 0, "LTA", ".lta", "", ".lta", @@ -246,7 +270,7 @@ const file_type_t FileTypeTab[FF_N+1] = "LE-CODE Track Archive" }, - // FF_LFL = 19 + // FF_LFL = 21 { FF_LFL, 0, 0, "LFL", ".lfl", ".szs", ".lfl", @@ -258,7 +282,7 @@ const file_type_t FileTypeTab[FF_N+1] = "LE-CODE File List" }, - // FF_CHR = 20 + // FF_CHR = 22 { FF_CHR, 0, 0, "CHR", ".chr", ".szs", ".chr0", @@ -270,7 +294,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Model movement animations" }, - // FF_CLR = 21 + // FF_CLR = 23 { FF_CLR, 0, 0, "CLR", ".clr", ".szs", ".clr0", @@ -282,7 +306,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Colour changing animations" }, - // FF_MDL = 22 + // FF_MDL = 24 { FF_MDL, FF_MDL, FF_MDL_TXT, "MDL", ".mdl", ".szs", ".mdl0", @@ -294,7 +318,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Model files" }, - // FF_PAT = 23 + // FF_PAT = 25 { FF_PAT, FF_PAT, FF_PAT_TXT, "PAT", ".pat", ".szs", ".pat0", @@ -306,7 +330,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Texture swapping animations" }, - // FF_SCN = 24 + // FF_SCN = 26 { FF_SCN, 0, 0, "SCN", ".scn", ".szs", ".scn0", @@ -318,7 +342,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Polygon morphing animations" }, - // FF_SHP = 25 + // FF_SHP = 27 { FF_SHP, 0, 0, "SHP", ".shp", ".szs", ".shp0", @@ -330,7 +354,7 @@ const file_type_t FileTypeTab[FF_N+1] = filetype_info_unknown }, - // FF_SRT = 26 + // FF_SRT = 28 { FF_SRT, 0, 0, "SRT", ".srt", ".szs", ".srt0", @@ -342,7 +366,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Texture movement animations" }, - // FF_TEX = 27 + // FF_TEX = 29 { FF_TEX, 0, 0, "TEX", ".tex", ".szs", ".tex0", @@ -354,7 +378,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Texture file" }, - // FF_TEX_CT = 28 + // FF_TEX_CT = 30 { FF_TEX_CT, 0, 0, "TEX+CT", ".tex", ".szs", ".tex0", @@ -366,7 +390,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Texture file with CTGP-CODE" }, - // FF_CTDEF = 29 + // FF_CTDEF = 31 { FF_CTDEF, 0, 0, "CT-DEF", ".txt", ".szs", ".txt", @@ -378,7 +402,7 @@ const file_type_t FileTypeTab[FF_N+1] = "CT-CODE definition file" }, - // FF_CT0_CODE = 30 + // FF_CT0_CODE = 32 { FF_CT0_CODE, 0, 0, "C0CODE", ".bin", ".szs", ".bin", @@ -390,7 +414,7 @@ const file_type_t FileTypeTab[FF_N+1] = "CT-CODE for main.dol section T2" }, - // FF_CT0_DATA = 31 + // FF_CT0_DATA = 33 { FF_CT0_DATA, 0, 0, "C0DATA", ".bin", ".szs", ".bin", @@ -402,7 +426,7 @@ const file_type_t FileTypeTab[FF_N+1] = "CT-DATA for main.dol section D8" }, - // FF_CT1_CODE = 32 + // FF_CT1_CODE = 34 { FF_CT1_CODE, 0, 0, "C1CODE", ".bin", ".szs", ".bin", @@ -414,7 +438,7 @@ const file_type_t FileTypeTab[FF_N+1] = "CT-CODE for strap TEX0 file" }, - // FF_CT1_DATA = 33 + // FF_CT1_DATA = 35 { FF_CT1_DATA, 0, 0, "C1DATA", ".ctcode", ".szs", ".ctcode", @@ -426,7 +450,7 @@ const file_type_t FileTypeTab[FF_N+1] = "CT-DATA for strap TEX0 file" }, - // FF_CUP1 = 34 + // FF_CUP1 = 36 { FF_CUP1, 0, 0, "CUP1", ".bin", ".szs", ".bin", @@ -438,7 +462,7 @@ const file_type_t FileTypeTab[FF_N+1] = "CT-DATA section: Cups" }, - // FF_CRS1 = 35 + // FF_CRS1 = 37 { FF_CRS1, 0, 0, "CRS1", ".bin", ".szs", ".bin", @@ -450,7 +474,7 @@ const file_type_t FileTypeTab[FF_N+1] = "CT-DATA section: Tracks" }, - // FF_MOD1 = 36 + // FF_MOD1 = 38 { FF_MOD1, 0, 0, "MOD1", ".bin", ".szs", ".bin", @@ -462,7 +486,7 @@ const file_type_t FileTypeTab[FF_N+1] = "CT-DATA section: main.dol patches" }, - // FF_MOD2 = 37 + // FF_MOD2 = 39 { FF_MOD2, 0, 0, "MOD2", ".bin", ".szs", ".bin", @@ -474,7 +498,7 @@ const file_type_t FileTypeTab[FF_N+1] = "CT-DATA section: StaticR.rel patches" }, - // FF_OVR1 = 38 + // FF_OVR1 = 40 { FF_OVR1, 0, 0, "OVR1", ".bin", ".szs", ".bin", @@ -486,7 +510,7 @@ const file_type_t FileTypeTab[FF_N+1] = "CT-DATA section: Speedometer" }, - // FF_LE_BIN = 39 + // FF_LE_BIN = 41 { FF_LE_BIN, 0, 0, "LE-BIN", ".bin", ".szs", ".bin", @@ -498,7 +522,7 @@ const file_type_t FileTypeTab[FF_N+1] = "LE-CODE binary" }, - // FF_LEX = 40 + // FF_LEX = 42 { FF_LEX, FF_LEX, FF_LEX_TXT, "LEX", ".lex", ".szs", ".lex", @@ -510,7 +534,7 @@ const file_type_t FileTypeTab[FF_N+1] = "LECODE extension file" }, - // FF_LEX_TXT = 41 + // FF_LEX_TXT = 43 { FF_LEX_TXT, FF_LEX, FF_LEX_TXT, "LEX-TXT", ".txt", ".szs", ".txt", @@ -522,7 +546,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Text version of LEX" }, - // FF_LPAR = 42 + // FF_LPAR = 44 { FF_LPAR, 0, 0, "LPAR", ".txt", ".szs", ".txt", @@ -534,7 +558,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Text file with LE-CODE parameters" }, - // FF_LEDEF = 43 + // FF_LEDEF = 45 { FF_LEDEF, 0, 0, "LE-DEF", ".txt", ".szs", ".txt", @@ -546,7 +570,7 @@ const file_type_t FileTypeTab[FF_N+1] = "LE-CODE definition file" }, - // FF_LEDIS = 44 + // FF_LEDIS = 46 { FF_LEDIS, 0, 0, "LE-DIS", ".txt", ".szs", ".txt", @@ -558,7 +582,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Text file with CT+LE-CODE distribution settings" }, - // FF_LEREF = 45 + // FF_LEREF = 47 { FF_LEREF, 0, 0, "LE-REF", ".txt", ".szs", ".txt", @@ -570,7 +594,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Text file as track reference" }, - // FF_LESTR = 46 + // FF_LESTR = 48 { FF_LESTR, 0, 0, "LE-STR", ".txt", ".szs", ".txt", @@ -582,7 +606,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Text file strings for tracks" }, - // FF_SHA1REF = 47 + // FF_SHA1REF = 49 { FF_SHA1REF, 0, 0, "SHA1REF", ".txt", ".szs", ".txt", @@ -594,7 +618,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Text file with SHA1 of tracks" }, - // FF_SHA1ID = 48 + // FF_SHA1ID = 50 { FF_SHA1ID, 0, 0, "SHA1ID", ".txt", ".szs", ".txt", @@ -606,7 +630,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Text file with SHA1 and file_id of tracks" }, - // FF_PREFIX = 49 + // FF_PREFIX = 51 { FF_PREFIX, 0, 0, "PREFIX", ".txt", ".szs", ".txt", @@ -618,7 +642,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Text file with console/game prefixes and info" }, - // FF_MTCAT = 50 + // FF_MTCAT = 52 { FF_MTCAT, 0, 0, "MTCAT", ".txt", ".szs", ".txt", @@ -630,7 +654,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Text file with MKW Track Categories" }, - // FF_CT_SHA1 = 51 + // FF_CT_SHA1 = 53 { FF_CT_SHA1, 0, 0, "CT-SHA1", ".txt", ".szs", ".txt", @@ -642,7 +666,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_MDL_TXT = 52 + // FF_MDL_TXT = 54 { FF_MDL_TXT, FF_MDL, FF_MDL_TXT, "MDLTXT", ".txt", ".szs", ".txt", @@ -654,7 +678,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Text version of MDL" }, - // FF_PAT_TXT = 53 + // FF_PAT_TXT = 55 { FF_PAT_TXT, FF_PAT, FF_PAT_TXT, "PATTXT", ".txt", ".szs", ".txt", @@ -666,7 +690,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Text version of PAT" }, - // FF_TPL = 54 + // FF_TPL = 56 { FF_TPL, 0, 0, "TPL", ".tpl", ".szs", ".tpl", @@ -678,7 +702,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Image container" }, - // FF_TPLX = 55 + // FF_TPLX = 57 { FF_TPLX, 0, 0, "TPLx", ".tpl", ".szs", ".tpl", @@ -690,7 +714,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Image container with extended file header" }, - // FF_CUPICON = 56 + // FF_CUPICON = 58 { FF_CUPICON, 0, 0, "TPLx", ".tpl", ".szs", ".tpl", @@ -702,7 +726,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Alias for TPLx.CMPR" }, - // FF_BTI = 57 + // FF_BTI = 59 { FF_BTI, 0, 0, "BTI", ".bti", ".szs", ".bti", @@ -714,7 +738,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Image container" }, - // FF_BREFT_IMG = 58 + // FF_BREFT_IMG = 60 { FF_BREFT_IMG, 0, 0, "BT-IMG", ".bt-img", ".szs", ".bt-img", @@ -726,7 +750,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Raw image of BREFT file" }, - // FF_BMG = 59 + // FF_BMG = 61 { FF_BMG, FF_BMG, FF_BMG_TXT, "BMG", ".bmg", ".szs", ".bmg", @@ -738,7 +762,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Message file" }, - // FF_BMG_TXT = 60 + // FF_BMG_TXT = 62 { FF_BMG_TXT, FF_BMG, FF_BMG_TXT, "BMGTXT", ".txt", ".szs", ".txt", @@ -750,7 +774,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Text version of BMG" }, - // FF_KCL = 61 + // FF_KCL = 63 { FF_KCL, FF_KCL, FF_KCL_TXT, "KCL", ".kcl", ".szs", ".kcl", @@ -762,7 +786,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Collision file" }, - // FF_KCL_TXT = 62 + // FF_KCL_TXT = 64 { FF_KCL_TXT, FF_KCL, FF_KCL_TXT, "KCLTXT", ".obj", ".szs", ".obj", @@ -774,7 +798,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Wavefront OBJ by WSZST" }, - // FF_WAV_OBJ = 63 + // FF_WAV_OBJ = 65 { FF_WAV_OBJ, FF_KCL, FF_WAV_OBJ, "WAVOBJ", ".obj", ".szs", ".obj", @@ -786,7 +810,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Wavefront OBJ" }, - // FF_SKP_OBJ = 64 + // FF_SKP_OBJ = 66 { FF_SKP_OBJ, FF_KCL, FF_SKP_OBJ, "SKPOBJ", ".obj", ".szs", ".obj", @@ -798,7 +822,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Wavefront OBJ by Sketchup" }, - // FF_KMP = 65 + // FF_KMP = 67 { FF_KMP, FF_KMP, FF_KMP_TXT, "KMP", ".kmp", ".szs", ".kmp", @@ -810,7 +834,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Track information file" }, - // FF_KMP_TXT = 66 + // FF_KMP_TXT = 68 { FF_KMP_TXT, FF_KMP, FF_KMP_TXT, "KMPTXT", ".txt", ".szs", ".txt", @@ -822,7 +846,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Text version of KMP" }, - // FF_ITEMSLT = 67 + // FF_ITEMSLT = 69 { FF_ITEMSLT, FF_ITEMSLT, FF_ITEMSLT_TXT, "ITEMSLT", ".bin", ".szs", ".slt", @@ -834,7 +858,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_ITEMSLT_TXT = 68 + // FF_ITEMSLT_TXT = 70 { FF_ITEMSLT_TXT, FF_ITEMSLT, FF_ITEMSLT_TXT, "ITEMSLTTXT", ".txt", ".szs", ".txt", @@ -846,7 +870,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_KMG = 69 + // FF_KMG = 71 { FF_KMG, FF_KMG, FF_KMG_TXT, "KMG", ".kmg", ".szs", ".kmg", @@ -858,7 +882,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_KMG_TXT = 70 + // FF_KMG_TXT = 72 { FF_KMG_TXT, FF_KMG, FF_KMG_TXT, "KMGTXT", ".txt", ".szs", ".txt", @@ -870,7 +894,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_KRM = 71 + // FF_KRM = 73 { FF_KRM, FF_KRM, FF_KRM_TXT, "KRM", ".krm", ".szs", ".krm", @@ -882,7 +906,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_KRM_TXT = 72 + // FF_KRM_TXT = 74 { FF_KRM_TXT, FF_KRM, FF_KRM_TXT, "KRMTXT", ".txt", ".szs", ".txt", @@ -894,7 +918,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_KRT = 73 + // FF_KRT = 75 { FF_KRT, FF_KRT, FF_KRT_TXT, "KRT", ".krt", ".szs", ".krt", @@ -906,7 +930,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_KRT_TXT = 74 + // FF_KRT_TXT = 76 { FF_KRT_TXT, FF_KRT, FF_KRT_TXT, "KRTTXT", ".txt", ".szs", ".txt", @@ -918,7 +942,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_OBJFLOW = 75 + // FF_OBJFLOW = 77 { FF_OBJFLOW, FF_OBJFLOW, FF_OBJFLOW_TXT, "OBFLOW", ".bin", ".szs", ".bin", @@ -930,7 +954,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_OBJFLOW_TXT = 76 + // FF_OBJFLOW_TXT = 78 { FF_OBJFLOW_TXT, FF_OBJFLOW, FF_OBJFLOW_TXT, "OF-TXT", ".txt", ".szs", ".txt", @@ -942,7 +966,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_GH_ITEM = 77 + // FF_GH_ITEM = 79 { FF_GH_ITEM, FF_GH_ITEM, FF_GH_ITEM_TXT, "GHITEM", ".bin", ".szs", ".bin", @@ -954,7 +978,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_GH_ITEM_TXT = 78 + // FF_GH_ITEM_TXT = 80 { FF_GH_ITEM_TXT, FF_GH_ITEM, FF_GH_ITEM_TXT, "GI-TXT", ".txt", ".szs", ".txt", @@ -966,7 +990,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_GH_IOBJ = 79 + // FF_GH_IOBJ = 81 { FF_GH_IOBJ, FF_GH_IOBJ, FF_GH_IOBJ_TXT, "GHIOBJ", ".bin", ".szs", ".bin", @@ -978,7 +1002,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_GH_IOBJ_TXT = 80 + // FF_GH_IOBJ_TXT = 82 { FF_GH_IOBJ_TXT, FF_GH_IOBJ, FF_GH_IOBJ_TXT, "GIOTXT", ".txt", ".szs", ".txt", @@ -990,7 +1014,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_GH_KART = 81 + // FF_GH_KART = 83 { FF_GH_KART, FF_GH_KART, FF_GH_KART_TXT, "GHKART", ".bin", ".szs", ".bin", @@ -1002,7 +1026,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_GH_KART_TXT = 82 + // FF_GH_KART_TXT = 84 { FF_GH_KART_TXT, FF_GH_KART, FF_GH_KART_TXT, "GK-TXT", ".txt", ".szs", ".txt", @@ -1014,7 +1038,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_GH_KOBJ = 83 + // FF_GH_KOBJ = 85 { FF_GH_KOBJ, FF_GH_KOBJ, FF_GH_KOBJ_TXT, "GHKOBJ", ".bin", ".szs", ".bin", @@ -1026,7 +1050,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_GH_KOBJ_TXT = 84 + // FF_GH_KOBJ_TXT = 86 { FF_GH_KOBJ_TXT, FF_GH_KOBJ, FF_GH_KOBJ_TXT, "GKOTXT", ".txt", ".szs", ".txt", @@ -1038,7 +1062,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_DRIVER = 85 + // FF_DRIVER = 87 { FF_DRIVER, 0, 0, "DRV", ".bin", ".szs", ".bin", @@ -1050,7 +1074,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_VEHICLE = 86 + // FF_VEHICLE = 88 { FF_VEHICLE, 0, 0, "VEH", ".bin", ".szs", ".bin", @@ -1062,7 +1086,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_BRASD = 87 + // FF_BRASD = 89 { FF_BRASD, 0, 0, "BRASD", ".brasd", ".szs", ".brasd", @@ -1074,7 +1098,7 @@ const file_type_t FileTypeTab[FF_N+1] = filetype_info_unknown }, - // FF_RKG = 88 + // FF_RKG = 90 { FF_RKG, 0, 0, "RKG", ".rkg", ".szs", ".rkg", @@ -1086,7 +1110,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_RKCO = 89 + // FF_RKCO = 91 { FF_RKCO, 0, 0, "RKCO", ".rkco", ".szs", ".rkco", @@ -1098,7 +1122,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_STATICR = 90 + // FF_STATICR = 92 { FF_STATICR, 0, 0, "STATICR", ".rel", ".szs", ".rel", @@ -1110,7 +1134,7 @@ const file_type_t FileTypeTab[FF_N+1] = "A 'StaticR.rel' file" }, - // FF_DOL = 91 + // FF_DOL = 93 { FF_DOL, 0, 0, "DOL", ".dol", ".szs", ".dol", @@ -1122,7 +1146,7 @@ const file_type_t FileTypeTab[FF_N+1] = "An executable DOL file" }, - // FF_GCT = 92 + // FF_GCT = 94 { FF_GCT, 0, 0, "GCT", ".gct", ".szs", ".gct", @@ -1134,7 +1158,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Gecko Cheat Code, binary" }, - // FF_GCT_TXT = 93 + // FF_GCT_TXT = 95 { FF_GCT_TXT, 0, 0, "GCT-TXT", ".gct", ".szs", ".gct", @@ -1146,7 +1170,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Gecko Cheat Code, text" }, - // FF_GCH = 94 + // FF_GCH = 96 { FF_GCH, 0, 0, "GCH", ".gch", ".szs", ".gch", @@ -1158,7 +1182,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Gecko Cheat Handler + coded" }, - // FF_WCH = 95 + // FF_WCH = 97 { FF_WCH, 0, 0, "WCH", ".wch", ".szs", ".wch", @@ -1170,7 +1194,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Wiimms Cheat Handler + codes" }, - // FF_WPF = 96 + // FF_WPF = 98 { FF_WPF, 0, 0, "WPF", ".wpf", ".szs", ".wpf", @@ -1182,7 +1206,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Wiimms Patch File" }, - // FF_XPF = 97 + // FF_XPF = 99 { FF_XPF, 0, 0, "XPF", ".xpf", ".szs", ".xpf", @@ -1194,7 +1218,7 @@ const file_type_t FileTypeTab[FF_N+1] = "Extended Patch File" }, - // FF_DISTRIB = 98 + // FF_DISTRIB = 100 { FF_DISTRIB, 0, 0, "DISTRIB", ".txt", ".szs", ".txt", @@ -1206,7 +1230,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_PNG = 99 + // FF_PNG = 101 { FF_PNG, 0, 0, "PNG", ".png", ".png", ".png", @@ -1218,7 +1242,7 @@ const file_type_t FileTypeTab[FF_N+1] = "A public image format" }, - // FF_PORTDB = 100 + // FF_PORTDB = 102 { FF_PORTDB, 0, 0, "PORTDB", ".bin", ".szs", ".bin", @@ -1230,7 +1254,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_TXT = 101 + // FF_TXT = 103 { FF_TXT, 0, 0, "TXT", ".txt", ".szs", ".txt", @@ -1242,7 +1266,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_SCRIPT = 102 + // FF_SCRIPT = 104 { FF_SCRIPT, 0, 0, "SCRIPT", ".script", ".szs", ".script", @@ -1254,7 +1278,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_JSON = 103 + // FF_JSON = 105 { FF_JSON, 0, 0, "JSON", ".json", ".szs", ".json", @@ -1266,7 +1290,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_SH = 104 + // FF_SH = 106 { FF_SH, 0, 0, "SH", ".sh", ".szs", ".sh", @@ -1278,7 +1302,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_BASH = 105 + // FF_BASH = 107 { FF_BASH, 0, 0, "BASH", ".sh", ".szs", ".sh", @@ -1290,7 +1314,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_PHP = 106 + // FF_PHP = 108 { FF_PHP, 0, 0, "PHP", ".php", ".szs", ".php", @@ -1302,7 +1326,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_MAKEDOC = 107 + // FF_MAKEDOC = 109 { FF_MAKEDOC, 0, 0, "MAKEDOC", ".md", ".szs", ".md", @@ -1314,7 +1338,7 @@ const file_type_t FileTypeTab[FF_N+1] = EmptyString }, - // FF_DIRECTORY = 108 + // FF_DIRECTORY = 110 { FF_DIRECTORY, 0, 0, "DIR", ".d", ".d", ".d", @@ -1344,8 +1368,10 @@ const KeywordTab_t cmdtab_FileType[] = { FF_YAZ1, "YAZ1", 0, 0x103 }, { FF_XYZ, "XYZ", 0, 0x103 }, { FF_BZ, "BZ", 0, 0x103 }, + { FF_YBZ, "YBZ", 0, 0x103 }, { FF_BZIP2, "BZ2", "BZIP2", 0x103 }, { FF_LZ, "LZ", 0, 0x103 }, + { FF_YLZ, "YLZ", 0, 0x103 }, { FF_LZMA, "LZMA", 0, 0x103 }, { FF_XZ, "XZ", 0, 0x3 }, { FF_U8, "U8", 0, 0x10f05 }, diff --git a/project/src/file-type.h b/project/src/file-type.h index 15c237c..81a0f08 100644 --- a/project/src/file-type.h +++ b/project/src/file-type.h @@ -65,139 +65,141 @@ typedef enum file_format_t FF_YAZ1, // 2 FF_XYZ, // 3 FF_BZ, // 4 - FF_BZIP2, // 5 - FF_LZ, // 6 - FF_LZMA, // 7 - FF_XZ, // 8 + FF_YBZ, // 5 + FF_BZIP2, // 6 + FF_LZ, // 7 + FF_YLZ, // 8 + FF_LZMA, // 9 + FF_XZ, // 10 - FF_U8, // 9 - FF_WU8, // 10 - FF_RARC, // 11 - FF_BRRES, // 12 - FF_BREFF, // 13 - FF_BREFT, // 14 - FF_RKC, // 15 - FF_PACK, // 16 - FF_USE_LTA, // 17 - FF_LTA, // 18 - FF_LFL, // 19 + FF_U8, // 11 + FF_WU8, // 12 + FF_RARC, // 13 + FF_BRRES, // 14 + FF_BREFF, // 15 + FF_BREFT, // 16 + FF_RKC, // 17 + FF_PACK, // 18 + FF_USE_LTA, // 19 + FF_LTA, // 20 + FF_LFL, // 21 - FF_CHR, // 20 - FF_CLR, // 21 - FF_MDL, // 22 - FF_PAT, // 23 - FF_SCN, // 24 - FF_SHP, // 25 - FF_SRT, // 26 - FF_TEX, // 27 + FF_CHR, // 22 + FF_CLR, // 23 + FF_MDL, // 24 + FF_PAT, // 25 + FF_SCN, // 26 + FF_SHP, // 27 + FF_SRT, // 28 + FF_TEX, // 29 - FF_TEX_CT, // 28 - FF_CTDEF, // 29 + FF_TEX_CT, // 30 + FF_CTDEF, // 31 - FF_CT0_CODE, // 30 - FF_CT0_DATA, // 31 - FF_CT1_CODE, // 32 - FF_CT1_DATA, // 33 + FF_CT0_CODE, // 32 + FF_CT0_DATA, // 33 + FF_CT1_CODE, // 34 + FF_CT1_DATA, // 35 - FF_CUP1, // 34 - FF_CRS1, // 35 - FF_MOD1, // 36 - FF_MOD2, // 37 - FF_OVR1, // 38 + FF_CUP1, // 36 + FF_CRS1, // 37 + FF_MOD1, // 38 + FF_MOD2, // 39 + FF_OVR1, // 40 - FF_LE_BIN, // 39 - FF_LEX, // 40 - FF_LEX_TXT, // 41 + FF_LE_BIN, // 41 + FF_LEX, // 42 + FF_LEX_TXT, // 43 - FF_LPAR, // 42 - FF_LEDEF, // 43 - FF_LEDIS, // 44 - FF_LEREF, // 45 - FF_LESTR, // 46 - FF_SHA1REF, // 47 - FF_SHA1ID, // 48 - FF_PREFIX, // 49 - FF_MTCAT, // 50 - FF_CT_SHA1, // 51 + FF_LPAR, // 44 + FF_LEDEF, // 45 + FF_LEDIS, // 46 + FF_LEREF, // 47 + FF_LESTR, // 48 + FF_SHA1REF, // 49 + FF_SHA1ID, // 50 + FF_PREFIX, // 51 + FF_MTCAT, // 52 + FF_CT_SHA1, // 53 - FF_MDL_TXT, // 52 + FF_MDL_TXT, // 54 - FF_PAT_TXT, // 53 + FF_PAT_TXT, // 55 - FF_TPL, // 54 - FF_TPLX, // 55 - FF_CUPICON, // 56 - FF_BTI, // 57 - FF_BREFT_IMG, // 58 + FF_TPL, // 56 + FF_TPLX, // 57 + FF_CUPICON, // 58 + FF_BTI, // 59 + FF_BREFT_IMG, // 60 - FF_BMG, // 59 - FF_BMG_TXT, // 60 + FF_BMG, // 61 + FF_BMG_TXT, // 62 - FF_KCL, // 61 - FF_KCL_TXT, // 62 - FF_WAV_OBJ, // 63 - FF_SKP_OBJ, // 64 + FF_KCL, // 63 + FF_KCL_TXT, // 64 + FF_WAV_OBJ, // 65 + FF_SKP_OBJ, // 66 - FF_KMP, // 65 - FF_KMP_TXT, // 66 + FF_KMP, // 67 + FF_KMP_TXT, // 68 - FF_ITEMSLT, // 67 - FF_ITEMSLT_TXT, // 68 + FF_ITEMSLT, // 69 + FF_ITEMSLT_TXT, // 70 - FF_KMG, // 69 - FF_KMG_TXT, // 70 + FF_KMG, // 71 + FF_KMG_TXT, // 72 - FF_KRM, // 71 - FF_KRM_TXT, // 72 + FF_KRM, // 73 + FF_KRM_TXT, // 74 - FF_KRT, // 73 - FF_KRT_TXT, // 74 + FF_KRT, // 75 + FF_KRT_TXT, // 76 - FF_OBJFLOW, // 75 - FF_OBJFLOW_TXT, // 76 + FF_OBJFLOW, // 77 + FF_OBJFLOW_TXT, // 78 - FF_GH_ITEM, // 77 - FF_GH_ITEM_TXT, // 78 + FF_GH_ITEM, // 79 + FF_GH_ITEM_TXT, // 80 - FF_GH_IOBJ, // 79 - FF_GH_IOBJ_TXT, // 80 + FF_GH_IOBJ, // 81 + FF_GH_IOBJ_TXT, // 82 - FF_GH_KART, // 81 - FF_GH_KART_TXT, // 82 + FF_GH_KART, // 83 + FF_GH_KART_TXT, // 84 - FF_GH_KOBJ, // 83 - FF_GH_KOBJ_TXT, // 84 + FF_GH_KOBJ, // 85 + FF_GH_KOBJ_TXT, // 86 - FF_DRIVER, // 85 - FF_VEHICLE, // 86 + FF_DRIVER, // 87 + FF_VEHICLE, // 88 - FF_BRASD, // 87 - FF_RKG, // 88 - FF_RKCO, // 89 + FF_BRASD, // 89 + FF_RKG, // 90 + FF_RKCO, // 91 - FF_STATICR, // 90 - FF_DOL, // 91 + FF_STATICR, // 92 + FF_DOL, // 93 - FF_GCT, // 92 - FF_GCT_TXT, // 93 - FF_GCH, // 94 - FF_WCH, // 95 - FF_WPF, // 96 - FF_XPF, // 97 - FF_DISTRIB, // 98 + FF_GCT, // 94 + FF_GCT_TXT, // 95 + FF_GCH, // 96 + FF_WCH, // 97 + FF_WPF, // 98 + FF_XPF, // 99 + FF_DISTRIB, // 100 - FF_PNG, // 99 - FF_PORTDB, // 100 + FF_PNG, // 101 + FF_PORTDB, // 102 - FF_TXT, // 101 - FF_SCRIPT, // 102 - FF_JSON, // 103 - FF_SH, // 104 - FF_BASH, // 105 - FF_PHP, // 106 - FF_MAKEDOC, // 107 + FF_TXT, // 103 + FF_SCRIPT, // 104 + FF_JSON, // 105 + FF_SH, // 106 + FF_BASH, // 107 + FF_PHP, // 108 + FF_MAKEDOC, // 109 - FF_DIRECTORY, // 108 + FF_DIRECTORY, // 110 //--- number of elements diff --git a/project/src/lib-analyze.c b/project/src/lib-analyze.c index de87cca..ffb48b7 100644 --- a/project/src/lib-analyze.c +++ b/project/src/lib-analyze.c @@ -192,6 +192,18 @@ void AnalyzeSZS FindSpecialFilesSZS(szs,false); + //--- scan slots + + AnalyzeSlot(&as->slotana,szs); + if (fname) + AnalyzeSlotByName(&as->slotinfo,true,MemByString(fname)); + if (as->slotana.mandatory_slot[0]) + AnalyzeSlotAttrib(&as->slotinfo,false,MemByString(as->slotana.mandatory_slot)); + FinalizeSlotInfo(&as->slotinfo,true); + if (*as->slotinfo.slot_attrib) + ct_dest = StringCat2E(ct_dest,ct_end,",",as->slotinfo.slot_attrib); + + //--- scan LEX InitializeLexInfo(&as->lexinfo); @@ -202,26 +214,22 @@ void AnalyzeSZS InitializeLEX(&lex); lex.check_only = true; ScanLEX(&lex,false,szs->course_lex_data,szs->course_lex_size); - szs->have.lex_sect = lex.have_sect; - szs->have.lex_feat = lex.have_feat; - szs->have.lex_apply_otl = lex.apply_otl; - SetupLexInfo(&as->lexinfo,&lex); + if (lex.have_sect) + { + szs->have.lex_sect = lex.have_sect; + szs->have.lex_feat = lex.have_feat; + szs->have.lex_apply_otl = lex.apply_otl; + SetupLexInfo(&as->lexinfo,&lex); + } + if (!lex.have_sect) + { + szs->course_lex_data = 0; + szs->course_lex_size = 0; + } ResetLEX(&lex); } - //--- scan slots - - AnalyzeSlot(&as->slotana,szs); - if (fname) - AnalyzeSlotByName(&as->slotinfo,true,MemByString(fname)); - if (as->slotana.mandatory_slot[0]) - AnalyzeSlotAttrib(&as->slotinfo,false,MemByString(as->slotana.mandatory_slot)); - FinalizeSlotInfo(&as->slotinfo,true); - if (*as->slotinfo.slot_attrib) - ct_dest = StringCat2E(ct_dest,ct_end,",",as->slotinfo.slot_attrib); - - //--- scan KMP bool valid_track = true; // use temp var because of early 'return' @@ -390,11 +398,16 @@ void AnalyzeSZS ct_dest = StringCopyE(ct_dest,ct_end,",aiparam"); } - if ( szs->have.szs[HAVESZS_LICENSE] > HFM_NONE ) + if ( szs->have.szs[HAVESZS_LICENSE_TXT] > HFM_NONE ) { ct_dest = StringCopyE(ct_dest,ct_end,",license"); } + if ( szs->have.szs[HAVESZS_VERSION_BIN] > HFM_NONE ) + { + ct_dest = StringCopyE(ct_dest,ct_end,",vers_bin"); + } + //--- scan KCL diff --git a/project/src/lib-bzip2.c b/project/src/lib-bzip2.c index f3f088b..363efe0 100644 --- a/project/src/lib-bzip2.c +++ b/project/src/lib-bzip2.c @@ -84,7 +84,7 @@ int IsBZIP2 // 1..9: seems to be BZIP2 data; compression level is returned cvp data, // NULL or data to investigate - uint size // size of 'data' + int size // size of 'data' ) { const u8 *d = data; @@ -412,7 +412,7 @@ enumError EncodeBZIP2 uint *dest_written, // store num bytes written to 'dest', never NULL bool use_iobuf, // true: allow the usage of 'iobuf' uint header_size, // insert 'header_size' bytes before dest data - bool add_dec_size, // true: add decompressed size + bool add_dec_size, // true: add decompressed size before BZIP2 header const void *src, // source buffer uint src_size, // size of source buffer @@ -599,7 +599,7 @@ enumError DecodeBZIP2buf uint dest_size, // size of 'dest' uint *dest_written, // store num bytes written to 'dest', never NULL - const void *src, // source buffer, first 4 bytes = dest size + const void *src, // source buffer uint src_size // size of source buffer ) { @@ -616,7 +616,8 @@ enumError DecodeBZIP2buf DASSERT(dest_written); DASSERT(src); - uint dest_need = ntohl(*(u32*)src); +// uint dest_need = ntohl(*(u32*)src); + uint dest_need = dest_size; PRINT("DecodeBZIP2buf() %u -> %u,%u bytes\n",src_size,dest_size,dest_need); if ( be32(src+4) == 0x52415730 ) // "RAW0" == not compressed @@ -629,7 +630,7 @@ enumError DecodeBZIP2buf *dest_written = dest_need; int bzerror = BZ2_bzBuffToBuffDecompress ( (char*)dest, dest_written, - (char*)src+4, src_size-4, 0, 0 ); + (char*)src, src_size, 0, 0 ); if ( bzerror != BZ_OK ) return ERROR0(ERR_BZIP2, @@ -661,7 +662,7 @@ enumError DecodeBZIP2 u8 *dest = MALLOC(dest_size+header_size); memset(dest,0,header_size); - enumError err = DecodeBZIP2buf(dest+header_size,dest_size,dest_written,src,src_size); + enumError err = DecodeBZIP2buf(dest+header_size,dest_size,dest_written,src+4,src_size-4); if (err) { FREE(dest); diff --git a/project/src/lib-bzip2.h b/project/src/lib-bzip2.h index 97a0257..e965236 100644 --- a/project/src/lib-bzip2.h +++ b/project/src/lib-bzip2.h @@ -88,7 +88,7 @@ int IsBZIP2 // 1..9: seems to be BZIP2 data; compression level is returned cvp data, // NULL or data to investigate - uint size // size of 'data' + int size // size of 'data' ); //----------------------------------------------------------------------------- @@ -221,7 +221,7 @@ enumError EncodeBZIP2 bool use_iobuf, // true: allow the usage of 'iobuf' uint header_size, // insert 'header_size' bytes before dest data - bool add_dec_size, // true: add decompressed size + bool add_dec_size, // true: add decompressed size before BZIP2 header const void *src, // source buffer uint src_size, // size of source buffer @@ -264,7 +264,7 @@ enumError DecodeBZIP2buf uint dest_size, // size of 'dest' uint *dest_written, // store num bytes written to 'dest_ptr', never NULL - const void *src, // source buffer, first 4 bytes = dest size + const void *src, // source buffer uint src_size // size of source buffer ); diff --git a/project/src/lib-file.c b/project/src/lib-file.c index 68730c9..e1ef3cb 100644 --- a/project/src/lib-file.c +++ b/project/src/lib-file.c @@ -916,6 +916,9 @@ file_format_t GetByMagicFF switch(magic32) { //--- see below for BOM support +// case YBZ_MAGIC_NUM: return FF_YBZ; +// case YLZ_MAGIC_NUM: return FF_YLZ; + case BMG_TEXT_MAGIC_NUM: return FF_BMG_TXT; case KCL_TEXT_MAGIC_NUM: return FF_KCL_TXT; case KMP_TEXT_MAGIC_NUM: return FF_KMP_TXT; @@ -927,7 +930,11 @@ file_format_t GetByMagicFF case GCTTXT_MAGIC_NUM: return FF_GCT_TXT; - case YAZ0_MAGIC_NUM: return FF_YAZ0; + case YAZ0_MAGIC_NUM: + return IsBZIP2(data+sizeof(ybz_header_t),data_size-sizeof(ybz_header_t)) >= 0 + ? FF_YBZ + : IsYLZ(data,data_size) >= 0 ? FF_YLZ : FF_YAZ0; + case YAZ1_MAGIC_NUM: return FF_YAZ1; case XYZ0_MAGIC_NUM: return FF_XYZ; // case BZ_MAGIC_NUM: return FF_BZ; @@ -2648,6 +2655,21 @@ bool IsArchiveFF ( file_format_t ff ) //----------------------------------------------------------------------------- +bool IsCompressFF ( file_format_t ff ) +{ + return (uint)ff < FF_N && FileTypeTab[ff].attrib & FFT_COMPRESS; +} + +//----------------------------------------------------------------------------- + +bool IsTrackCompressFF ( file_format_t ff ) +{ + const uint cond = FFT_TRACK | FFT_COMPRESS; + return (uint)ff < FF_N && ( FileTypeTab[ff].attrib & cond ) == cond; +} + +//----------------------------------------------------------------------------- + bool IsTextFF ( file_format_t ff ) { return (uint)ff < FF_N && FileTypeTab[ff].attrib & FFT_TEXT; diff --git a/project/src/lib-image2.c b/project/src/lib-image2.c index d005ec5..be67329 100644 --- a/project/src/lib-image2.c +++ b/project/src/lib-image2.c @@ -2629,7 +2629,8 @@ const KeywordTab_t cmdtab_transform[] = // [[tpl-ex+]] { FF_TPL, "TPL", 0, TM_IDX_FILE|TM_F_PAL }, { FF_TPLX, "TPLx", "TPLX", TM_IDX_FILE|TM_F_PAL }, - { FF_CUPICON, "CUPICON", "CUP", TM_IDX_FILE }, + { FF_CUPICON, "CUPICON", "CUPICONS", TM_IDX_FILE }, + { FF_CUPICON, "CUP", "CUPS", TM_IDX_FILE }, { FF_BTI, "BTI", 0, TM_IDX_FILE|TM_F_PAL }, { FF_TEX, "TEX", "TEX0", TM_IDX_FILE }, { FF_BREFT_IMG, "BREFT-IMG", "BREFTIMG", TM_IDX_FILE }, diff --git a/project/src/lib-lecode.c b/project/src/lib-lecode.c index 4dd1078..7dacb35 100644 --- a/project/src/lib-lecode.c +++ b/project/src/lib-lecode.c @@ -3326,30 +3326,31 @@ void DumpLEAnalyse ( FILE *f, uint indent, const le_analyze_t *ana ) ,indent,"", h->cheat_mode, GetCheatModeInfo(h->cheat_mode) ); + if ( ana->param_size >= sizeof(le_binpar_v1_260_t) ) + { + fprintf(f, + "%*s" "Item cheats: %u = %s\n" + "%*s" "Debug mode: %u = %s\n" + ,indent,"", h->item_cheat, h->item_cheat ? "enabled" : "disabled" + ,indent,"", h->debug_mode, GetLecodeDebugInfo(h->debug_mode) + ); + } + fprintf(f, - "%*s" "Engine chances: " - "%u + %u + %u = %u (1%s0cc+mirror=total)\n" - "%*s" "200cc: %u = %sabled\n" "%*s" "Perform. monitor: %u = %s\n" - ,indent,"" - ,h->engine[0], h->engine[1], h->engine[2] - ,h->engine[0] + h->engine[1] + h->engine[2] - ,h->enable_200cc ? "50cc+20" : "00cc+15" - ,indent,"", h->enable_200cc, h->enable_200cc ? "en" :"dis" ,indent,"", h->enable_perfmon, h->enable_perfmon > 1 ? "Wii(U)+Dolphin" : h->enable_perfmon ? "Wii(U) only" :"disabled" ); - if ( ana->param_size >= sizeof(le_binpar_v1_37_t) ) - fprintf(f, - "%*s" "Custom Timetrial: %u = %sabled\n" - "%*s" "Extended P-Flags: %u = %sabled\n" - "%*s" "Block tracks for: %u race%s\n" - ,indent,"", h->enable_custom_tt, h->enable_custom_tt ? "en" :"dis" - ,indent,"", h->enable_xpflags, h->enable_xpflags ? "en" :"dis" - ,indent,"", h->block_track, h->block_track == 1 ? "" : "s" - ); + if ( ana->param_size >= sizeof(le_binpar_v1_277_t) ) + fprintf(f,"%*s" "Slot format: %u = \"%%0%ux\"\n" + ,indent,"", h->slot_04x, h->slot_04x ? 4 : 3 ); + + if ( ana->param_size >= sizeof(le_binpar_v1_276_t) ) + fprintf(f,"%*s" "Cup icon size: %u x %u pixels (%u bytes)\n" + ,indent,"", h->cup_icon_size, h->cup_icon_size + ,h->cup_icon_size * h->cup_icon_size / 2 ); if ( ana->param_size >= sizeof(le_binpar_v1_1bc_t) ) { @@ -3371,15 +3372,26 @@ void DumpLEAnalyse ( FILE *f, uint indent, const le_analyze_t *ana ) indent,"", h->enable_speedo, comment ); } - if ( ana->param_size >= sizeof(le_binpar_v1_260_t) ) - { + fprintf(f, + "%*s" "200cc: %u = %sabled\n" + "%*s" "Engine chances: " + "%u + %u + %u = %u (1%s0cc+mirror=total)\n" + ,indent,"", h->enable_200cc, h->enable_200cc ? "en" :"dis" + ,indent,"" + ,h->engine[0], h->engine[1], h->engine[2] + ,h->engine[0] + h->engine[1] + h->engine[2] + ,h->enable_200cc ? "50cc+20" : "00cc+15" + ); + + if ( ana->param_size >= sizeof(le_binpar_v1_37_t) ) fprintf(f, - "%*s" "Debug mode: %u = %s\n" - "%*s" "Item cheat: %u = %s\n" - ,indent,"", h->debug_mode, GetLecodeDebugInfo(h->debug_mode) - ,indent,"", h->item_cheat, h->item_cheat ? "enabled" : "disabled" + "%*s" "Custom Timetrial: %u = %sabled\n" + "%*s" "Extended P-Flags: %u = %sabled\n" + "%*s" "Block tracks for: %u race%s\n" + ,indent,"", h->enable_custom_tt, h->enable_custom_tt ? "en" :"dis" + ,indent,"", h->enable_xpflags, h->enable_xpflags ? "en" :"dis" + ,indent,"", h->block_track, h->block_track == 1 ? "" : "s" ); - } if ( ana->param_size >= sizeof(le_binpar_v1_264_t) ) { @@ -3427,15 +3439,6 @@ void DumpLEAnalyse ( FILE *f, uint indent, const le_analyze_t *ana ) ); } - if ( ana->param_size >= sizeof(le_binpar_v1_276_t) ) - fprintf(f,"%*s" "Cup icon size: %u x %u pixels (%u bytes)\n" - ,indent,"", h->cup_icon_size, h->cup_icon_size - ,h->cup_icon_size * h->cup_icon_size / 2 ); - - if ( ana->param_size >= sizeof(le_binpar_v1_277_t) ) - fprintf(f,"%*s" "Slot format: %u = \"%%0%ux\"\n" - ,indent,"", h->slot_04x, h->slot_04x ? 4 : 3 ); - // [[new-lpar]] #if 0 // for later use diff --git a/project/src/lib-ledis.c b/project/src/lib-ledis.c index 9a1bb1e..9be9e53 100644 --- a/project/src/lib-ledis.c +++ b/project/src/lib-ledis.c @@ -8349,9 +8349,11 @@ enumError CreateTrackArchivesLD ( le_distrib_t *ld, ccp destdir, mem_t mem_opt ) { O_YAZ = 0x001, // force FF_YAZ0 compression O_BZ = 0x002, // force FF_BZ compression - O_BZIP2 = 0x003, // force FF_BZIP2 compression - O_LZ = 0x004, // force FF_LZ compression - O_LZMA = 0x005, // force FF_LZMA compression + O_YBZ = 0x003, // force FF_YBZ compression + O_BZIP2 = 0x004, // force FF_BZIP2 compression + O_LZ = 0x005, // force FF_LZ compression + O_YLZ = 0x006, // force FF_YLZ compression + O_LZMA = 0x007, // force FF_LZMA compression O_M_METHOD = 0x007, // mask for above O_RM = 0x008, @@ -8366,8 +8368,10 @@ enumError CreateTrackArchivesLD ( le_distrib_t *ld, ccp destdir, mem_t mem_opt ) { { O_YAZ, "YAZ0", "SZS", O_M_METHOD }, { O_BZ, "WBZ", "BZ", O_M_METHOD }, + { O_YBZ, "YBZ", 0, O_M_METHOD }, { O_BZIP2, "BZIP2", "BZ2", O_M_METHOD }, { O_LZ, "WLZ", "LZ", O_M_METHOD }, + { O_YLZ, "YLZ", 0, O_M_METHOD }, { O_LZMA, "LZMA", 0, O_M_METHOD }, { O_RM, "REMOVE", "RM", 0 }, { O_EXT, "EXT", 0, 0 }, @@ -8390,8 +8394,10 @@ enumError CreateTrackArchivesLD ( le_distrib_t *ld, ccp destdir, mem_t mem_opt ) FF_UNKNOWN, FF_YAZ0, FF_BZ, + FF_YBZ, FF_BZIP2, FF_LZ, + FF_YLZ, FF_LZMA, }; diff --git a/project/src/lib-lex.c b/project/src/lib-lex.c index 161a731..304b6a6 100644 --- a/project/src/lib-lex.c +++ b/project/src/lib-lex.c @@ -1234,7 +1234,7 @@ static bool RemoveElementLEX for ( i = 0, ss = lex->item; i < lex->item_used; i++, ss++ ) if ( *ss == li ) { - memmove(ss,ss+1,lex->item_used-i); + memmove(ss,ss+1,sizeof(*ss)*(lex->item_used-i)); lex->item_used--; FREE((lex_item_t*)li); UpdateHaveLex(lex); @@ -1492,8 +1492,7 @@ void ResetLEX ( lex_t * lex ) if (lex->item) { - uint i; - for ( i = 0; i < lex->item_used; i++ ) + for ( int i = 0; i < lex->item_used; i++ ) if (lex->item[i]) FREE(lex->item[i]); FREE(lex->item); @@ -3705,7 +3704,12 @@ bool PurgeLEX ( lex_t * lex ) } if (remove) - modified |= RemoveElementLEX(lex,*ss); + { + if (RemoveElementLEX(lex,*ss)) + modified |= 1; + else + i++; + } else i++; } diff --git a/project/src/lib-lzma.c b/project/src/lib-lzma.c index 887d8a0..cb007b2 100644 --- a/project/src/lib-lzma.c +++ b/project/src/lib-lzma.c @@ -92,6 +92,33 @@ int IsLZ /////////////////////////////////////////////////////////////////////////////// +int IsYLZ +( + // returns + // -1: not LZ data + // 0: seems to be YLZ; compression level is unknown + // 1..9: seems to be YLZ; compression level is returned + + cvp data, // NULL or data to investigate + uint size // size of 'data' +) +{ + const uint delta = sizeof(ylz_header_t); + const u8 *d = data; + if ( !d || size < delta+1 || memcmp(d,YLZ_MAGIC,4) ) + { + return -1; + } + + const u32 magic = be24(d+delta); + if ( magic != LZMA_MAGIC_NUM3 ) + return -1; + + return GetComprLevelLZMA(le32(d+delta+1)); +} + +/////////////////////////////////////////////////////////////////////////////// + int IsLZMA ( // returns diff --git a/project/src/lib-lzma.h b/project/src/lib-lzma.h index d901c02..eb89ece 100644 --- a/project/src/lib-lzma.h +++ b/project/src/lib-lzma.h @@ -70,6 +70,19 @@ int IsLZ //----------------------------------------------------------------------------- +int IsYLZ +( + // returns + // -1: not LZ data + // 0: seems to be LZ; compression level is unknown + // 1..9: seems to be LZ; compression level is returned + + cvp data, // NULL or data to investigate + uint size // size of 'data' +); + +//----------------------------------------------------------------------------- + int IsLZMA ( // returns diff --git a/project/src/lib-mdl.c b/project/src/lib-mdl.c index d90b6a0..aaa1ee6 100644 --- a/project/src/lib-mdl.c +++ b/project/src/lib-mdl.c @@ -3880,7 +3880,6 @@ static int ana_slot42_brres && !strcasecmp(it->name,"course") ) { - PRINT("MOONVIEW MDL FOUND: %x |%s|%s|\n",it->fform,it->path,it->name); szs_file_t szs; // [[fname+]] InitializeSubSZS(&szs,it->szs,it->off,it->size,FF_MDL,it->path,false); diff --git a/project/src/lib-std.c b/project/src/lib-std.c index 73c239f..f9ec149 100644 --- a/project/src/lib-std.c +++ b/project/src/lib-std.c @@ -77,6 +77,7 @@ ccp opt_config = 0; bool opt_no_pager = false; +int opt_zero = 0; ccp tool_name = "?"; ccp std_share_path = 0; ccp share_path = 0; @@ -696,6 +697,28 @@ const KeywordTab_t * CheckCommandHelper /////////////// error messages /////////////// /////////////////////////////////////////////////////////////////////////////// +int FixExitStatus ( int stat ) +{ + return stat == ERR_INTERRUPT + ? stat + : opt_zero > 0 && stat <= ERR_NOT_EXISTS + || opt_zero > 1 && stat <= ERR_WARNING + || opt_zero > 2 && stat <= ERR_ERROR + || opt_zero > 3 + ? 0 + : stat; +} + +/////////////////////////////////////////////////////////////////////////////// + +void ExitFixed ( int stat ) +{ + exit(FixExitStatus(stat)); + ASSERT(0); +} + +/////////////////////////////////////////////////////////////////////////////// + ccp LibGetErrorName ( int stat, ccp ret_not_found ) { switch(stat) @@ -3082,20 +3105,21 @@ int ScanOptCompr ( ccp arg ) { static const KeywordTab_t alias[] = { - { 0, "LIST", 0, -9 }, - { 1, "C-LIST", "CLIST", -9 }, + { 0, "LIST", 0, -9 }, + { 1, "C-LIST", "CLIST", -9 }, - { 0, "UNCOMPRESSED", 0, -1 }, + { 0, "UNCOMPRESSED", 0, -1 }, - { 0, "NOCHUNKS", 0, 1 }, - { 1, "FAST", 0, 1 }, - { 9, "BEST", 0, 1 }, - { 10, "ULTRA", 0, 1 }, + { 0, "NOCHUNKS", 0, 1 }, + { 1, "FAST", 0, 1 }, + { 9, "BEST", 0, 1 }, + { 10, "ULTRA", 0, 1 }, + { COMPR_DEFAULT,"DEFAULT", 0, 1 }, - { 9, "T2", "TRY2", 2 }, - { 9, "T3", "TRY3", 3 }, - { 9, "T4", "TRY4", 4 }, - { 9, "T5", "TRY5", 5 }, + { COMPR_DEFAULT,"T2", "TRY2", 2 }, + { COMPR_DEFAULT,"T3", "TRY3", 3 }, + { COMPR_DEFAULT,"T4", "TRY4", 4 }, + { COMPR_DEFAULT,"T5", "TRY5", 5 }, { 0,0,0,0 } }; @@ -3137,6 +3161,38 @@ int ScanOptCompr ( ccp arg ) return 0; } +//----------------------------------------------------------------------------- + +int GetComprByFF ( file_format_t ff, int compr ) +{ + if (!compr) + compr = opt_compr_mode > 0 ? opt_compr : COMPR_DEFAULT; + + switch(ff) + { + case FF_BZ: + case FF_YBZ: + case FF_BZIP2: + return compr == COMPR_DEFAULT + ? BZIP2_DEFAULT_COMPR + : compr >= 1 && compr <= 9 + ? compr + : opt_compr_mode >= 2 && opt_compr_mode <= 5 + ? -1 + : BZIP2_DEFAULT_COMPR; + + case FF_LZ: + case FF_YLZ: + case FF_LZMA: + return compr >= 1 && compr <= 9 ? compr : LZMA_DEFAULT_COMPR; + + default: + return compr < 1 + ? 9 + : compr; + } +} + /////////////////////////////////////////////////////////////////////////////// int ScanOptPtDir ( ccp arg ) @@ -4160,6 +4216,98 @@ enumError cmd_error() // /////////////////////////////////////////////////////////////////////////////// +/////////////// get compression level /////////////// +/////////////////////////////////////////////////////////////////////////////// + +int GetCompressionLevel +( + // return -1: invalid ff, + // 0: compression level unknown + // 1..9: compression level unknown + + file_format_t ff, // file format, call GetByMagicFF() if FF_UNKNOWN + cvp data, // NULL or pointer to data + uint size // size of data +) +{ + if ( !data || size < 8 ) + return -1; + + if ( ff == FF_UNKNOWN ) + ff = GetByMagicFF(data,size,size); + + int bz_offset = -1; + switch(ff) + { + case FF_BZ: + bz_offset = sizeof(wbz_header_t) + 4; + break; + + case FF_YBZ: + bz_offset = sizeof(ybz_header_t); + break; + + case FF_BZIP2: + bz_offset = 0; + break; + + case FF_LZ: + return IsLZ(data,size); + + case FF_YLZ: + return IsYLZ(data,size); + + case FF_LZMA: + return IsLZMA(data,size); + + case FF_XZ: + return IsXZ(data,size); + + default: + return -1; + } + + return bz_offset >= 0 && size > bz_offset + ? IsBZIP2(data+bz_offset,size-bz_offset) + : 0; +} + +/////////////////////////////////////////////////////////////////////////////// + +ccp GetCompressionSuffix +( + // returns EmptyString[] or CircBuf of format ".#" + + file_format_t ff, // file format, call GetByMagicFF() if FF_UNKNOWN + cvp data, // NULL or pointer to data + uint size // size of data +) +{ + const int compr_level = GetCompressionLevel(ff,data,size); + return compr_level > 0 ? PrintCircBuf(".%u",compr_level) : EmptyString; +} + +/////////////////////////////////////////////////////////////////////////////// + +ccp GetCompressionNameFF +( + // returns const string or CircBuf of format "FF.#" + + file_format_t ff_arch, // FF_UNKNOWN or file format of archive + file_format_t ff_data, // file format of data, call GetByMagicFF() if FF_UNKNOWN + cvp data, // NULL or pointer to data + uint size // size of data +) +{ + ccp name = GetNameFF(ff_arch,ff_data); + const int compr_level = GetCompressionLevel(ff_data,data,size); + return compr_level > 0 + ? PrintCircBuf("%s.%u",name,compr_level) + : name; +} + +// +/////////////////////////////////////////////////////////////////////////////// /////////////// command filetype /////////////// /////////////////////////////////////////////////////////////////////////////// @@ -4179,13 +4327,6 @@ enumError cmd_filetype() max_len = len; } - #if 0 - if ( long_count > 2 ) - printf("\n" - "type decomp vers valid file name\n" - "%.*s\n", max_len + 40, Minus300 ); - else - #endif if ( long_count > 1 ) printf("\n" "type decomp vers valid file name\n" @@ -4203,7 +4344,6 @@ enumError cmd_filetype() const int bufsize = 1200000; // >1MB for BZIP2 char *buf1 = MALLOC(bufsize); char *buf2 = MALLOC(bufsize); - char bufstat[10]; for ( int argi = 0; argi < plist.used; argi++ ) { @@ -4222,7 +4362,7 @@ enumError cmd_filetype() else fform1 = GetByMagicFF(buf1,bufsize,fatt.size); - ccp stat1 = err > ERR_WARNING ? "-" : GetNameFF(0,fform1); + ccp stat1 = err > ERR_WARNING ? "-" : GetCompressionNameFF(0,fform1,buf1,bufsize); ccp buf = buf1; if (long_count) { @@ -4259,22 +4399,16 @@ enumError cmd_filetype() const file_format_t ff_temp = GetByMagicFF(wh->first_8,sizeof(wh->first_8),be32(wh->cdata)); stat2 = GetNameFF(0,ff_temp); - version = GetVersionFF(ff_temp,wh->first_8,sizeof(wh->first_8),&suffix); - if ( fatt.size >= 20 ) - { - char compr = buf1[19]; - if ( compr >= '1' && compr <= '9' ) - { - snprintf(bufstat,sizeof(bufstat),"%s.%c",stat1,compr); - stat1 = bufstat; - } - } + } + else if ( fform1 == FF_YBZ ) + { + ybz_header_t *yh = (ybz_header_t*)buf1; + const file_format_t ff_temp + = GetByMagicFF(yh->first_4,sizeof(yh->first_4),be32(yh->cdata)); + stat2 = GetNameFF(0,ff_temp); } else if ( fform1 == FF_BZIP2 ) { - snprintf(bufstat,sizeof(bufstat),"BZIP2.%u",IsBZIP2(buf1,bufsize)); - stat1 = bufstat; - uint wr; DecodeBZIP2part(buf2,bufsize,&wr,buf1,bufsize); fform2 = GetByMagicFF(buf2,wr,wr); @@ -4288,40 +4422,22 @@ enumError cmd_filetype() const file_format_t ff_temp = GetByMagicFF(wh->first_8,sizeof(wh->first_8),be32(wh->cdata)); stat2 = GetNameFF(0,ff_temp); - version = GetVersionFF(ff_temp,wh->first_8,sizeof(wh->first_8),&suffix); - if ( fatt.size >= 20 ) - { - const uint compr = IsLZ(buf1,bufsize); - if ( compr >= 1 && compr <= 9 ) - { - snprintf(bufstat,sizeof(bufstat),"%s.%u",stat1,compr); - stat1 = bufstat; - } - } + } + else if ( fform1 == FF_YLZ ) + { + ylz_header_t *yh = (ylz_header_t*)buf1; + const file_format_t ff_temp + = GetByMagicFF(yh->first_4,sizeof(yh->first_4),be32(yh->cdata)); + stat2 = GetNameFF(0,ff_temp); } else if ( fform1 == FF_LZMA ) { - const int level = IsLZMA(buf1,bufsize); - if ( level >= 1 ) - { - snprintf(bufstat,sizeof(bufstat),"LZMA.%u",level); - stat1 = bufstat; - } uint wr; DecodeLZMApart(buf2,bufsize,&wr,buf1,bufsize); fform2 = GetByMagicFF(buf2,wr,wr); stat2 = GetNameFF(0,fform2); load_full = true; } - else if ( fform1 == FF_XZ ) - { - const int level = IsXZ(buf1,bufsize); - if ( level >= 1 ) - { - snprintf(bufstat,sizeof(bufstat),"XZ.%u",level); - stat1 = bufstat; - } - } else if ( fform1 == FF_PORTDB ) { const addr_port_version_t *update = (addr_port_version_t*)buf1; @@ -4349,18 +4465,11 @@ enumError cmd_filetype() else valid = IsValid(buf,written,fatt.size,0,fform2,arg); } - #if 0 - if ( long_count > 2 ) - printf("%-7s %-7s %7s %-5s %s:%s\n", - stat1, stat2, vbuf, valid_text[valid], - GetNameFF(fform1,fform2), arg ); - else - #endif - printf("%-7s %-7s %7s %-5s %s\n", - stat1, stat2, vbuf, valid_text[valid], arg ); + + printf("%-7s %-7s %7s %-5s %s\n", stat1, stat2, vbuf, valid_text[valid], arg ); } else - printf("%-7s %-7s %7s %s\n",stat1,stat2,vbuf,arg); + printf("%-7s %-7s %7s %s\n", stat1, stat2,vbuf,arg); } else printf("%-7s %s\n",stat1,arg); diff --git a/project/src/lib-std.h b/project/src/lib-std.h index 6ff932c..c6b7dc8 100644 --- a/project/src/lib-std.h +++ b/project/src/lib-std.h @@ -121,7 +121,6 @@ void LogSHA1 ( ccp func, ccp file, uint line, cvp data, uint size, ccp info ); #define M1(a) ( (typeof(a))~0 ) #define IS_M1(a) ( (a) == (typeof(a))~0 ) - // /////////////////////////////////////////////////////////////////////////////// /////////////// Setup /////////////// @@ -167,6 +166,9 @@ enum //----------------------------------------------------------------------------- +int FixExitStatus ( int stat ); +void ExitFixed ( int stat ) __attribute__ ((noreturn)); + ccp LibGetErrorName ( int stat, ccp ret_not_found ); ccp LibGetErrorText ( int stat, ccp ret_not_found ); @@ -688,7 +690,7 @@ typedef enum cmd_flags_t //----------------------------------------------------------------------------- -ccp GetNameFF ( file_format_t ff1, file_format_t ff2 ); +ccp GetNameFF ( file_format_t ff_arch, file_format_t ff_data ); ccp GetNameFFv ( file_format_t ff1, file_format_t ff2, int version ); ccp GetExtFF ( file_format_t ff1, file_format_t ff2 ); ccp GetBinExtFF ( file_format_t ff ); @@ -761,6 +763,8 @@ bool IsByMagicBRSUB ( const void * data, uint data_size ); bool CanBeTrackFF ( file_format_t ff ); bool IsArchiveFF ( file_format_t ff ); +bool IsCompressFF ( file_format_t ff ); +bool IsTrackCompressFF ( file_format_t ff ); bool IsTextFF ( file_format_t ff ); bool IsGeoHitKartFF ( file_format_t ff ); bool IsGeoHitObjFF ( file_format_t ff ); @@ -775,7 +779,7 @@ void SetCompressionFF ( file_format_t ff_arch, // if >=0: set 'opt_fform' file_format_t ff_compr // if >=0: set 'fform_compr' - // and 'fform_compr_force' + // and 'fform_compr_force' ); static inline bool IsTplFF ( file_format_t ff ) @@ -1806,6 +1810,7 @@ void CheckOptDest ( ccp default_dest, bool default_mkdir ); /////////////////////////////////////////////////////////////////////////////// int ScanOptCompr ( ccp arg ); +int GetComprByFF ( file_format_t ff, int compr ); int ScanOptTracks ( ccp arg ); int ScanOptArenas ( ccp arg ); ccp NormalizeTrackName ( char *buf, uint bufsize, ccp arg ); @@ -2640,6 +2645,42 @@ void AnalyzeKCL ( const struct kcl_t * kcl ); /////////////////////////////////////////////////////////////////////////////// +int GetCompressionLevel +( + // return -1: invalid ff, + // 0: compression level unknown + // 1..9: compression level unknown + + file_format_t ff, // file format, call GetByMagicFF() if FF_UNKNOWN + cvp data, // NULL or pointer to data + uint size // size of data +); + +//----------------------------------------------------------------------------- + +ccp GetCompressionSuffix +( + // returns EmptyString[] or CircBuf of format ".#" + + file_format_t ff, // file format, call GetByMagicFF() if FF_UNKNOWN + cvp data, // NULL or pointer to data + uint size // size of data +); + +//----------------------------------------------------------------------------- + +ccp GetCompressionNameFF +( + // returns const string or CircBuf of format "FF.#" + + file_format_t ff_arch, // FF_UNKNOWN or file format of archive + file_format_t ff_data, // file format of data, call GetByMagicFF() if FF_UNKNOWN + cvp data, // NULL or pointer to data + uint size // size of data +); + +/////////////////////////////////////////////////////////////////////////////// + bool IsExtractEnabled(); // return true if enabled and mkdir() successful bool PrepareExtract @@ -2766,6 +2807,7 @@ typedef struct Image_t Image_t; extern ccp opt_config; extern bool opt_no_pager; +extern int opt_zero; extern ccp config_path; extern ccp tool_name; extern ccp std_share_path; diff --git a/project/src/lib-szs-file.h b/project/src/lib-szs-file.h index aaf7114..a070d3c 100644 --- a/project/src/lib-szs-file.h +++ b/project/src/lib-szs-file.h @@ -70,7 +70,8 @@ typedef enum have_szs_file_t HAVESZS_MINIGAME, // common/minigame.kmg HAVESZS_AIPARAM_BAA, // AIParam/AIParam.baa HAVESZS_AIPARAM_BAS, // AIParam/AIParam.bas - HAVESZS_LICENSE, // license.txt, any case + HAVESZS_LICENSE_TXT, // license.txt, any case + HAVESZS_VERSION_BIN, // version.bin,any case HAVESZS__N } __attribute__ ((packed)) have_szs_file_t; diff --git a/project/src/lib-szs.c b/project/src/lib-szs.c index 7f7631d..4c22d54 100644 --- a/project/src/lib-szs.c +++ b/project/src/lib-szs.c @@ -73,7 +73,8 @@ const ccp have_szs_name[HAVESZS__N] = "minigame", // HAVESZS_MINIGAME "aiparam_baa", // HAVESZS_AIPARAM_BAA "aiparam_bas", // HAVESZS_AIPARAM_BAS - "license", // HAVESZS_LICENSE + "license", // HAVESZS_LICENSE_TXT + "ver_bin", // HAVESZS_VERSION_BIN }; const ccp have_szs_file[HAVESZS__N] = @@ -88,7 +89,8 @@ const ccp have_szs_file[HAVESZS__N] = "common/minigame.kmg", // HAVESZS_MINIGAME "AIParam/AIParam.baa", // HAVESZS_AIPARAM_BAA "AIParam/AIParam.bas", // HAVESZS_AIPARAM_BAS - "license.txt", // HAVESZS_LICENSE + "license.txt", // HAVESZS_LICENSE_TXT + "version.bin", // HAVESZS_VERSION_BIN }; const file_format_t have_szs_fform[HAVESZS__N] = @@ -103,7 +105,8 @@ const file_format_t have_szs_fform[HAVESZS__N] = FF_KMG, // HAVESZS_MINIGAME FF_UNKNOWN, // HAVESZS_AIPARAM_BAA FF_UNKNOWN, // HAVESZS_AIPARAM_BAS - FF_UNKNOWN, // HAVESZS_LICENSE + FF_UNKNOWN, // HAVESZS_LICENSE_TXT + FF_UNKNOWN, // HAVESZS_VERSION_BIN }; // @@ -907,8 +910,10 @@ enumError DecompressSZS switch(szs->fform_file) { case FF_BZ: return DecompressBZ(szs,rm_compressed); + case FF_YBZ: return DecompressYBZ(szs,rm_compressed); case FF_BZIP2: return DecompressBZIP2(szs,rm_compressed); case FF_LZ: return DecompressLZ(szs,rm_compressed); + case FF_YLZ: return DecompressYLZ(szs,rm_compressed); case FF_LZMA: return DecompressLZMA(szs,rm_compressed); default: break; } @@ -1617,20 +1622,6 @@ enumError ClassicCompressYAZ ( yaz_compr_t *yaz, int compr ) /////////////// CompressWith() /////////////// /////////////////////////////////////////////////////////////////////////////// -bool IsCompressFF ( file_format_t ff ) -{ - return ff == FF_YAZ0 - || ff == FF_YAZ1 - || ff == FF_XYZ - || ff == FF_BZ - || ff == FF_BZIP2 - || ff == FF_LZ - || ff == FF_LZMA - ; -} - -/////////////////////////////////////////////////////////////////////////////// - enumError CompressWith ( // returns ERR_WARNING for invalid ff, ERR_NOTHING_TO_DO if already compressed, @@ -1646,9 +1637,9 @@ enumError CompressWith if (!szs) return ERR_OK; // no data - if (!IsCompressFF(ff_compr)) + if (!IsTrackCompressFF(ff_compr)) { - if (!IsCompressFF(ff_fallback)) + if (!IsTrackCompressFF(ff_fallback)) return ERR_WARNING; ff_compr = ff_fallback; } @@ -1666,8 +1657,10 @@ enumError CompressWith switch(ff_compr) { case FF_BZ: return CompressBZ (szs,compr,rm_uncompr); + case FF_YBZ: return CompressYBZ (szs,compr,rm_uncompr); case FF_BZIP2: return CompressBZIP2(szs,compr,rm_uncompr); case FF_LZ: return CompressLZ (szs,compr,rm_uncompr); + case FF_YLZ: return CompressYLZ (szs,compr,rm_uncompr); case FF_LZMA: return CompressLZMA (szs,compr,rm_uncompr); default: break; } @@ -2096,53 +2089,28 @@ u8 * EncodeXYZ // /////////////////////////////////////////////////////////////////////////////// -/////////////// BZ support /////////////// -/////////////////////////////////////////////////////////////////////////////// - -enumError DecompressBZ ( szs_file_t * szs, bool rm_compressed ) -{ - PRINT("DecompressBZ(%p,%d)\n",szs,rm_compressed); - DASSERT(szs); - - if ( !szs->csize || !szs->cdata || szs->data ) - return ERR_OK; - - const wbz_header_t *wh = (wbz_header_t*)szs->cdata; - if (memcmp(wh->magic,BZ_MAGIC,sizeof(wh->magic))) - return ERROR0(ERR_INVALID_DATA,"Invalid BZ magic!\n"); - - u8 *data; - uint size; - enumError err = DecodeBZIP2( &data, &size, 0, - wh->cdata, szs->csize - sizeof(*wh) ); - if (err) - return err; - - szs->data = data; - szs->size = size; -// [[analyse-magic]] - szs->fform_arch = szs->fform_current = GetByMagicFF(data,size,size); - szs->ff_attrib = GetAttribFF(szs->fform_arch); -// [[version-suffix]] - szs->ff_version = GetVersionFF(szs->fform_arch,szs->data,szs->size,0); - - ClearContainerSZS(szs); - if (rm_compressed) - ClearCompressedSZS(szs); - return ERR_OK; -} - +/////////////// BZ/YBZ/BZIP2 helper /////////////// /////////////////////////////////////////////////////////////////////////////// +// [[c_bzip2_t]] typedef struct c_bzip2_t { enumError err; u8 *cdata; uint csize; + int compr_level; } c_bzip2_t; -static c_bzip2_t get_compressed_bzip2 ( szs_file_t * szs, uint header_size, int compr ) +/////////////////////////////////////////////////////////////////////////////// + +static c_bzip2_t get_compressed_bzip2 +( + szs_file_t *szs, // valid SZS data + uint header_size, // insert 'header_size' bytes before dest data + int compr, // compression level or COMPR_DEFAULT + bool add_dec_size // true: add decompressed size before BZIP2 header +) { c_bzip2_t res = {0}; const int max_compr = szs->size / 100000 + 1; @@ -2169,7 +2137,7 @@ static c_bzip2_t get_compressed_bzip2 ( szs_file_t * szs, uint header_size, int u8 *temp_data; uint temp_size; enumError err = EncodeBZIP2( &temp_data, &temp_size, true, - header_size, header_size>0, szs->data, szs->size, compr ); + header_size, add_dec_size, szs->data, szs->size, compr ); if (err) continue; if ( temp_size < res.csize ) @@ -2194,13 +2162,52 @@ static c_bzip2_t get_compressed_bzip2 ( szs_file_t * szs, uint header_size, int PRINT0(" => USE COMPRESSION %u/%u\n",compr,max_compr); enumError err = EncodeBZIP2( &res.cdata, &res.csize, true, - header_size, header_size>0, szs->data, szs->size, compr ); + header_size, add_dec_size, szs->data, szs->size, compr ); if (err) res.err = err; } + res.compr_level = compr; return res; } +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// BZ support /////////////// +/////////////////////////////////////////////////////////////////////////////// + +enumError DecompressBZ ( szs_file_t * szs, bool rm_compressed ) +{ + PRINT("DecompressBZ(%p,%d)\n",szs,rm_compressed); + DASSERT(szs); + + if ( !szs->csize || !szs->cdata || szs->data ) + return ERR_OK; + + const wbz_header_t *wh = (wbz_header_t*)szs->cdata; + if (memcmp(wh->magic,BZ_MAGIC,sizeof(wh->magic))) + return ERROR0(ERR_INVALID_DATA,"Invalid BZ magic!\n"); + + u8 *data; + uint size; + enumError err = DecodeBZIP2( &data, &size, 0, + wh->cdata, szs->csize - sizeof(*wh) ); + if (err) + return err; + + szs->data = data; + szs->size = size; +// [[analyse-magic]] + szs->fform_arch = szs->fform_current = GetByMagicFF(data,size,size); + szs->ff_attrib = GetAttribFF(szs->fform_arch); +// [[version-suffix]] + szs->ff_version = GetVersionFF(szs->fform_arch,szs->data,szs->size,0); + + ClearContainerSZS(szs); + if (rm_compressed) + ClearCompressedSZS(szs); + return ERR_OK; +} + /////////////////////////////////////////////////////////////////////////////// enumError CompressBZ ( szs_file_t * szs, int compr, bool remove_uncompressed ) @@ -2217,7 +2224,7 @@ enumError CompressBZ ( szs_file_t * szs, int compr, bool remove_uncompressed ) return ERR_OK; } - c_bzip2_t c = get_compressed_bzip2(szs,sizeof(wbz_header_t),compr); + c_bzip2_t c = get_compressed_bzip2(szs,sizeof(wbz_header_t),compr,true); if (c.err) return c.err; szs->cdata = c.cdata; @@ -2237,6 +2244,84 @@ enumError CompressBZ ( szs_file_t * szs, int compr, bool remove_uncompressed ) // /////////////////////////////////////////////////////////////////////////////// +/////////////// YBZ support /////////////// +/////////////////////////////////////////////////////////////////////////////// + +enumError DecompressYBZ ( szs_file_t * szs, bool rm_compressed ) +{ + PRINT("DecompressYBZ(%p,%d)\n",szs,rm_compressed); + DASSERT(szs); + + if ( !szs->csize || !szs->cdata || szs->data ) + return ERR_OK; + + const ybz_header_t *yh = (ybz_header_t*)szs->cdata; + if (memcmp(yh->magic,YBZ_MAGIC,sizeof(yh->magic))) + return ERROR0(ERR_INVALID_DATA,"Invalid YBZ magic!\n"); + + const uint usize = ntohl(yh->uncompressed_size); + u8 *data = MALLOC(usize); + uint size; + enumError err = DecodeBZIP2buf( data, usize, &size, + yh->cdata, szs->csize - sizeof(ybz_header_t) ); + if (err) + { + FREE(data); + return err; + } + + szs->data = data; + szs->size = size; +// [[analyse-magic]] + szs->fform_arch = szs->fform_current = GetByMagicFF(data,size,size); + szs->ff_attrib = GetAttribFF(szs->fform_arch); +// [[version-suffix]] + szs->ff_version = GetVersionFF(szs->fform_arch,szs->data,szs->size,0); + + ClearContainerSZS(szs); + if (rm_compressed) + ClearCompressedSZS(szs); + return ERR_OK; +} + +/////////////////////////////////////////////////////////////////////////////// + +enumError CompressYBZ ( szs_file_t * szs, int compr, bool remove_uncompressed ) +{ + PRINT("CompressYBZ(%p,%d,%d)\n",szs,compr,remove_uncompressed); + DASSERT(szs); + + if ( !szs->size || !szs->data || szs->cdata ) + return ERR_OK; + + if ( compr < 1 || compr == BZIP2_DEFAULT_COMPR ) + { + if (CheckSZSCacheSZS(szs,FF_BZ,".ybz",remove_uncompressed)) + return ERR_OK; + } + + c_bzip2_t c = get_compressed_bzip2(szs,sizeof(ybz_header_t),compr,false); + if (c.err) + return c.err; + szs->cdata = c.cdata; + szs->csize = c.csize; + //HexDump16(stdout,0,0,c.cdata,32); + + ybz_header_t *yh = (ybz_header_t*)c.cdata; + memcpy(yh->magic,YBZ_MAGIC,sizeof(yh->magic)); + memcpy(yh->first_4,szs->data,sizeof(yh->first_4)); + yh->uncompressed_size = htonl(szs->size); + yh->compressed_size = htonl(c.csize-sizeof(ybz_header_t)); + szs->fform_file = FF_YBZ; + + ClearContainerSZS(szs); + if (remove_uncompressed) + ClearUncompressedSZS(szs); + return ERR_OK; +} + +// +/////////////////////////////////////////////////////////////////////////////// /////////////// BZIP2 support /////////////// /////////////////////////////////////////////////////////////////////////////// @@ -2282,7 +2367,7 @@ enumError CompressBZIP2 ( szs_file_t * szs, int compr, bool remove_uncompressed return ERR_OK; } - c_bzip2_t c = get_compressed_bzip2(szs,0,compr); + c_bzip2_t c = get_compressed_bzip2(szs,0,compr,false); if (c.err) return c.err; szs->cdata = c.cdata; @@ -2309,13 +2394,13 @@ enumError DecompressLZ ( szs_file_t * szs, bool rm_compressed ) if ( !szs->csize || !szs->cdata || szs->data ) return ERR_OK; - const wlz_header_t *wh = (wbz_header_t*)szs->cdata; + const wlz_header_t *wh = (wlz_header_t*)szs->cdata; if (memcmp(wh->magic,LZ_MAGIC,sizeof(wh->magic))) return ERROR0(ERR_INVALID_DATA,"Invalid LZ magic!\n"); u8 *data; uint size; - const uint delta = sizeof(wbz_header_t) + sizeof(u32); + const uint delta = sizeof(wlz_header_t) + sizeof(u32); enumError err = DecodeLZMAbin( &data, &size, 0, szs->cdata + delta, szs->csize - delta ); if (err) @@ -2381,6 +2466,92 @@ enumError CompressLZ ( szs_file_t * szs, int compr, bool remove_uncompressed ) // /////////////////////////////////////////////////////////////////////////////// +/////////////// YLZ support /////////////// +/////////////////////////////////////////////////////////////////////////////// +// [[xcompr+]] + +enumError DecompressYLZ ( szs_file_t * szs, bool rm_compressed ) +{ + PRINT("DecompressYLZ(%p,%d)\n",szs,rm_compressed); + DASSERT(szs); + + if ( !szs->csize || !szs->cdata || szs->data ) + return ERR_OK; + + const ylz_header_t *yh = (ylz_header_t*)szs->cdata; + if (memcmp(yh->magic,YLZ_MAGIC,sizeof(yh->magic))) + return ERROR0(ERR_INVALID_DATA,"Invalid YLZ magic!\n"); + + u8 *data; + uint size; + const uint delta = sizeof(ylz_header_t); + enumError err = DecodeLZMAbin( &data, &size, 0, + szs->cdata + delta, szs->csize - delta ); + if (err) + return err; + + szs->data = data; + szs->size = size; +// [[analyse-magic]] + szs->fform_arch = szs->fform_current = GetByMagicFF(data,size,size); + szs->ff_attrib = GetAttribFF(szs->fform_arch); +// [[version-suffix]] + szs->ff_version = GetVersionFF(szs->fform_arch,szs->data,szs->size,0); + + ClearContainerSZS(szs); + if (rm_compressed) + ClearCompressedSZS(szs); + return ERR_OK; +} + +/////////////////////////////////////////////////////////////////////////////// + +enumError CompressYLZ ( szs_file_t * szs, int compr, bool remove_uncompressed ) +{ + PRINT0("CompressYLZ(%p,%d)\n",szs,remove_uncompressed); + DASSERT(szs); + + if ( !szs->size || !szs->data || szs->cdata ) + return ERR_OK; + + if ( compr == COMPR_DEFAULT ) + compr = LZMA_DEFAULT_COMPR; + else if (!compr) + compr = opt_compr_mode > 0 ? opt_compr : LZMA_DEFAULT_COMPR; + compr = CalcCompressionLevelLZMA(compr); + PRINT0(" => USE YLZ COMPRESSION %u\n",compr); + + if ( compr == LZMA_DEFAULT_COMPR + && CheckSZSCacheSZS(szs,FF_YLZ,".ylz",remove_uncompressed)) + { + return ERR_OK; + } + + u8 *cdata; + uint csize; + enumError err = EncodeLZMA( &cdata, &csize, true, + sizeof(ylz_header_t), false, szs->data, szs->size, compr ); + if (err) + return err; + szs->cdata = cdata; + szs->csize = csize; + + ylz_header_t *yh = (ylz_header_t*)cdata; + memcpy(yh->magic,YLZ_MAGIC,sizeof(yh->magic)); + memcpy(yh->first_4,szs->data,sizeof(yh->first_4)); + yh->uncompressed_size = htonl(szs->size); + yh->compressed_size = htonl(csize-sizeof(ylz_header_t)); + szs->fform_file = FF_YLZ; + //HexDump16(stdout,0,0,cdata,32); + + ClearContainerSZS(szs); + if (remove_uncompressed) + ClearUncompressedSZS(szs); + return ERR_OK; +} + +// +/////////////////////////////////////////////////////////////////////////////// /////////////// LZMA support /////////////// /////////////////////////////////////////////////////////////////////////////// diff --git a/project/src/lib-szs.h b/project/src/lib-szs.h index 976966e..d8d4a49 100644 --- a/project/src/lib-szs.h +++ b/project/src/lib-szs.h @@ -634,7 +634,6 @@ static inline void LinkCacheSZS //----------------------------------------------------------------------------- -bool IsCompressFF ( file_format_t ff ); file_format_t GetNewCompressionSZS ( szs_file_t * szs ); #define COMPR_DEFAULT -99 @@ -1519,7 +1518,7 @@ enumError LoadRawData /////////////////////////////////////////////////////////////////////////////// /////////////// BZ/BZIP2 support /////////////// /////////////////////////////////////////////////////////////////////////////// -// [[wbz_header_t]] +// [[wbz_header_t]] [[wlz_header_t]] #define BZ_MAGIC "WBZa" #define BZ_MAGIC_NUM 0x57425a61 @@ -1533,31 +1532,53 @@ typedef struct wbz_header_t } __attribute__ ((packed)) wbz_header_t; +typedef wbz_header_t wlz_header_t; + +//----------------------------------------------------------------------------- +// [[ybz_header_t]] [[ylz_header_t]] + +#define YBZ_MAGIC YAZ0_MAGIC +#define YLZ_MAGIC YAZ0_MAGIC + +typedef struct ybz_header_t +{ + char magic[4]; // = YBZ_MAGIC + u32 uncompressed_size; // size of uncompressed data + u32 compressed_size; // size of compressed data + char first_4[4]; // copy of first 4 bytes of uncompressed + // data for fast magic detection. + u8 cdata[]; // compressed data +} +__attribute__ ((packed)) ybz_header_t; + +typedef ybz_header_t ylz_header_t; + //----------------------------------------------------------------------------- enumError DecompressBZ ( szs_file_t * szs, bool rm_compressed ); +enumError DecompressYBZ ( szs_file_t * szs, bool rm_compressed ); enumError DecompressBZIP2 ( szs_file_t * szs, bool rm_compressed ); enumError CompressBZ ( szs_file_t * szs, int compr, bool remove_uncompressed ); +enumError CompressYBZ ( szs_file_t * szs, int compr, bool remove_uncompressed ); enumError CompressBZIP2 ( szs_file_t * szs, int compr, bool remove_uncompressed ); // /////////////////////////////////////////////////////////////////////////////// /////////////// LZ/LZMA support /////////////// /////////////////////////////////////////////////////////////////////////////// -// [[lbz_header_t]] #define LZ_MAGIC "WLZa" #define LZ_MAGIC_NUM 0x574c5a61 -typedef wbz_header_t wlz_header_t; - //----------------------------------------------------------------------------- enumError DecompressLZ ( szs_file_t * szs, bool rm_compressed ); +enumError DecompressYLZ ( szs_file_t * szs, bool rm_compressed ); enumError DecompressLZMA ( szs_file_t * szs, bool rm_compressed ); enumError CompressLZ ( szs_file_t * szs, int compr, bool remove_uncompressed ); +enumError CompressYLZ ( szs_file_t * szs, int compr, bool remove_uncompressed ); enumError CompressLZMA ( szs_file_t * szs, int compr, bool remove_uncompressed ); // diff --git a/project/src/prefix.inc b/project/src/prefix.inc index 9df9f1e..5e8d8d0 100644 --- a/project/src/prefix.inc +++ b/project/src/prefix.inc @@ -1,117 +1,126 @@ static const u8 prefix_inc_lzma[] = { - // decompressed size: 0xfa2 = 4002 bytes - 0x00,0x00,0x0f,0xa2, + // decompressed size: 0x1108 = 4360 bytes + 0x00,0x00,0x11,0x08, // LZMA.6 compressed data 0x5d,0x00,0x00,0x80, 0x00,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0x00,0x20,0x15, 0x06,0x01,0x7b,0xa2, 0xa1,0xd0,0xb6,0xe6, 0x42,0x19,0xec,0xf7, 0x37,0x70,0x15,0x8e, 0x25,0x3c,0x80,0xfc, 0x38,0xd8,0x99,0x2a, 0xaa,0xdf,0xc9,0x44, 0x9a,0x44,0x8b,0x29, - 0x12,0x98,0x47,0xc4, 0x6f,0x2e,0xa6,0xc1, 0x27,0xd7,0xb9,0x7e, 0x61,0xcb,0x38,0x25, - 0x63,0x88,0x5c,0xd2, 0xf3,0xa8,0x8c,0x8e, 0x2e,0x13,0x3d,0xfb, 0x4d,0x42,0xc9,0x0d, - 0xd5,0xbb,0xca,0x1e, 0x11,0xc8,0x3d,0x76, 0x89,0x9c,0x7b,0x06, 0x31,0xba,0x17,0xcc, - 0x8c,0x29,0x05,0xde, 0x3a,0x2b,0xe6,0x83, 0x90,0xc2,0x83,0xeb, 0x28,0xc3,0x27,0x72, - 0xcc,0x05,0xcc,0x73, 0x86,0xbe,0x94,0x86, 0x50,0x1f,0x05,0x4d, 0xbd,0x87,0xff,0x29, - 0xc9,0xe3,0x76,0x70, 0x49,0x52,0xbb,0x91, 0x66,0x64,0x29,0xeb, 0x22,0x37,0x33,0x86, - 0x5b,0x0f,0x6f,0xd3, 0x10,0x51,0xc1,0x56, 0x0d,0x64,0x9a,0xc3, 0x5b,0x29,0x63,0xc3, - 0xd9,0xc6,0x5c,0x00, 0xf4,0x1f,0x62,0x00, 0x8b,0x5a,0xc9,0x86, 0xc5,0x0d,0xee,0xec, - 0x58,0x2b,0x10,0xaf, 0xb1,0x48,0xd9,0x64, 0xd2,0xc4,0xd2,0x0d, 0xf3,0x22,0xa0,0x2e, - 0x3d,0x70,0xee,0xc6, 0x58,0x56,0xa6,0x69, 0x3b,0x2d,0x01,0xda, 0x64,0x52,0xe9,0x56, - 0x21,0x98,0xcf,0x49, 0xcc,0xf3,0xf7,0x87, 0xd4,0x80,0xbf,0x78, 0x0b,0x2a,0x58,0x46, - 0x3c,0x32,0xd7,0x04, 0x60,0x62,0x24,0x10, 0x1a,0x7c,0x8d,0x18, 0x62,0x2e,0xc0,0x60, - 0xe8,0x1b,0x0a,0x64, 0xd6,0x40,0x10,0x48, 0x87,0x92,0x01,0x90, 0xc5,0xef,0xf1,0x94, - 0x47,0x34,0x20,0x14, 0x02,0x66,0x77,0xd7, 0x10,0x7a,0x18,0x64, 0x67,0x55,0x0b,0xaf, - 0xdb,0x03,0xa4,0xec, 0x6c,0xd0,0x06,0x15, 0x30,0x17,0x33,0x24, 0xcc,0x2b,0x76,0x0b, - 0x3b,0x8e,0x6d,0x7d, 0x36,0x91,0xe4,0x03, 0xa5,0x71,0x21,0xf9, 0x65,0xb4,0xbb,0x8a, - 0xb9,0x7b,0xe3,0x31, 0x71,0x00,0x20,0xc3, 0x0a,0x8a,0xf1,0xe5, 0x97,0x13,0x93,0x5c, - 0x83,0xa7,0x2e,0x3c, 0xff,0x38,0xe0,0xbc, 0x95,0x6e,0x33,0xf5, 0xcf,0xc5,0xa4,0xc9, - 0x7a,0x83,0x09,0xd6, 0xf7,0xef,0x31,0x7a, 0xc7,0x58,0xa3,0x52, 0x41,0xdf,0x7f,0xf0, - 0xef,0xd1,0xb9,0xe1, 0x41,0x85,0xbb,0xc0, 0xd1,0xa3,0x85,0x65, 0xcd,0x9f,0x96,0x46, - 0x2d,0x63,0xa5,0xe4, 0x50,0x62,0x36,0x55, 0x9b,0xdb,0xb0,0x0b, 0x68,0xc5,0x36,0x85, - 0x5e,0x18,0x25,0x90, 0x56,0xc5,0xd6,0x5d, 0xf7,0x05,0xde,0x9d, 0x51,0x59,0x70,0x61, - 0xf7,0x18,0xc4,0xeb, 0xa3,0x98,0xc6,0x49, 0x48,0x80,0x33,0x93, 0x2a,0x98,0x26,0x23, - 0x42,0xf5,0xfd,0x66, 0xd4,0x24,0xc1,0x87, 0xf8,0xd0,0xea,0x1c, 0xb5,0x4b,0x8a,0x8f, - 0xcb,0xda,0xa3,0xfa, 0x1f,0x50,0x98,0xa8, 0x73,0x5c,0xb5,0x25, 0x16,0x99,0xf8,0x48, - 0xb4,0x5c,0x59,0x43, 0xff,0x4b,0x3e,0x03, 0xe2,0x30,0x0c,0xca, 0xf6,0x1c,0xed,0x3b, - 0x44,0x59,0x01,0xf1, 0x19,0xc2,0xe1,0xfd, 0x68,0x4a,0x6f,0x2d, 0xb8,0x68,0x6c,0x58, - 0x31,0xfd,0x56,0x7e, 0x2b,0xad,0x16,0x1e, 0xaf,0x02,0x2c,0xeb, 0xfb,0x73,0x0a,0x0d, - 0x81,0x3f,0xe5,0x7a, 0xed,0x74,0x62,0x7b, 0x03,0x59,0x6a,0x89, 0x04,0x32,0x6b,0xc9, - 0x6c,0x96,0xfe,0xbc, 0x8f,0x04,0xaa,0x29, 0x67,0x20,0xbb,0x50, 0xab,0x80,0x8c,0x10, - 0x80,0x63,0x76,0x2f, 0x30,0x6a,0xce,0x48, 0xd2,0x81,0xd9,0x2f, 0xa1,0x27,0x07,0xb0, - 0xf8,0x83,0x4a,0x8d, 0x90,0x24,0xe2,0xa5, 0x0d,0xf4,0xe7,0x19, 0x8b,0x93,0xdb,0x11, - 0x2a,0x03,0xba,0x8a, 0xa0,0x92,0x62,0x9d, 0x40,0xac,0x61,0x08, 0x63,0x2d,0x9f,0xb6, - 0xce,0x68,0xb0,0xa9, 0x11,0x64,0x9f,0x97, 0x71,0xd4,0xe2,0x26, 0x16,0x67,0xe7,0xb4, - 0xd0,0x1d,0x5a,0xc3, 0x5f,0x3e,0x25,0x3f, 0xa0,0x0c,0x9c,0xb1, 0x65,0x3e,0x08,0xc6, - 0x66,0xb1,0x5a,0x5f, 0x08,0x23,0x1c,0xb3, 0x42,0xb8,0xe7,0x71, 0x86,0xd0,0xd7,0x60, - 0x4e,0x48,0x9a,0x6b, 0x41,0x74,0xa3,0xae, 0x71,0x9b,0x13,0x13, 0x1a,0xa2,0x8e,0x2c, - 0xe3,0x38,0x51,0x95, 0x20,0xb6,0x1d,0x31, 0x5c,0xd6,0xd7,0xe2, 0xd7,0x5a,0xfd,0xfb, - 0xa9,0x4e,0xfa,0xf3, 0x75,0x32,0x6e,0x55, 0xf2,0x52,0xbb,0x27, 0xad,0x2c,0x56,0x3a, - 0x6f,0x4b,0x1f,0x20, 0xa0,0xaa,0x85,0x4b, 0x1a,0x69,0x1d,0x04, 0x67,0x28,0xa1,0xa9, - 0xe7,0x8e,0x48,0xb7, 0x51,0x66,0xdb,0x46, 0x32,0xfb,0x6e,0x9d, 0x19,0x6b,0x7f,0x20, - 0xf4,0xcf,0x7e,0xf1, 0xa6,0x3f,0xc5,0x44, 0x92,0x87,0x8b,0xd4, 0x3d,0xfe,0xfc,0xbb, - 0xe7,0x70,0x99,0xac, 0x2c,0x5d,0x0e,0xa7, 0x10,0x76,0xed,0x08, 0x5c,0x50,0x0c,0xb3, - 0xe6,0xcf,0x7c,0x73, 0x62,0x22,0xce,0xe9, 0x94,0x8d,0x12,0xb1, 0xb3,0x2d,0x43,0xee, - 0xc4,0xfc,0xd0,0xb1, 0xca,0x3b,0x5a,0xae, 0x7d,0x93,0x19,0x36, 0x0e,0x5f,0x01,0xb6, - 0x9c,0x54,0x16,0x2e, 0x2d,0x37,0xba,0x86, 0x79,0xea,0x16,0x77, 0x1e,0x56,0xee,0x57, - 0x11,0x5d,0x6e,0xfb, 0x95,0xa6,0xc7,0x75, 0x70,0x37,0x02,0x96, 0x9d,0x5e,0x0a,0xec, - 0xd4,0xd3,0x72,0xa9, 0xd4,0x3d,0x05,0xe9, 0x81,0x4d,0x3d,0x5d, 0x8e,0x05,0xf8,0x17, - 0x58,0xed,0xe7,0xd4, 0x9b,0xc0,0xa1,0x2e, 0x7b,0x3d,0x79,0x5f, 0xa5,0xf8,0x22,0x17, - 0x53,0xa5,0x47,0x03, 0x31,0xe4,0x52,0x83, 0x69,0xd1,0x12,0x4b, 0x6b,0x32,0xf5,0xc6, - 0x49,0xa0,0xca,0xad, 0xed,0x74,0x52,0xbc, 0x15,0xf4,0x90,0x5d, 0xa0,0x8a,0xd9,0xfd, - 0x6d,0xb3,0xc7,0xe0, 0x14,0x5b,0xcc,0x3d, 0xf4,0x92,0x62,0x21, 0xaa,0xf2,0xee,0x10, - 0x60,0x5c,0x58,0xdf, 0x85,0xd0,0x22,0x76, 0x98,0x0f,0xf1,0xcb, 0x17,0x63,0xc6,0xd8, - 0xa8,0x19,0x67,0xf4, 0x92,0x69,0xfa,0x84, 0x64,0xc8,0x5d,0xa1, 0xb0,0x39,0x08,0xce, - 0xa6,0x89,0x40,0x6b, 0x93,0x7a,0x9c,0x8c, 0x73,0x89,0x28,0x5e, 0xe0,0x83,0x45,0xc2, - 0xe2,0x3a,0x61,0x62, 0xea,0x71,0x36,0x7e, 0xbf,0xe6,0xc7,0x7f, 0xee,0x55,0xc7,0x5b, - 0xd0,0xfd,0x9e,0x09, 0x07,0xb3,0xe5,0x4f, 0x2d,0x21,0x66,0x2a, 0x9e,0x9d,0x53,0xd3, - 0x5c,0xad,0x97,0x8d, 0x9e,0xfb,0xec,0xe7, 0x71,0x6d,0x8c,0x78, 0x5d,0x2d,0x32,0xe4, - 0x94,0x14,0x4d,0xad, 0xbe,0x8d,0x84,0x8a, 0x81,0xc4,0xd4,0x27, 0xa0,0xab,0x68,0xfd, - 0x9d,0x1c,0xfe,0x80, 0x63,0xda,0x9d,0xc0, 0x6f,0x74,0x77,0x6c, 0xa6,0x34,0xdb,0xf0, - 0x96,0x26,0xf6,0x9f, 0xca,0xfb,0xa3,0xfc, 0x80,0x3d,0x9c,0xe4, 0x2e,0x27,0x73,0x52, - 0x5f,0xba,0xff,0xeb, 0xf8,0x4e,0x40,0xd4, 0xc4,0xe1,0x06,0x47, 0x2c,0x67,0x94,0x87, - 0x5e,0x75,0x0e,0x9c, 0x6c,0x7a,0x49,0x6e, 0x9d,0xe7,0x63,0x3d, 0x81,0xcb,0xf0,0xff, - 0x84,0x5f,0x8a,0xab, 0x70,0x07,0x1b,0x71, 0xed,0xdb,0xbb,0x39, 0x3c,0xfe,0x7b,0x15, - 0x11,0xae,0xc3,0x6e, 0x1e,0x92,0x32,0xa7, 0x4c,0xfa,0x94,0xd1, 0x1b,0x45,0xa4,0x05, - 0x83,0xd3,0xaa,0xd3, 0xa8,0xb8,0x3b,0xf2, 0xcc,0xc6,0x12,0x41, 0xd8,0xc9,0x80,0x6f, - 0x19,0x78,0x33,0xcc, 0xd8,0xc9,0x4a,0x05, 0x6a,0x7f,0x72,0x07, 0x80,0x2c,0x00,0x72, - 0x90,0x44,0xab,0xcb, 0x19,0xdf,0x50,0x92, 0x9b,0xfc,0x29,0x81, 0x46,0x8f,0xaf,0xcc, - 0xda,0xd9,0xb7,0x6f, 0x62,0x9f,0xa2,0x07, 0x23,0x08,0x20,0xd8, 0x14,0xa6,0xc8,0x49, - 0xc0,0x05,0x0c,0x42, 0x60,0xe7,0x2c,0x6b, 0x7f,0x25,0x81,0xe6, 0x6c,0x5e,0xe3,0x34, - 0x8c,0xd2,0x6c,0xa2, 0x03,0x14,0x3e,0x64, 0xfc,0x20,0x5a,0xd6, 0x24,0xc5,0xca,0x45, - 0x2f,0x1f,0x65,0x25, 0x25,0xfd,0x32,0x9e, 0x16,0x2e,0xe1,0x4a, 0xb9,0xc9,0xa5,0x9c, - 0x76,0x49,0xfb,0xfe, 0x05,0x83,0x37,0x98, 0xb3,0x80,0x7e,0x1c, 0xb2,0xcd,0xbd,0xda, - 0xa6,0xce,0xe6,0x25, 0x5f,0x31,0x66,0x09, 0x21,0xba,0xda,0x69, 0xf4,0x4b,0x47,0x1e, - 0x65,0xd2,0x4c,0x33, 0x7e,0xf0,0x02,0x7d, 0xdf,0x81,0x58,0xd6, 0x63,0x6e,0x32,0x68, - 0x42,0x5a,0xa3,0x1f, 0x67,0x20,0x12,0x1d, 0xd5,0x02,0x86,0xa2, 0xc1,0x91,0x80,0xc6, - 0xef,0x65,0x60,0x8e, 0x7f,0x09,0xa1,0x3b, 0xf1,0xf6,0x21,0xd5, 0x9e,0x33,0x9c,0xca, - 0x90,0xe0,0x43,0x70, 0x68,0x5f,0x24,0x48, 0xbc,0x2d,0xd6,0x0d, 0x67,0x98,0xdb,0xe0, - 0xe4,0x15,0xdd,0x3e, 0xb3,0xf1,0x63,0x0e, 0xf5,0xf9,0xa6,0x27, 0xae,0x3f,0x43,0xfe, - 0x03,0x79,0x08,0xdd, 0xfc,0x0f,0xae,0xb6, 0x72,0x73,0xc7,0x1f, 0x43,0x42,0x7d,0x08, - 0x14,0x41,0xd5,0x89, 0x2a,0x56,0xf0,0xb9, 0xe4,0xb5,0x64,0xe1, 0x9e,0x95,0xff,0x84, - 0x8f,0xa9,0xce,0xb3, 0x17,0x40,0xa4,0xf0, 0xb1,0x48,0x90,0x49, 0xda,0xc0,0x81,0xf5, - 0x4b,0xfc,0xf6,0x56, 0xc1,0x7c,0x5c,0x9a, 0x25,0x47,0xb1,0x08, 0x6c,0xd3,0xe4,0xc1, - 0xbb,0x8d,0x2a,0xa8, 0x84,0xd4,0x0f,0x1c, 0x78,0x6d,0x0d,0x01, 0x05,0xa3,0x7d,0x67, - 0x5c,0x24,0x36,0x8b, 0x51,0x1a,0x04,0xbf, 0x14,0xe0,0xb3,0x7e, 0x5e,0xfe,0xfb,0x65, - 0x3b,0x89,0x70,0x60, 0x52,0x9b,0x7e,0xe6, 0x55,0xda,0x90,0x2a, 0x2c,0x50,0xdc,0xaf, - 0xd0,0x27,0xc0,0x5b, 0xb7,0x2b,0x62,0x49, 0xb5,0x70,0x84,0xe5, 0x7b,0xb9,0x6d,0x50, - 0x63,0x9d,0xde,0xe0, 0x3e,0x40,0x9a,0x7d, 0x7a,0x27,0x08,0x88, 0xa9,0x19,0xab,0xbb, - 0x5c,0xb1,0x5c,0x6e, 0x11,0xa0,0x08,0x27, 0x5e,0xab,0x3b,0x2d, 0x98,0x1d,0x33,0x24, - 0xa9,0xfc,0xd2,0x56, 0xf5,0x0a,0x31,0x5d, 0x01,0x62,0xfe,0x0d, 0x55,0xec,0x9b,0x71, - 0x87,0xcf,0xa6,0xfb, 0x51,0x95,0xa0,0x59, 0xd9,0xa2,0xbf,0xd6, 0x95,0xd5,0x3b,0xb1, - 0x04,0x34,0xd3,0x7a, 0x69,0x6d,0x0a,0xef, 0xe1,0x32,0xa7,0x72, 0xc7,0x6f,0xc3,0x0b, - 0xb6,0x9d,0x1e,0x1d, 0x5d,0x5e,0x98,0x37, 0x98,0x93,0xec,0xa6, 0xeb,0xeb,0xfb,0xe6, - 0xb2,0x24,0x92,0xb6, 0xd5,0xd2,0x1a,0x97, 0x82,0x55,0xaa,0x4d, 0xd9,0xff,0xcc,0xfe, - 0xe7,0x37,0xb6,0xe3, 0x68,0x38,0xaf,0xe0, 0x3d,0x6d,0xca,0x16, 0x2c,0x39,0xd0,0xe2, - 0x90,0x08,0xa2,0x54, 0x6f,0x9a,0x8b,0x9d, 0x71,0x71,0x1e,0x1f, 0x9e,0x1e,0x08,0xc7, - 0x0b,0x06,0x2b,0x00, 0xd6,0x33,0x6c,0x3a, 0x0d,0x3e,0x89,0x9d, 0xad,0x10,0xdf,0x72, - 0xb4,0x9f,0x5c,0xf0, 0xa2,0xf8,0xad,0x1c, 0xc8,0x95,0xf7,0x17, 0x14,0x64,0xe8,0x73, - 0xf3,0x8b,0xa1,0x7b, 0x33,0x04,0x85,0xa7, 0x90,0xe0,0xf1,0x8b, 0x72,0xb9,0x1a,0x29, - 0x2e,0x1c,0x4c,0x38, 0x8f,0xb9,0x8b,0x21, 0x33,0x5e,0x85,0x9e, 0x2e,0xb6,0xcf,0x5c, - 0x7c,0xfe,0x28,0x68, 0x54,0x7e,0xa1,0x4f, 0x6a,0x97,0x49,0xcc, 0x21,0x4d,0x9b,0xb6, - 0x50,0x98,0x25,0x8f, 0x3c,0x64,0xad,0xeb, 0xad,0x52,0x0c,0xc4, 0xdf,0xff,0xb3,0xad, - 0x16,0x24, - // 0x692 = 1682 data bytes (42%) + 0x12,0x98,0x47,0xc4, 0x6f,0x2e,0xa6,0xc1, 0x27,0xd7,0xb5,0x08, 0x35,0x76,0xf8,0xfb, + 0xfc,0xa3,0x5c,0x36, 0x8d,0xde,0xa4,0xa7, 0x30,0xd0,0x73,0x77, 0xc9,0x74,0x74,0x89, + 0xe7,0x00,0x01,0x1f, 0xb7,0x49,0x7c,0x4c, 0x1d,0x88,0x68,0xf9, 0x6b,0x9b,0x02,0x9d, + 0xa4,0x3b,0x33,0x72, 0x04,0xae,0x3c,0xe0, 0x44,0x0c,0x9c,0x4e, 0x83,0xfe,0x1b,0x8e, + 0x21,0x13,0xef,0x59, 0x72,0x74,0xff,0xa1, 0x97,0x59,0x21,0x23, 0xce,0xe9,0x1a,0xa7, + 0x0e,0x0f,0x33,0xf4, 0x92,0xab,0x84,0x0f, 0x10,0x27,0x32,0x46, 0xa6,0xba,0x8f,0xc4, + 0xfe,0xc5,0x95,0x15, 0xdb,0x7a,0xeb,0x67, 0x08,0x6a,0x89,0x49, 0xc3,0x4a,0x3f,0x9e, + 0xe3,0x3b,0x65,0x7b, 0x8b,0x27,0x58,0xae, 0xfe,0x40,0x4b,0x91, 0xcd,0x5f,0xc4,0xa7, + 0x1f,0x83,0x90,0x14, 0xb2,0x42,0x47,0xb2, 0x49,0x3f,0x6e,0x9f, 0x82,0xec,0x42,0x67, + 0x12,0x15,0x53,0x1d, 0x6a,0xc4,0x7a,0x00, 0xfc,0x5b,0x03,0x1c, 0x5b,0xc4,0x8a,0x67, + 0x5f,0x56,0x75,0x86, 0xe4,0x47,0x0e,0x47, 0x60,0x03,0x45,0x5b, 0x16,0xfc,0x8b,0x6f, + 0x46,0xee,0xf5,0x64, 0x08,0xbf,0x7c,0xa3, 0x32,0x63,0x5f,0xef, 0xc8,0x5b,0xec,0x58, + 0x8f,0x88,0xd1,0x88, 0x22,0xe0,0x8b,0x96, 0xca,0x1e,0x08,0x99, 0xd8,0x45,0x55,0x4f, + 0x46,0x4b,0xaa,0x41, 0xc9,0xc1,0x7b,0x90, 0x8a,0xae,0xa7,0xb6, 0x7f,0x99,0xd5,0xf9, + 0x84,0x80,0x1c,0x12, 0x83,0x39,0xa5,0x4d, 0x27,0xee,0xf8,0xa8, 0x18,0xab,0xe3,0xb6, + 0xae,0x3f,0x9d,0xf7, 0x88,0xfa,0x84,0xc3, 0x56,0xfe,0x6e,0xf6, 0x44,0x2b,0xa3,0x8c, + 0xa3,0xad,0x29,0xdc, 0xc0,0x13,0xc1,0x65, 0xc7,0x70,0x51,0x50, 0xe4,0xb4,0x08,0xf3, + 0xe7,0xdf,0xcb,0x0d, 0x0c,0x01,0x4f,0x9d, 0xb0,0x15,0xe9,0x6d, 0xd4,0x48,0x25,0x79, + 0x4a,0xa1,0x9e,0x72, 0x51,0x7a,0x02,0x08, 0x58,0x21,0x0e,0xe8, 0x40,0x2f,0x75,0x65, + 0x33,0x16,0x30,0x6f, 0x41,0x9c,0xd1,0x2f, 0xf4,0xf7,0xa3,0x8e, 0x01,0xb5,0xed,0x76, + 0x4d,0xcd,0xaa,0xc7, 0x2e,0xbb,0x01,0xbf, 0xa3,0xf0,0xe9,0xb3, 0x85,0x85,0xf7,0xb5, + 0x75,0xb5,0x18,0xf8, 0xdd,0x24,0x0e,0xda, 0x7e,0xb6,0x32,0xfb, 0x88,0xdb,0x97,0x28, + 0x50,0xe2,0x86,0xc5, 0xd5,0xc4,0x25,0xc3, 0x50,0x16,0x10,0x62, 0xe3,0x1e,0x22,0x2f, + 0xd2,0xe0,0x7f,0x52, 0xc8,0xfe,0xc2,0xd6, 0x38,0x31,0xdb,0x1c, 0x19,0x6d,0x7f,0xd3, + 0x6d,0x43,0x15,0xb3, 0xb6,0x52,0xc0,0x38, 0x48,0x74,0x68,0x13, 0x17,0x8c,0x74,0x0c, + 0x11,0x45,0x18,0xef, 0x81,0xa4,0x8e,0x1b, 0xdd,0x39,0x20,0xeb, 0x3f,0xf7,0xb6,0x4c, + 0x9c,0x6a,0xb4,0x6e, 0x42,0x6b,0x8c,0x12, 0xb1,0xf0,0x15,0x76, 0x1d,0xd9,0xd9,0x43, + 0xe3,0x63,0x09,0x6b, 0x43,0x72,0x59,0xf0, 0xe2,0xa0,0xd6,0x69, 0xaf,0x73,0x47,0x38, + 0x8e,0xc6,0x11,0xd6, 0xe0,0x5e,0x36,0x60, 0x40,0x4d,0xbe,0xfe, 0xd7,0xb6,0xa1,0xb1, + 0xae,0x57,0x09,0x7e, 0xbc,0xdf,0xb3,0x7f, 0xf9,0x4c,0x33,0xeb, 0xbb,0xfb,0x59,0xed, + 0xc6,0x9b,0x23,0x65, 0x1a,0x87,0x5a,0xdd, 0xf6,0xd5,0xdf,0xbb, 0xc3,0x9d,0xad,0x6d, + 0xe8,0x3c,0xaf,0xc6, 0x60,0x7e,0x11,0x3c, 0xa3,0xa8,0x4a,0xc5, 0x2c,0xfe,0x7d,0x84, + 0x57,0xba,0x26,0xd4, 0xc1,0x3a,0xab,0x2e, 0x72,0x05,0xe3,0x60, 0x2c,0x4c,0x6a,0xfe, + 0xe5,0x45,0x13,0x77, 0x53,0x8e,0xc4,0x3e, 0x44,0xd5,0xc4,0x29, 0x5d,0x9d,0x7e,0xf6, + 0x2d,0xdc,0x9f,0x66, 0x54,0x3c,0x5d,0x17, 0x3e,0x61,0x8f,0xb4, 0x0c,0xaa,0xb6,0x52, + 0xf7,0xb8,0x90,0xf0, 0xed,0x80,0x47,0x67, 0xc1,0x74,0xe7,0x04, 0x84,0x71,0xba,0xb9, + 0x40,0xd8,0x10,0xe3, 0xcd,0xf1,0x47,0x38, 0x65,0x93,0x25,0xcd, 0x5a,0x60,0xe2,0xcc, + 0x44,0x97,0xbd,0x81, 0x07,0x7e,0x59,0x36, 0x3a,0x57,0xc2,0x49, 0x9f,0x75,0x06,0x56, + 0x5f,0xc2,0x8c,0xfd, 0xb9,0x9c,0x39,0xf6, 0xcb,0xc5,0xeb,0xd6, 0x75,0xc1,0xa3,0xc7, + 0x2e,0xde,0x8a,0x53, 0x78,0x72,0xe9,0xd5, 0xd6,0x0b,0xaa,0xee, 0xd4,0x6d,0x5a,0xfd, + 0x30,0x11,0xfd,0x10, 0x32,0xea,0xa8,0x0f, 0x30,0x8c,0xa0,0x88, 0x18,0x96,0x32,0xe0, + 0x87,0xb3,0x54,0xd6, 0x76,0x13,0xd7,0x86, 0xd1,0xb4,0x15,0x28, 0xc1,0x9c,0x7f,0x13, + 0xbf,0x8f,0x9e,0xe1, 0xd4,0xc0,0x52,0x78, 0x2b,0x8c,0xc3,0x34, 0xa9,0x32,0x06,0xe9, + 0x4d,0xa9,0xb6,0x16, 0xbc,0x0a,0xea,0xf5, 0x44,0xdd,0x71,0xce, 0x78,0xd1,0xe6,0xef, + 0x94,0x90,0xfa,0x1f, 0x5e,0x08,0x76,0xd1, 0x0d,0xb4,0xbc,0x4c, 0x5d,0x29,0xf9,0xb8, + 0x81,0xf3,0x20,0xc8, 0xa7,0x4f,0x3e,0x20, 0x55,0xd6,0xe2,0x09, 0x87,0xe6,0x06,0x01, + 0x19,0xfa,0x5c,0xfa, 0x34,0x0e,0x81,0x95, 0x5e,0xe7,0xff,0xd6, 0x7a,0x10,0x31,0x4b, + 0xfd,0xb1,0x4c,0xf9, 0xc4,0xf1,0x48,0x01, 0x81,0xbe,0xbc,0xa7, 0x6e,0xc7,0x99,0x9b, + 0x29,0x92,0x9e,0x15, 0x12,0xe3,0x99,0x42, 0x4f,0x9d,0xdc,0xd1, 0x87,0x63,0xd5,0x59, + 0x08,0x29,0x2f,0xfe, 0x37,0x5a,0x73,0xf0, 0x95,0x7b,0xbf,0xde, 0xfb,0x46,0x75,0x6e, + 0x12,0x61,0x75,0xb5, 0x54,0x11,0x71,0xe3, 0x56,0x87,0x2f,0x0d, 0xdf,0x8e,0x41,0x6f, + 0x7d,0x4c,0xb4,0x68, 0x71,0x27,0xbb,0xf7, 0x78,0xbc,0xa7,0x9f, 0x2a,0xbd,0x1b,0x0a, + 0x0d,0xce,0xf2,0x86, 0x29,0xd1,0x36,0xe3, 0x15,0xb9,0x4b,0x13, 0x4b,0x35,0x53,0xf3, + 0xd0,0xd3,0xa3,0x1f, 0x30,0x0d,0xf7,0xd2, 0xd0,0x65,0xa2,0x51, 0xca,0xbc,0xf1,0xad, + 0x05,0xbf,0x5a,0x82, 0x60,0xc2,0xbc,0x0a, 0x12,0x08,0x28,0xce, 0x10,0x23,0x36,0xd1, + 0x1e,0x91,0xac,0x9b, 0xcd,0x96,0xc1,0xf1, 0xe4,0x57,0xdb,0xfb, 0xc0,0x14,0xf4,0x79, + 0x0c,0x09,0x1b,0xdd, 0x27,0x8b,0xa1,0x62, 0x3c,0xd9,0x04,0xbf, 0x8a,0xbd,0x35,0xb5, + 0x45,0x96,0x6c,0xee, 0x64,0x33,0x82,0x20, 0x11,0x10,0x10,0x97, 0x7c,0x51,0x83,0x91, + 0xb5,0xca,0x88,0x5e, 0x71,0xe2,0xb7,0xad, 0xe2,0xfe,0x75,0xec, 0x96,0xc0,0x85,0xe4, + 0x9a,0x4c,0x74,0x5e, 0x98,0x22,0x33,0x5f, 0x7a,0x5a,0x6d,0xbb, 0x2d,0xc7,0x8d,0x15, + 0xbc,0xea,0xf3,0x56, 0x3a,0x03,0xab,0x57, 0x25,0x63,0x9c,0x64, 0x4d,0x38,0x25,0x7b, + 0x5c,0x98,0x7e,0x7a, 0x78,0xd7,0x4a,0xcb, 0xaa,0x50,0xb6,0xa0, 0xd4,0x8c,0x33,0x38, + 0x42,0xf4,0x28,0xea, 0x11,0x98,0xc6,0xc7, 0xad,0x11,0x5d,0x96, 0xb1,0xdc,0x41,0xc9, + 0x99,0x45,0x2b,0x76, 0xa9,0x8a,0x22,0xfe, 0xb1,0x84,0xb4,0x37, 0x65,0xf5,0x2b,0xab, + 0xbb,0x29,0x47,0x5c, 0xf6,0x88,0x53,0x22, 0x81,0xc4,0x60,0x69, 0x35,0xc5,0x46,0xc0, + 0x04,0xba,0xdf,0x21, 0x8c,0x01,0x94,0xff, 0x16,0xd5,0x4d,0x1c, 0xb9,0xc8,0xda,0x22, + 0xcf,0xb5,0x77,0xf4, 0x17,0x08,0xdc,0x69, 0x50,0x29,0xf7,0xc1, 0xe1,0x71,0xdc,0x47, + 0x06,0x78,0x6b,0x8b, 0x18,0x34,0xa0,0x18, 0x70,0xa6,0x8e,0x6f, 0x5b,0x7f,0xec,0xc8, + 0xab,0x0b,0x04,0x21, 0xcb,0xc7,0x9b,0x02, 0x29,0xf2,0x52,0x1f, 0xde,0xc6,0x93,0x22, + 0xc1,0x1a,0x59,0x87, 0xeb,0xd4,0x74,0x2e, 0xbe,0x2f,0x39,0xd7, 0xa3,0xa5,0xf6,0x85, + 0xbe,0x04,0x08,0x3c, 0x77,0x67,0xcc,0xf7, 0xde,0xab,0xd8,0x50, 0x93,0x4b,0xcd,0x55, + 0x73,0xd3,0x8a,0xb3, 0xdc,0xad,0xca,0x81, 0xf1,0xeb,0xc5,0x9f, 0x46,0x8a,0x9b,0x8c, + 0x22,0xa0,0xf4,0x14, 0x9e,0x44,0x51,0xd4, 0x5a,0xf0,0x6b,0x82, 0xf4,0xb5,0x00,0xa0, + 0xe0,0x73,0x24,0xdd, 0x53,0xeb,0x17,0xb5, 0xe1,0xa9,0x39,0xf2, 0x0a,0x74,0x2d,0xe7, + 0x1e,0x69,0x1c,0x3b, 0x4a,0x20,0x22,0xeb, 0x89,0x4b,0x56,0xad, 0x2f,0xb5,0x5f,0x22, + 0x44,0xab,0x68,0x02, 0xa6,0x42,0xa2,0x66, 0x7f,0xcd,0x52,0x40, 0x27,0xab,0xee,0x4b, + 0xd5,0xd4,0x7e,0x4f, 0x48,0x99,0x3b,0x46, 0x38,0x1a,0x74,0xe4, 0x61,0xeb,0xee,0x04, + 0xab,0x23,0x8b,0xfd, 0x07,0xda,0xcc,0x2d, 0xf2,0x54,0xcc,0xe4, 0xa4,0x2d,0x18,0xe3, + 0x0d,0xca,0x21,0xe6, 0xaf,0x2d,0xc2,0x18, 0x33,0x22,0x90,0x5e, 0xa5,0xa2,0x82,0x03, + 0xb9,0xe0,0x31,0x1a, 0x08,0xb4,0x2b,0x34, 0x15,0xea,0x88,0xaa, 0xfa,0xc5,0x11,0x9c, + 0x65,0x8b,0xaf,0x64, 0xc9,0x0d,0xdf,0xf3, 0x29,0x0f,0xf9,0x46, 0x68,0x62,0xe1,0x7c, + 0x0e,0x70,0xc0,0x8f, 0x82,0x4f,0x7e,0xf1, 0x36,0x02,0x93,0x51, 0x5c,0xe7,0xd2,0x72, + 0x91,0x29,0xc9,0x22, 0x5a,0x97,0xce,0x59, 0x26,0x24,0xda,0xf6, 0xf9,0x03,0xec,0xf3, + 0x4f,0x0a,0x5d,0xde, 0x99,0xf1,0x86,0x55, 0xeb,0x37,0x70,0xe4, 0x36,0x34,0x36,0x06, + 0x9f,0x30,0x03,0xb6, 0x4c,0x9a,0x30,0x28, 0xc8,0xfa,0x9a,0x4b, 0x94,0xf6,0x59,0x94, + 0x7b,0xc5,0x00,0x50, 0x2c,0x41,0x88,0xc0, 0xa2,0x28,0xf7,0x14, 0xe9,0x2f,0x7c,0x90, + 0xf2,0xb1,0x81,0x5d, 0x06,0x5d,0xbb,0xec, 0x2e,0x92,0xff,0xca, 0xdd,0xd1,0xfc,0x75, + 0x0e,0x7b,0x80,0x9f, 0xef,0x5a,0x59,0x70, 0xbe,0xe7,0x9c,0xfb, 0xcc,0x5e,0xf4,0xea, + 0xcc,0xf3,0x78,0x4d, 0xd6,0x50,0xd2,0x39, 0x7e,0x09,0xcc,0x6e, 0x03,0xe2,0xf0,0x69, + 0x5f,0x99,0x2b,0xe0, 0x29,0x20,0x29,0xed, 0xf0,0xb1,0xb7,0xfb, 0x5b,0xc4,0xb9,0x16, + 0x0c,0x98,0x5d,0x20, 0x89,0x96,0xd6,0xc4, 0xd3,0xc0,0xb9,0x82, 0xa9,0xf4,0xd7,0x96, + 0xdd,0xdb,0x2e,0x3c, 0x40,0x1b,0x2a,0x47, 0xf0,0x04,0x98,0x6d, 0x6d,0x2d,0xa9,0xa5, + 0x83,0x9c,0xcc,0xb3, 0xc1,0x76,0x7a,0xce, 0xa0,0xbf,0xff,0x96, 0xb2,0x49,0x9a,0x7c, + 0xe7,0x65,0x2c,0x38, 0x47,0xbf,0x50,0xdc, 0x6c,0x8f,0x21,0x32, 0x2b,0x29,0xb8,0x27, + 0x2c,0x2d,0x56,0x57, 0xe4,0x43,0xa1,0x54, 0x1f,0x43,0xc8,0x1e, 0x2e,0xe4,0xe2,0x26, + 0x8c,0x0c,0x35,0x4d, 0xd4,0xb9,0xb3,0x70, 0x05,0xbe,0xe8,0xb0, 0xba,0xeb,0x4a,0x0e, + 0xb0,0x80,0xcd,0x45, 0x73,0xec,0x3b,0x9f, 0xd5,0x54,0x93,0x8f, 0x85,0x30,0xb6,0x8d, + 0x60,0xdf,0xec,0x24, 0xe7,0x99,0x16,0x72, 0xfa,0xcf,0x95,0x42, 0x74,0xcf,0x76,0xdc, + 0x95,0x8b,0x22,0x65, 0xfa,0xc3,0xcd,0x88, 0x2b,0xf5,0x38,0xc4, 0xa2,0x0b,0x82,0xe1, + 0x14,0xea,0x45,0xa0, 0x02,0xe1,0x4b,0xe9, 0x44,0x15,0x61,0x06, 0x62,0x98,0xc5,0xcf, + 0xb4,0x58,0xaa,0x5f, 0x5b,0x16,0x8f,0x5a, 0x1b,0xe9,0x31,0x75, 0xef,0x0f,0x26,0x50, + 0x50,0xda,0x89,0xd2, 0x2b,0x54,0xa6,0xd9, 0xf5,0xc9,0xb7,0x6c, 0xc4,0xef,0xf0,0xc8, + 0xb6,0x32,0xd6,0xb5, 0xfb,0xe4,0xac,0x6c, 0xc0,0xcb,0x00,0x18, 0x7f,0x8c,0x98,0x43, + 0x42,0x61,0xb4,0xa6, 0xc6,0x5a,0xc5,0x35, 0x0f,0xf9,0x0c,0x4d, 0xc8,0x8b,0x2b,0xb4, + 0xa0,0x2c,0x37,0xe8, 0xac,0x8e,0x6c,0xa3, 0x58,0x42,0x26,0x23, 0x5b,0x42,0x2b,0xc5, + 0xdb,0x68,0x02,0xbe, 0x5c,0x42,0x39,0x30, 0xdc,0x0c,0x91,0x2b, 0x9a,0x54,0xf1,0xc1, + 0x1a,0xf1,0xa5,0xe2, 0x7e,0x10,0x9d,0x6a, 0xf8,0x51,0x34,0x0e, 0xce,0xdd,0x4b,0xf5, + 0xbe,0x62,0x7f,0x05, 0x88,0x3f,0xb2,0xcc, 0xe9,0x07,0x4c,0x98, 0x3f,0xbf,0xfe,0x93, + 0x86,0xa6,0x93,0xd9, 0x71,0x9f,0x30,0x18, 0xb6,0x7d,0x4b,0x81, 0xfa,0x96,0x52,0xaf, + 0xdb,0x57,0xd5,0xad, 0xa2,0xeb,0x6b,0x19, 0x7e,0x2b,0x28,0xe1, 0xef,0x44,0xcc,0x8a, + 0x91,0xc3,0xda,0x68, 0x95,0x7d,0xb0,0xa6, 0xb9,0x2a,0x9d,0x31, 0x07,0xe9,0xff,0xd2, + 0xa0,0x2b,0xfc, + // 0x723 = 1827 data bytes (42%) }; static CompressManager_t prefix_inc_mgr diff --git a/project/src/ui/tab-wbmgt.inc b/project/src/ui/tab-wbmgt.inc index 0b5b527..3c2046f 100644 --- a/project/src/ui/tab-wbmgt.inc +++ b/project/src/ui/tab-wbmgt.inc @@ -231,6 +231,9 @@ "NO_PAGER", "no-pager|nopager", 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "ZERO", "z|zero", + 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "QUIET", "q|quiet", 0, 0 /* copy of wszst */ }, diff --git a/project/src/ui/tab-wctct.inc b/project/src/ui/tab-wctct.inc index 5a114d4..0f624c5 100644 --- a/project/src/ui/tab-wctct.inc +++ b/project/src/ui/tab-wctct.inc @@ -215,6 +215,9 @@ "NO_PAGER", "no-pager|nopager", 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "ZERO", "z|zero", + 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "QUIET", "q|quiet", 0, 0 /* copy of wszst */ }, @@ -449,7 +452,7 @@ " is expected. If preceded by a minus sign, the slots are disabled." " The keywords are: @TRACKS@ (slots 0:0x1f), @ARENAS@ (0x20:0x29)" " and @SPECIAL@ (0x36:0x3a)." - " @CTCODE@ is an abbreviation for @ARENAS,SPECIAL@." + " @CTCODE@ is a short cut for @ARENAS,SPECIAL@." "\n " " The default is to enable slot ranges" " @0x00:0x1f@, @0x2a:0x35@, @0x3b:0x41@ and @0x44:0xfe@." }, diff --git a/project/src/ui/tab-wimgt.inc b/project/src/ui/tab-wimgt.inc index 67fb5da..9eec0ed 100644 --- a/project/src/ui/tab-wimgt.inc +++ b/project/src/ui/tab-wimgt.inc @@ -191,6 +191,9 @@ "NO_PAGER", "no-pager|nopager", 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "ZERO", "z|zero", + 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "QUIET", "q|quiet", 0, 0 /* copy of wszst */ }, diff --git a/project/src/ui/tab-wkclt.inc b/project/src/ui/tab-wkclt.inc index 38207d5..2d9b06b 100644 --- a/project/src/ui/tab-wkclt.inc +++ b/project/src/ui/tab-wkclt.inc @@ -306,6 +306,9 @@ "NO_PAGER", "no-pager|nopager", 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "ZERO", "z|zero", + 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "QUIET", "q|quiet", 0, 0 /* copy of wszst */ }, diff --git a/project/src/ui/tab-wkmpt.inc b/project/src/ui/tab-wkmpt.inc index 0accc19..27632c7 100644 --- a/project/src/ui/tab-wkmpt.inc +++ b/project/src/ui/tab-wkmpt.inc @@ -284,6 +284,9 @@ "NO_PAGER", "no-pager|nopager", 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "ZERO", "z|zero", + 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "QUIET", "q|quiet", 0, 0 /* copy of wszst */ }, diff --git a/project/src/ui/tab-wlect.inc b/project/src/ui/tab-wlect.inc index 217419c..d25cf5d 100644 --- a/project/src/ui/tab-wlect.inc +++ b/project/src/ui/tab-wlect.inc @@ -259,6 +259,9 @@ "NO_PAGER", "no-pager|nopager", 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "ZERO", "z|zero", + 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "QUIET", "q|quiet", 0, 0 /* copy of wszst */ }, diff --git a/project/src/ui/tab-wmdlt.inc b/project/src/ui/tab-wmdlt.inc index b927eab..a595cfb 100644 --- a/project/src/ui/tab-wmdlt.inc +++ b/project/src/ui/tab-wmdlt.inc @@ -209,6 +209,9 @@ "NO_PAGER", "no-pager|nopager", 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "ZERO", "z|zero", + 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "QUIET", "q|quiet", 0, 0 /* copy of wszst */ }, diff --git a/project/src/ui/tab-wpatt.inc b/project/src/ui/tab-wpatt.inc index 39413d7..06fe50f 100644 --- a/project/src/ui/tab-wpatt.inc +++ b/project/src/ui/tab-wpatt.inc @@ -174,6 +174,9 @@ "NO_PAGER", "no-pager|nopager", 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "ZERO", "z|zero", + 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "QUIET", "q|quiet", 0, 0 /* copy of wszst */ }, diff --git a/project/src/ui/tab-wstrt.inc b/project/src/ui/tab-wstrt.inc index 3dd0dca..5ee314a 100644 --- a/project/src/ui/tab-wstrt.inc +++ b/project/src/ui/tab-wstrt.inc @@ -243,6 +243,9 @@ "NO_PAGER", "no-pager|nopager", 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "ZERO", "z|zero", + 0, 0 /* copy of wszst */ }, + { T_OPT_GM, "QUIET", "q|quiet", 0, 0 /* copy of wszst */ }, diff --git a/project/src/ui/tab-wszst.inc b/project/src/ui/tab-wszst.inc index af24140..cfe7da5 100644 --- a/project/src/ui/tab-wszst.inc +++ b/project/src/ui/tab-wszst.inc @@ -799,6 +799,14 @@ 0, "Forbid the internal usage of a pager." }, + { T_OPT_GM, "ZERO", "z|zero", + 0, + "This option affects the exit status of the programs." + " Instead of an exit status, the value 0 is returned for OK." + " This happens for notices ({-v}, status<15), warnings ({-vv}, status<29)," + " errors ({-vvv}, status<115) and fatal errors ({-vvvv})." + " The exit status for INTERRUPT (112) is never replaced." }, + { T_OPT_GM, "QUIET", "q|quiet", 0, "Be quiet and print only error messages." @@ -1711,12 +1719,11 @@ { T_OPT_CP, "CUP_ICONS", "cup-icons|cupicons", "image", - "Load given image, convert it to TPL.CMPR and add the result as sub-files" + "Load given image, convert it to TPLx.CMPR and add the result as sub-files" " 'button/timg/ct_icons.tpl' and as 'control/timg/ct_icons.tpl'" " to files 'Channel.szs', 'MenuMulti.szs' and 'MenuSingle.szs'." " Both sub-files are always linked, so that storage space is saved." - " The usual size for each single icon is 128x128." - " This can be changed by LPAR setting CUP-ICON-SIZE." }, + " The usual size for each single icon is 128x128." }, { T_OPT_C, "NO_COPY", "no-copy|nocopy", 0, @@ -2103,15 +2110,39 @@ 0, "If creating a compressed file, create a BZIP2 compatible file." }, + { T_OPT_G, "CYBZ", "cybz", + 0, + "If creating a compressed file, force YBZ compression" + " (YAZ0 file header, but BZIP2 compression)," + " but don't change the payload." }, + + { T_OPT_G, "YBZ", "ybz", + 0, + "If creating a compressed file, force archive format U8" + " with YBZ compression (YAZ0 file header, but BZIP2 compression)." + " Therefore it is a short cut for {--u8 --cybz}." }, + { T_OPT_G, "LZ", "lz", 0, - "If creating a compressed file, force BZ compression" + "If creating a compressed file, force LZ compression" " (a YAZ0 like file format with LZMA compression)." }, { T_OPT_G, "LZMA", "lzma", 0, "If creating a compressed file, create a LZMA compatible file." }, + { T_OPT_G, "CYLZ", "cylz", + 0, + "If creating a compressed file, force YLZ compression" + " (YAZ0 file header, but LZMA compression)," + " but don't change the payload." }, + + { T_OPT_G, "YLZ", "ylz", + 0, + "If creating a compressed file, force archive format U8" + " with YLZ compression (YAZ0 file header, but LZMA compression)." + " Therefore it is a short cut for {--u8 --cylz}." }, + { T_SEP_OPT, 0,0,0,0 }, //----- separator ----- { T_OPT_G, "SH", "sh", @@ -2163,7 +2194,7 @@ { H_OPT_CP, "FMODES", "fmodes|feature-modes|featuremodes", "list", - "--fmodes is an abbreviation for --feature-modes and declares an output filter." + "--fmodes is a short cut for --feature-modes and declares an output filter." " @LIST@ is a keyword list. The keywords are:" " @SECTION, VISUAL, GAMEPLAY, BATTLE, RACING, TIMETRIAL, OFFLINE@ and @ONLINE@." " A feature is only printed if *all* set keywords match." @@ -2511,8 +2542,12 @@ " N modes of 9, 1, 8, 2, 5. @TRY2@ is used for normalizing." " For non bz-compression, @TRY*@ are the same as @BEST@." "\n " + " Do not use compression level >6 for LZMA if the file is intended" + " for Mario Kart Wii, as too much memory is required for decoding.\n" + "\n " " Option {--norm} takes precedence over {--compr}" - " and sets the compression level to @TRY2@ (@BEST@)." + " and sets the compression level for bzip2 to @TRY2@ (@BEST@)" + " and for LZMA to 6." "\n " " For more modes and details type {wszst -C list}." " To force colorized output type {wszst -C clist}." }, @@ -2747,8 +2782,12 @@ { H_COPT, "XYZ", 0,0,0 }, { T_COPT, "BZ", 0,0,0 }, { T_COPT, "BZIP2", 0,0,0 }, + { T_COPT, "CYBZ", 0,0,0 }, + { T_COPT, "YBZ", 0,0,0 }, { T_COPT, "LZ", 0,0,0 }, { T_COPT, "LZMA", 0,0,0 }, + { T_COPT, "CYLZ", 0,0,0 }, + { T_COPT, "YLZ", 0,0,0 }, { T_COPT, "SZS", 0,0,0 }, { H_COPT, "XWU8", 0,0,0 }, { T_COPT, "WBZ", 0,0,0 }, @@ -2771,8 +2810,12 @@ { H_COPT, "XYZ", 0,0,0 }, { T_COPT, "BZ", 0,0,0 }, { T_COPT, "BZIP2", 0,0,0 }, + { T_COPT, "CYBZ", 0,0,0 }, + { T_COPT, "YBZ", 0,0,0 }, { T_COPT, "LZ", 0,0,0 }, { T_COPT, "LZMA", 0,0,0 }, + { T_COPT, "CYLZ", 0,0,0 }, + { T_COPT, "YLZ", 0,0,0 }, { T_COPT, "SZS", 0,0,0 }, { H_COPT, "XWU8", 0,0,0 }, { T_COPT, "WBZ", 0,0,0 }, diff --git a/project/src/ui/ui-wbmgt.c b/project/src/ui/ui-wbmgt.c index c5c1055..6500c1a 100644 --- a/project/src/ui/ui-wbmgt.c +++ b/project/src/ui/ui-wbmgt.c @@ -374,6 +374,15 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = "Forbid the internal usage of a pager." }, + { OPT_ZERO, false, false, false, false, false, 'z', "zero", + 0, + "This option affects the exit status of the programs. Instead of an" + " exit status, the value 0 is returned for OK. This happens for" + " notices (-v, status<15), warnings (-vv, status<29), errors (-vvv," + " status<115) and fatal errors (-vvvv). The exit status for INTERRUPT" + " (112) is never replaced." + }, + { OPT_QUIET, false, false, false, false, false, 'q', "quiet", 0, "Be quiet and print only error messages. Multiple use is possible." @@ -583,7 +592,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 == 71 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 72 }; @@ -713,7 +722,7 @@ static const KeywordTab_t CommandTab[] = /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// -static const char OptionShort[] = "VhqvLYW:c:lHBM:T:A:td:D:E:orupiP:1X"; +static const char OptionShort[] = "VhzqvLYW:c:lHBM:T:A:td:D:E:orupiP:1X"; static const struct option OptionLong[] = { @@ -730,6 +739,7 @@ static const struct option OptionLong[] = { "maxwidth", 1, 0, GO_MAX_WIDTH }, { "no-pager", 0, 0, GO_NO_PAGER }, { "nopager", 0, 0, GO_NO_PAGER }, + { "zero", 0, 0, 'z' }, { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, @@ -890,7 +900,9 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x074 t */ OPT_TEST, /* 0x075 u */ OPT_UPDATE, /* 0x076 v */ OPT_VERBOSE, - /* 0x077 */ 0,0,0,0, 0,0,0,0, 0, + /* 0x077 */ 0,0,0, + /* 0x07a z */ OPT_ZERO, + /* 0x07b */ 0,0,0,0, 0, /* 0x080 */ OPT_XHELP, /* 0x081 */ OPT_CONFIG, /* 0x082 */ OPT_YDEBUG, @@ -945,7 +957,8 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x110 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x120 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x130 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - /* 0x140 */ 0,0,0,0, 0,0,0,0, 0,0, + /* 0x140 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, + /* 0x150 */ 0,0,0,0, }; // @@ -1108,6 +1121,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_WIDTH, OptionInfo + OPT_MAX_WIDTH, OptionInfo + OPT_NO_PAGER, + OptionInfo + OPT_ZERO, OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, @@ -1541,7 +1555,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, - 30, + 31, option_tab_tool, 0 }, diff --git a/project/src/ui/ui-wbmgt.h b/project/src/ui/ui-wbmgt.h index 06e69a2..0267dd9 100644 --- a/project/src/ui/ui-wbmgt.h +++ b/project/src/ui/ui-wbmgt.h @@ -104,6 +104,7 @@ typedef enum enumOptions OPT_WIDTH, OPT_MAX_WIDTH, OPT_NO_PAGER, + OPT_ZERO, OPT_QUIET, OPT_VERBOSE, OPT_LOGGING, @@ -132,7 +133,7 @@ typedef enum enumOptions OPT_NEW, OPT_EXTRACT, - OPT__N_TOTAL // == 71 + OPT__N_TOTAL // == 72 } enumOptions; @@ -395,6 +396,7 @@ typedef enum enumGetOpt GO_TEST = 't', GO_UPDATE = 'u', GO_VERBOSE = 'v', + GO_ZERO = 'z', GO_XHELP = 0x80, GO_CONFIG, @@ -454,7 +456,7 @@ typedef enum enumGetOpt //extern const struct option OptionLong[]; //extern u8 OptionUsed[OPT__N_TOTAL+1]; //extern const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE]; -//UIOPT_INDEX_SIZE := 0x14a = 330 +//UIOPT_INDEX_SIZE := 0x154 = 340 //extern const InfoCommand_t CommandInfo[CMD__N+1]; extern const InfoUI_t InfoUI_wbmgt; diff --git a/project/src/ui/ui-wctct.c b/project/src/ui/ui-wctct.c index 2b6b334..aba47a7 100644 --- a/project/src/ui/ui-wctct.c +++ b/project/src/ui/ui-wctct.c @@ -474,6 +474,15 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = "Forbid the internal usage of a pager." }, + { OPT_ZERO, false, false, false, false, false, 'z', "zero", + 0, + "This option affects the exit status of the programs. Instead of an" + " exit status, the value 0 is returned for OK. This happens for" + " notices (-v, status<15), warnings (-vv, status<29), errors (-vvv," + " status<115) and fatal errors (-vvvv). The exit status for INTERRUPT" + " (112) is never replaced." + }, + { OPT_QUIET, false, false, false, false, false, 'q', "quiet", 0, "Be quiet and print only error messages. Multiple use is possible." @@ -715,12 +724,12 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = " separated list of slots (A), slot ranges (A:B) or keywords is" " expected. If preceded by a minus sign, the slots are disabled. The" " keywords are: TRACKS (slots 0:0x1f), ARENAS (0x20:0x29) and SPECIAL" - " (0x36:0x3a). CTCODE is an abbreviation for ARENAS,SPECIAL.\n" + " (0x36:0x3a). CTCODE is a short cut for ARENAS,SPECIAL.\n" " The default is to enable slot ranges 0x00:0x1f, 0x2a:0x35," " 0x3b:0x41 and 0x44:0xfe." }, - {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 91 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 92 }; @@ -910,7 +919,7 @@ static const KeywordTab_t CommandTab[] = /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// -static const char OptionShort[] = "VhqvLYW:c:lHB1XPNM:T:A:td:D:E:orupi"; +static const char OptionShort[] = "VhzqvLYW:c:lHB1XPNM:T:A:td:D:E:orupi"; static const struct option OptionLong[] = { @@ -927,6 +936,7 @@ static const struct option OptionLong[] = { "maxwidth", 1, 0, GO_MAX_WIDTH }, { "no-pager", 0, 0, GO_NO_PAGER }, { "nopager", 0, 0, GO_NO_PAGER }, + { "zero", 0, 0, 'z' }, { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, @@ -1116,7 +1126,9 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x074 t */ OPT_TEST, /* 0x075 u */ OPT_UPDATE, /* 0x076 v */ OPT_VERBOSE, - /* 0x077 */ 0,0,0,0, 0,0,0,0, 0, + /* 0x077 */ 0,0,0, + /* 0x07a z */ OPT_ZERO, + /* 0x07b */ 0,0,0,0, 0, /* 0x080 */ OPT_XHELP, /* 0x081 */ OPT_CONFIG, /* 0x082 */ OPT_YDEBUG, @@ -1189,7 +1201,8 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x110 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x120 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x130 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - /* 0x140 */ 0,0,0,0, 0,0,0,0, 0,0, + /* 0x140 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, + /* 0x150 */ 0,0,0,0, }; // @@ -1352,6 +1365,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_WIDTH, OptionInfo + OPT_MAX_WIDTH, OptionInfo + OPT_NO_PAGER, + OptionInfo + OPT_ZERO, OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, @@ -1772,7 +1786,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, - 33, + 34, option_tab_tool, 0 }, diff --git a/project/src/ui/ui-wctct.h b/project/src/ui/ui-wctct.h index 70257de..6645493 100644 --- a/project/src/ui/ui-wctct.h +++ b/project/src/ui/ui-wctct.h @@ -119,6 +119,7 @@ typedef enum enumOptions OPT_WIDTH, OPT_MAX_WIDTH, OPT_NO_PAGER, + OPT_ZERO, OPT_QUIET, OPT_VERBOSE, OPT_LOGGING, @@ -152,7 +153,7 @@ typedef enum enumOptions OPT_CT_LOG, OPT_ALLOW_SLOTS, - OPT__N_TOTAL // == 91 + OPT__N_TOTAL // == 92 } enumOptions; @@ -463,6 +464,7 @@ typedef enum enumGetOpt GO_TEST = 't', GO_UPDATE = 'u', GO_VERBOSE = 'v', + GO_ZERO = 'z', GO_XHELP = 0x80, GO_CONFIG, @@ -541,7 +543,7 @@ typedef enum enumGetOpt //extern const struct option OptionLong[]; //extern u8 OptionUsed[OPT__N_TOTAL+1]; //extern const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE]; -//UIOPT_INDEX_SIZE := 0x14a = 330 +//UIOPT_INDEX_SIZE := 0x154 = 340 //extern const InfoCommand_t CommandInfo[CMD__N+1]; extern const InfoUI_t InfoUI_wctct; diff --git a/project/src/ui/ui-wimgt.c b/project/src/ui/ui-wimgt.c index 9d61c4e..901f399 100644 --- a/project/src/ui/ui-wimgt.c +++ b/project/src/ui/ui-wimgt.c @@ -340,6 +340,15 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = "Forbid the internal usage of a pager." }, + { OPT_ZERO, false, false, false, false, false, 'z', "zero", + 0, + "This option affects the exit status of the programs. Instead of an" + " exit status, the value 0 is returned for OK. This happens for" + " notices (-v, status<15), warnings (-vv, status<29), errors (-vvv," + " status<115) and fatal errors (-vvvv). The exit status for INTERRUPT" + " (112) is never replaced." + }, + { OPT_QUIET, false, false, false, false, false, 'q', "quiet", 0, "Be quiet and print only error messages. Multiple use is possible." @@ -537,7 +546,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 == 64 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 65 }; @@ -657,7 +666,7 @@ static const KeywordTab_t CommandTab[] = /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// -static const char OptionShort[] = "VhqvLYW:c:lHBM:T:A:td:D:E:orupiaP:x:"; +static const char OptionShort[] = "VhzqvLYW:c:lHBM:T:A:td:D:E:orupiaP:x:"; static const struct option OptionLong[] = { @@ -674,6 +683,7 @@ static const struct option OptionLong[] = { "maxwidth", 1, 0, GO_MAX_WIDTH }, { "no-pager", 0, 0, GO_NO_PAGER }, { "nopager", 0, 0, GO_NO_PAGER }, + { "zero", 0, 0, 'z' }, { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, @@ -820,7 +830,9 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x076 v */ OPT_VERBOSE, /* 0x077 */ 0, /* 0x078 x */ OPT_TRANSFORM, - /* 0x079 */ 0,0,0,0, 0,0,0, + /* 0x079 */ 0, + /* 0x07a z */ OPT_ZERO, + /* 0x07b */ 0,0,0,0, 0, /* 0x080 */ OPT_XHELP, /* 0x081 */ OPT_CONFIG, /* 0x082 */ OPT_YDEBUG, @@ -868,7 +880,8 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x110 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x120 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x130 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - /* 0x140 */ 0,0,0,0, 0,0,0,0, 0,0, + /* 0x140 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, + /* 0x150 */ 0,0,0,0, }; // @@ -978,6 +991,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_WIDTH, OptionInfo + OPT_MAX_WIDTH, OptionInfo + OPT_NO_PAGER, + OptionInfo + OPT_ZERO, OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, @@ -1307,7 +1321,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, - 27, + 28, option_tab_tool, 0 }, diff --git a/project/src/ui/ui-wimgt.h b/project/src/ui/ui-wimgt.h index 9703127..9051fa6 100644 --- a/project/src/ui/ui-wimgt.h +++ b/project/src/ui/ui-wimgt.h @@ -98,6 +98,7 @@ typedef enum enumOptions OPT_WIDTH, OPT_MAX_WIDTH, OPT_NO_PAGER, + OPT_ZERO, OPT_QUIET, OPT_VERBOSE, OPT_LOGGING, @@ -125,7 +126,7 @@ typedef enum enumOptions OPT_NEW, OPT_EXTRACT, - OPT__N_TOTAL // == 64 + OPT__N_TOTAL // == 65 } enumOptions; @@ -320,6 +321,7 @@ typedef enum enumGetOpt GO_UPDATE = 'u', GO_VERBOSE = 'v', GO_TRANSFORM = 'x', + GO_ZERO = 'z', GO_XHELP = 0x80, GO_CONFIG, @@ -372,7 +374,7 @@ typedef enum enumGetOpt //extern const struct option OptionLong[]; //extern u8 OptionUsed[OPT__N_TOTAL+1]; //extern const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE]; -//UIOPT_INDEX_SIZE := 0x14a = 330 +//UIOPT_INDEX_SIZE := 0x154 = 340 //extern const InfoCommand_t CommandInfo[CMD__N+1]; extern const InfoUI_t InfoUI_wimgt; diff --git a/project/src/ui/ui-wkclt.c b/project/src/ui/ui-wkclt.c index 3981df6..81cbacb 100644 --- a/project/src/ui/ui-wkclt.c +++ b/project/src/ui/ui-wkclt.c @@ -474,6 +474,15 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = "Forbid the internal usage of a pager." }, + { OPT_ZERO, false, false, false, false, false, 'z', "zero", + 0, + "This option affects the exit status of the programs. Instead of an" + " exit status, the value 0 is returned for OK. This happens for" + " notices (-v, status<15), warnings (-vv, status<29), errors (-vvv," + " status<115) and fatal errors (-vvvv). The exit status for INTERRUPT" + " (112) is never replaced." + }, + { OPT_QUIET, false, false, false, false, false, 'q', "quiet", 0, "Be quiet and print only error messages. Multiple use is possible." @@ -722,7 +731,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 == 84 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 85 }; @@ -994,7 +1003,7 @@ static const KeywordTab_t CommandTab[] = /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// -static const char OptionShort[] = "VhqvLYW:c:lHBPNM:T:A:td:D:E:orupi"; +static const char OptionShort[] = "VhzqvLYW:c:lHBPNM:T:A:td:D:E:orupi"; static const struct option OptionLong[] = { @@ -1011,6 +1020,7 @@ static const struct option OptionLong[] = { "maxwidth", 1, 0, GO_MAX_WIDTH }, { "no-pager", 0, 0, GO_NO_PAGER }, { "nopager", 0, 0, GO_NO_PAGER }, + { "zero", 0, 0, 'z' }, { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, @@ -1173,7 +1183,9 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x074 t */ OPT_TEST, /* 0x075 u */ OPT_UPDATE, /* 0x076 v */ OPT_VERBOSE, - /* 0x077 */ 0,0,0,0, 0,0,0,0, 0, + /* 0x077 */ 0,0,0, + /* 0x07a z */ OPT_ZERO, + /* 0x07b */ 0,0,0,0, 0, /* 0x080 */ OPT_XHELP, /* 0x081 */ OPT_CONFIG, /* 0x082 */ OPT_YDEBUG, @@ -1241,7 +1253,8 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x110 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x120 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x130 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - /* 0x140 */ 0,0,0,0, 0,0,0,0, 0,0, + /* 0x140 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, + /* 0x150 */ 0,0,0,0, }; // @@ -1464,6 +1477,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_WIDTH, OptionInfo + OPT_MAX_WIDTH, OptionInfo + OPT_NO_PAGER, + OptionInfo + OPT_ZERO, OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, @@ -2278,7 +2292,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "Wiimms KCL Tool : Analyze, modify, export and create KCL and OBJ" " files.", 0, - 31, + 32, option_tab_tool, 0 }, diff --git a/project/src/ui/ui-wkclt.h b/project/src/ui/ui-wkclt.h index 3f8a2e9..f467063 100644 --- a/project/src/ui/ui-wkclt.h +++ b/project/src/ui/ui-wkclt.h @@ -113,6 +113,7 @@ typedef enum enumOptions OPT_WIDTH, OPT_MAX_WIDTH, OPT_NO_PAGER, + OPT_ZERO, OPT_QUIET, OPT_VERBOSE, OPT_LOGGING, @@ -145,7 +146,7 @@ typedef enum enumOptions OPT_NEW, OPT_EXTRACT, - OPT__N_TOTAL // == 84 + OPT__N_TOTAL // == 85 } enumOptions; @@ -473,6 +474,7 @@ typedef enum enumGetOpt GO_TEST = 't', GO_UPDATE = 'u', GO_VERBOSE = 'v', + GO_ZERO = 'z', GO_XHELP = 0x80, GO_CONFIG, @@ -546,7 +548,7 @@ typedef enum enumGetOpt //extern const struct option OptionLong[]; //extern u8 OptionUsed[OPT__N_TOTAL+1]; //extern const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE]; -//UIOPT_INDEX_SIZE := 0x14a = 330 +//UIOPT_INDEX_SIZE := 0x154 = 340 //extern const InfoCommand_t CommandInfo[CMD__N+1]; extern const InfoUI_t InfoUI_wkclt; diff --git a/project/src/ui/ui-wkmpt.c b/project/src/ui/ui-wkmpt.c index f04bd3c..fc470b8 100644 --- a/project/src/ui/ui-wkmpt.c +++ b/project/src/ui/ui-wkmpt.c @@ -566,6 +566,15 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = "Forbid the internal usage of a pager." }, + { OPT_ZERO, false, false, false, false, false, 'z', "zero", + 0, + "This option affects the exit status of the programs. Instead of an" + " exit status, the value 0 is returned for OK. This happens for" + " notices (-v, status<15), warnings (-vv, status<29), errors (-vvv," + " status<115) and fatal errors (-vvvv). The exit status for INTERRUPT" + " (112) is never replaced." + }, + { OPT_QUIET, false, false, false, false, false, 'q', "quiet", 0, "Be quiet and print only error messages. Multiple use is possible." @@ -926,7 +935,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 == 102 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 103 }; @@ -1211,7 +1220,7 @@ static const KeywordTab_t CommandTab[] = /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// -static const char OptionShort[] = "VhqvLYW:c:w:lHBXPGNM:T:A:td:D:E:orupi"; +static const char OptionShort[] = "VhzqvLYW:c:w:lHBXPGNM:T:A:td:D:E:orupi"; static const struct option OptionLong[] = { @@ -1228,6 +1237,7 @@ static const struct option OptionLong[] = { "maxwidth", 1, 0, GO_MAX_WIDTH }, { "no-pager", 0, 0, GO_NO_PAGER }, { "nopager", 0, 0, GO_NO_PAGER }, + { "zero", 0, 0, 'z' }, { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, @@ -1425,7 +1435,9 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x075 u */ OPT_UPDATE, /* 0x076 v */ OPT_VERBOSE, /* 0x077 w */ OPT_DRAW, - /* 0x078 */ 0,0,0,0, 0,0,0,0, + /* 0x078 */ 0,0, + /* 0x07a z */ OPT_ZERO, + /* 0x07b */ 0,0,0,0, 0, /* 0x080 */ OPT_XHELP, /* 0x081 */ OPT_CONFIG, /* 0x082 */ OPT_YDEBUG, @@ -1507,7 +1519,8 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x110 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x120 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x130 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - /* 0x140 */ 0,0,0,0, 0,0,0,0, 0,0, + /* 0x140 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, + /* 0x150 */ 0,0,0,0, }; // @@ -1718,6 +1731,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_WIDTH, OptionInfo + OPT_MAX_WIDTH, OptionInfo + OPT_NO_PAGER, + OptionInfo + OPT_ZERO, OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, @@ -2341,7 +2355,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = "Wiimms KMP Tool : Analyze, modify, export and create (compile) KMP" " files.", 0, - 40, + 41, option_tab_tool, 0 }, diff --git a/project/src/ui/ui-wkmpt.h b/project/src/ui/ui-wkmpt.h index d0ac366..8095fce 100644 --- a/project/src/ui/ui-wkmpt.h +++ b/project/src/ui/ui-wkmpt.h @@ -121,6 +121,7 @@ typedef enum enumOptions OPT_WIDTH, OPT_MAX_WIDTH, OPT_NO_PAGER, + OPT_ZERO, OPT_QUIET, OPT_VERBOSE, OPT_LOGGING, @@ -163,7 +164,7 @@ typedef enum enumOptions OPT_NEW, OPT_EXTRACT, - OPT__N_TOTAL // == 102 + OPT__N_TOTAL // == 103 } enumOptions; @@ -491,6 +492,7 @@ typedef enum enumGetOpt GO_UPDATE = 'u', GO_VERBOSE = 'v', GO_DRAW = 'w', + GO_ZERO = 'z', GO_XHELP = 0x80, GO_CONFIG, @@ -579,7 +581,7 @@ typedef enum enumGetOpt //extern const struct option OptionLong[]; //extern u8 OptionUsed[OPT__N_TOTAL+1]; //extern const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE]; -//UIOPT_INDEX_SIZE := 0x14a = 330 +//UIOPT_INDEX_SIZE := 0x154 = 340 //extern const InfoCommand_t CommandInfo[CMD__N+1]; extern const InfoUI_t InfoUI_wkmpt; diff --git a/project/src/ui/ui-wlect.c b/project/src/ui/ui-wlect.c index c265634..912e2e1 100644 --- a/project/src/ui/ui-wlect.c +++ b/project/src/ui/ui-wlect.c @@ -468,6 +468,15 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = "Forbid the internal usage of a pager." }, + { OPT_ZERO, false, false, false, false, false, 'z', "zero", + 0, + "This option affects the exit status of the programs. Instead of an" + " exit status, the value 0 is returned for OK. This happens for" + " notices (-v, status<15), warnings (-vv, status<29), errors (-vvv," + " status<115) and fatal errors (-vvvv). The exit status for INTERRUPT" + " (112) is never replaced." + }, + { OPT_QUIET, false, false, false, false, false, 'q', "quiet", 0, "Be quiet and print only error messages. Multiple use is possible." @@ -712,7 +721,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 == 93 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 94 }; @@ -886,7 +895,7 @@ static const KeywordTab_t CommandTab[] = /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// -static const char OptionShort[] = "VhqvLYW:c:lHBXPM:tCd:D:E:orupi"; +static const char OptionShort[] = "VhzqvLYW:c:lHBXPM:tCd:D:E:orupi"; static const struct option OptionLong[] = { @@ -903,6 +912,7 @@ static const struct option OptionLong[] = { "maxwidth", 1, 0, GO_MAX_WIDTH }, { "no-pager", 0, 0, GO_NO_PAGER }, { "nopager", 0, 0, GO_NO_PAGER }, + { "zero", 0, 0, 'z' }, { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, @@ -1094,7 +1104,9 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x074 t */ OPT_TEST, /* 0x075 u */ OPT_UPDATE, /* 0x076 v */ OPT_VERBOSE, - /* 0x077 */ 0,0,0,0, 0,0,0,0, 0, + /* 0x077 */ 0,0,0, + /* 0x07a z */ OPT_ZERO, + /* 0x07b */ 0,0,0,0, 0, /* 0x080 */ OPT_XHELP, /* 0x081 */ OPT_CONFIG, /* 0x082 */ OPT_YDEBUG, @@ -1171,7 +1183,8 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x110 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x120 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x130 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - /* 0x140 */ 0,0,0,0, 0,0,0,0, 0,0, + /* 0x140 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, + /* 0x150 */ 0,0,0,0, }; // @@ -1376,6 +1389,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_WIDTH, OptionInfo + OPT_MAX_WIDTH, OptionInfo + OPT_NO_PAGER, + OptionInfo + OPT_ZERO, OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, @@ -1969,7 +1983,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, - 37, + 38, option_tab_tool, 0 }, diff --git a/project/src/ui/ui-wlect.h b/project/src/ui/ui-wlect.h index dfad948..55aeacb 100644 --- a/project/src/ui/ui-wlect.h +++ b/project/src/ui/ui-wlect.h @@ -119,6 +119,7 @@ typedef enum enumOptions OPT_WIDTH, OPT_MAX_WIDTH, OPT_NO_PAGER, + OPT_ZERO, OPT_QUIET, OPT_VERBOSE, OPT_LOGGING, @@ -154,7 +155,7 @@ typedef enum enumOptions OPT_NEW, OPT_EXTRACT, - OPT__N_TOTAL // == 93 + OPT__N_TOTAL // == 94 } enumOptions; @@ -462,6 +463,7 @@ typedef enum enumGetOpt GO_TEST = 't', GO_UPDATE = 'u', GO_VERBOSE = 'v', + GO_ZERO = 'z', GO_XHELP = 0x80, GO_CONFIG, @@ -545,7 +547,7 @@ typedef enum enumGetOpt //extern const struct option OptionLong[]; //extern u8 OptionUsed[OPT__N_TOTAL+1]; //extern const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE]; -//UIOPT_INDEX_SIZE := 0x14a = 330 +//UIOPT_INDEX_SIZE := 0x154 = 340 //extern const InfoCommand_t CommandInfo[CMD__N+1]; extern const InfoUI_t InfoUI_wlect; diff --git a/project/src/ui/ui-wmdlt.c b/project/src/ui/ui-wmdlt.c index a3e2c36..663346c 100644 --- a/project/src/ui/ui-wmdlt.c +++ b/project/src/ui/ui-wmdlt.c @@ -396,6 +396,15 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = "Forbid the internal usage of a pager." }, + { OPT_ZERO, false, false, false, false, false, 'z', "zero", + 0, + "This option affects the exit status of the programs. Instead of an" + " exit status, the value 0 is returned for OK. This happens for" + " notices (-v, status<15), warnings (-vv, status<29), errors (-vvv," + " status<115) and fatal errors (-vvvv). The exit status for INTERRUPT" + " (112) is never replaced." + }, + { OPT_QUIET, false, false, false, false, false, 'q', "quiet", 0, "Be quiet and print only error messages. Multiple use is possible." @@ -614,7 +623,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 == 73 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 74 }; @@ -772,7 +781,7 @@ static const KeywordTab_t CommandTab[] = /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// -static const char OptionShort[] = "VhqvLYW:c:lHBPNM:T:A:td:D:E:orupi"; +static const char OptionShort[] = "VhzqvLYW:c:lHBPNM:T:A:td:D:E:orupi"; static const struct option OptionLong[] = { @@ -789,6 +798,7 @@ static const struct option OptionLong[] = { "maxwidth", 1, 0, GO_MAX_WIDTH }, { "no-pager", 0, 0, GO_NO_PAGER }, { "nopager", 0, 0, GO_NO_PAGER }, + { "zero", 0, 0, 'z' }, { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, @@ -930,7 +940,9 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x074 t */ OPT_TEST, /* 0x075 u */ OPT_UPDATE, /* 0x076 v */ OPT_VERBOSE, - /* 0x077 */ 0,0,0,0, 0,0,0,0, 0, + /* 0x077 */ 0,0,0, + /* 0x07a z */ OPT_ZERO, + /* 0x07b */ 0,0,0,0, 0, /* 0x080 */ OPT_XHELP, /* 0x081 */ OPT_CONFIG, /* 0x082 */ OPT_YDEBUG, @@ -988,7 +1000,8 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x110 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x120 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x130 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - /* 0x140 */ 0,0,0,0, 0,0,0,0, 0,0, + /* 0x140 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, + /* 0x150 */ 0,0,0,0, }; // @@ -1145,6 +1158,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_WIDTH, OptionInfo + OPT_MAX_WIDTH, OptionInfo + OPT_NO_PAGER, + OptionInfo + OPT_ZERO, OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, @@ -1565,7 +1579,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, - 29, + 30, option_tab_tool, 0 }, diff --git a/project/src/ui/ui-wmdlt.h b/project/src/ui/ui-wmdlt.h index e6d46bd..5e7f493 100644 --- a/project/src/ui/ui-wmdlt.h +++ b/project/src/ui/ui-wmdlt.h @@ -105,6 +105,7 @@ typedef enum enumOptions OPT_WIDTH, OPT_MAX_WIDTH, OPT_NO_PAGER, + OPT_ZERO, OPT_QUIET, OPT_VERBOSE, OPT_LOGGING, @@ -134,7 +135,7 @@ typedef enum enumOptions OPT_NEW, OPT_EXTRACT, - OPT__N_TOTAL // == 73 + OPT__N_TOTAL // == 74 } enumOptions; @@ -385,6 +386,7 @@ typedef enum enumGetOpt GO_TEST = 't', GO_UPDATE = 'u', GO_VERBOSE = 'v', + GO_ZERO = 'z', GO_XHELP = 0x80, GO_CONFIG, @@ -447,7 +449,7 @@ typedef enum enumGetOpt //extern const struct option OptionLong[]; //extern u8 OptionUsed[OPT__N_TOTAL+1]; //extern const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE]; -//UIOPT_INDEX_SIZE := 0x14a = 330 +//UIOPT_INDEX_SIZE := 0x154 = 340 //extern const InfoCommand_t CommandInfo[CMD__N+1]; extern const InfoUI_t InfoUI_wmdlt; diff --git a/project/src/ui/ui-wpatt.c b/project/src/ui/ui-wpatt.c index 07ce14d..79b02eb 100644 --- a/project/src/ui/ui-wpatt.c +++ b/project/src/ui/ui-wpatt.c @@ -238,6 +238,15 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = "Forbid the internal usage of a pager." }, + { OPT_ZERO, false, false, false, false, false, 'z', "zero", + 0, + "This option affects the exit status of the programs. Instead of an" + " exit status, the value 0 is returned for OK. This happens for" + " notices (-v, status<15), warnings (-vv, status<29), errors (-vvv," + " status<115) and fatal errors (-vvvv). The exit status for INTERRUPT" + " (112) is never replaced." + }, + { OPT_QUIET, false, false, false, false, false, 'q', "quiet", 0, "Be quiet and print only error messages. Multiple use is possible." @@ -445,7 +454,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 == 57 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 58 }; @@ -569,7 +578,7 @@ static const KeywordTab_t CommandTab[] = /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// -static const char OptionShort[] = "VhqvLYW:c:lHBPNM:T:A:td:D:E:orupi"; +static const char OptionShort[] = "VhzqvLYW:c:lHBPNM:T:A:td:D:E:orupi"; static const struct option OptionLong[] = { @@ -586,6 +595,7 @@ static const struct option OptionLong[] = { "maxwidth", 1, 0, GO_MAX_WIDTH }, { "no-pager", 0, 0, GO_NO_PAGER }, { "nopager", 0, 0, GO_NO_PAGER }, + { "zero", 0, 0, 'z' }, { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, @@ -709,7 +719,9 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x074 t */ OPT_TEST, /* 0x075 u */ OPT_UPDATE, /* 0x076 v */ OPT_VERBOSE, - /* 0x077 */ 0,0,0,0, 0,0,0,0, 0, + /* 0x077 */ 0,0,0, + /* 0x07a z */ OPT_ZERO, + /* 0x07b */ 0,0,0,0, 0, /* 0x080 */ OPT_XHELP, /* 0x081 */ OPT_CONFIG, /* 0x082 */ OPT_YDEBUG, @@ -752,7 +764,8 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x110 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x120 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x130 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - /* 0x140 */ 0,0,0,0, 0,0,0,0, 0,0, + /* 0x140 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, + /* 0x150 */ 0,0,0,0, }; // @@ -867,6 +880,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_WIDTH, OptionInfo + OPT_MAX_WIDTH, OptionInfo + OPT_NO_PAGER, + OptionInfo + OPT_ZERO, OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, @@ -1097,7 +1111,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, - 28, + 29, option_tab_tool, 0 }, diff --git a/project/src/ui/ui-wpatt.h b/project/src/ui/ui-wpatt.h index ad0847b..fe05b39 100644 --- a/project/src/ui/ui-wpatt.h +++ b/project/src/ui/ui-wpatt.h @@ -90,6 +90,7 @@ typedef enum enumOptions OPT_WIDTH, OPT_MAX_WIDTH, OPT_NO_PAGER, + OPT_ZERO, OPT_QUIET, OPT_VERBOSE, OPT_LOGGING, @@ -118,7 +119,7 @@ typedef enum enumOptions OPT_NEW, OPT_EXTRACT, - OPT__N_TOTAL // == 57 + OPT__N_TOTAL // == 58 } enumOptions; @@ -302,6 +303,7 @@ typedef enum enumGetOpt GO_TEST = 't', GO_UPDATE = 'u', GO_VERBOSE = 'v', + GO_ZERO = 'z', GO_XHELP = 0x80, GO_CONFIG, @@ -348,7 +350,7 @@ typedef enum enumGetOpt //extern const struct option OptionLong[]; //extern u8 OptionUsed[OPT__N_TOTAL+1]; //extern const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE]; -//UIOPT_INDEX_SIZE := 0x14a = 330 +//UIOPT_INDEX_SIZE := 0x154 = 340 //extern const InfoCommand_t CommandInfo[CMD__N+1]; extern const InfoUI_t InfoUI_wpatt; diff --git a/project/src/ui/ui-wstrt.c b/project/src/ui/ui-wstrt.c index d7a4c55..54ac589 100644 --- a/project/src/ui/ui-wstrt.c +++ b/project/src/ui/ui-wstrt.c @@ -593,6 +593,15 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = "Forbid the internal usage of a pager." }, + { OPT_ZERO, false, false, false, false, false, 'z', "zero", + 0, + "This option affects the exit status of the programs. Instead of an" + " exit status, the value 0 is returned for OK. This happens for" + " notices (-v, status<15), warnings (-vv, status<29), errors (-vvv," + " status<115) and fatal errors (-vvvv). The exit status for INTERRUPT" + " (112) is never replaced." + }, + { OPT_QUIET, false, false, false, false, false, 'q', "quiet", 0, "Be quiet and print only error messages. Multiple use is possible." @@ -949,7 +958,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = " directory." }, - {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 127 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 128 }; @@ -1160,7 +1169,7 @@ static const KeywordTab_t CommandTab[] = /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// -static const char OptionShort[] = "Vh@qvLYW:c:lBHT:A:R:td:D:E:orupi0U"; +static const char OptionShort[] = "Vh@zqvLYW:c:lBHT:A:R:td:D:E:orupi0U"; static const struct option OptionLong[] = { @@ -1178,6 +1187,7 @@ static const struct option OptionLong[] = { "maxwidth", 1, 0, GO_MAX_WIDTH }, { "no-pager", 0, 0, GO_NO_PAGER }, { "nopager", 0, 0, GO_NO_PAGER }, + { "zero", 0, 0, 'z' }, { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, @@ -1404,7 +1414,9 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x074 t */ OPT_TEST, /* 0x075 u */ OPT_UPDATE, /* 0x076 v */ OPT_VERBOSE, - /* 0x077 */ 0,0,0,0, 0,0,0,0, 0, + /* 0x077 */ 0,0,0, + /* 0x07a z */ OPT_ZERO, + /* 0x07b */ 0,0,0,0, 0, /* 0x080 */ OPT_XHELP, /* 0x081 */ OPT_CONFIG, /* 0x082 */ OPT_YDEBUG, @@ -1511,7 +1523,8 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x110 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x120 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x130 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - /* 0x140 */ 0,0,0,0, 0,0,0,0, 0,0, + /* 0x140 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, + /* 0x150 */ 0,0,0,0, }; // @@ -1711,6 +1724,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_WIDTH, OptionInfo + OPT_MAX_WIDTH, OptionInfo + OPT_NO_PAGER, + OptionInfo + OPT_ZERO, OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, @@ -2170,7 +2184,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, - 44, + 45, option_tab_tool, 0 }, diff --git a/project/src/ui/ui-wstrt.h b/project/src/ui/ui-wstrt.h index 4ed5b83..0fa2cfd 100644 --- a/project/src/ui/ui-wstrt.h +++ b/project/src/ui/ui-wstrt.h @@ -141,6 +141,7 @@ typedef enum enumOptions OPT_WIDTH, OPT_MAX_WIDTH, OPT_NO_PAGER, + OPT_ZERO, OPT_QUIET, OPT_VERBOSE, OPT_LOGGING, @@ -188,7 +189,7 @@ typedef enum enumOptions OPT_CLEAN_DOL, OPT_CT_DIR, - OPT__N_TOTAL // == 127 + OPT__N_TOTAL // == 128 } enumOptions; @@ -518,6 +519,7 @@ typedef enum enumGetOpt GO_TEST = 't', GO_UPDATE = 'u', GO_VERBOSE = 'v', + GO_ZERO = 'z', GO_XHELP = 0x80, GO_CONFIG, @@ -633,7 +635,7 @@ typedef enum enumGetOpt //extern const struct option OptionLong[]; //extern u8 OptionUsed[OPT__N_TOTAL+1]; //extern const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE]; -//UIOPT_INDEX_SIZE := 0x14a = 330 +//UIOPT_INDEX_SIZE := 0x154 = 340 //extern const InfoCommand_t CommandInfo[CMD__N+1]; extern const InfoUI_t InfoUI_wstrt; diff --git a/project/src/ui/ui-wszst.c b/project/src/ui/ui-wszst.c index 06ed088..9ea4297 100644 --- a/project/src/ui/ui-wszst.c +++ b/project/src/ui/ui-wszst.c @@ -502,12 +502,12 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = { OPT_CUP_ICONS, false, false, false, false, false, 0, "cup-icons", "image", - "Load given image, convert it to TPL.CMPR and add the result as" + "Load given image, convert it to TPLx.CMPR and add the result as" " sub-files 'button/timg/ct_icons.tpl' and as" " 'control/timg/ct_icons.tpl' to files 'Channel.szs', 'MenuMulti.szs'" " and 'MenuSingle.szs'. Both sub-files are always linked, so that" " storage space is saved. The usual size for each single icon is" - " 128x128. This can be changed by LPAR setting CUP-ICON-SIZE." + " 128x128." }, { OPT_NO_COPY, false, false, false, false, false, 0, "no-copy", @@ -757,10 +757,10 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = { OPT_FMODES, false, true, false, false, false, 0, "fmodes", "list", - "--fmodes is an abbreviation for --feature-modes and declares an" - " output filter. LIST is a keyword list. The keywords are: SECTION," - " VISUAL, GAMEPLAY, BATTLE, RACING, TIMETRIAL, OFFLINE and ONLINE. A" - " feature is only printed if *all* set keywords match.\n" + "--fmodes is a short cut for --feature-modes and declares an output" + " filter. LIST is a keyword list. The keywords are: SECTION, VISUAL," + " GAMEPLAY, BATTLE, RACING, TIMETRIAL, OFFLINE and ONLINE. A feature" + " is only printed if *all* set keywords match.\n" " Each keyword can also be used with a minus as prefix to define a" " second condition. In this case the feature is excluded from printing" " if *any* set keywords match." @@ -1087,8 +1087,11 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = " the best compression mode with testing the first N modes of 9, 1, 8," " 2, 5. TRY2 is used for normalizing. For non bz-compression, TRY* are" " the same as BEST.\n" + " Do not use compression level >6 for LZMA if the file is intended" + " for Mario Kart Wii, as too much memory is required for decoding.\n" + "\n" " Option --norm takes precedence over --compr and sets the" - " compression level to TRY2 (BEST).\n" + " compression level for bzip2 to TRY2 (BEST) and for LZMA to 6.\n" " For more modes and details type 'wszst -C list'. To force colorized" " output type 'wszst -C clist'." }, @@ -1302,6 +1305,15 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = "Forbid the internal usage of a pager." }, + { OPT_ZERO, false, false, false, false, false, 'z', "zero", + 0, + "This option affects the exit status of the programs. Instead of an" + " exit status, the value 0 is returned for OK. This happens for" + " notices (-v, status<15), warnings (-vv, status<29), errors (-vvv," + " status<115) and fatal errors (-vvvv). The exit status for INTERRUPT" + " (112) is never replaced." + }, + { OPT_QUIET, false, false, false, false, false, 'q', "quiet", 0, "Be quiet and print only error messages. Multiple use is possible." @@ -1862,9 +1874,22 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = "If creating a compressed file, create a BZIP2 compatible file." }, + { OPT_CYBZ, false, false, false, false, false, 0, "cybz", + 0, + "If creating a compressed file, force YBZ compression (YAZ0 file" + " header, but BZIP2 compression), but don't change the payload." + }, + + { OPT_YBZ, false, false, false, false, false, 0, "ybz", + 0, + "If creating a compressed file, force archive format U8 with YBZ" + " compression (YAZ0 file header, but BZIP2 compression). Therefore it" + " is a short cut for '--u8 --cybz'." + }, + { OPT_LZ, false, false, false, false, false, 0, "lz", 0, - "If creating a compressed file, force BZ compression (a YAZ0 like file" + "If creating a compressed file, force LZ compression (a YAZ0 like file" " format with LZMA compression)." }, @@ -1873,6 +1898,19 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = "If creating a compressed file, create a LZMA compatible file." }, + { OPT_CYLZ, false, false, false, false, false, 0, "cylz", + 0, + "If creating a compressed file, force YLZ compression (YAZ0 file" + " header, but LZMA compression), but don't change the payload." + }, + + { OPT_YLZ, false, false, false, false, false, 0, "ylz", + 0, + "If creating a compressed file, force archive format U8 with YLZ" + " compression (YAZ0 file header, but LZMA compression). Therefore it" + " is a short cut for '--u8 --cylz'." + }, + { OPT_SH, false, false, false, false, true, 0, "sh", 0, "Dump info using SH syntax. Use '--var name' as prefix." @@ -1951,7 +1989,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 == 238 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 243 }; @@ -2586,7 +2624,7 @@ static const KeywordTab_t CommandTab[] = /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// -static const char OptionShort[] = "VhqvLYW:c:lHB1XPS:M:T:A:x:ts:d:D:E:orupiNC:nRea"; +static const char OptionShort[] = "VhzqvLYW:c:lHB1XPS:M:T:A:x:ts:d:D:E:orupiNC:nRea"; static const struct option OptionLong[] = { @@ -2603,6 +2641,7 @@ static const struct option OptionLong[] = { "maxwidth", 1, 0, GO_MAX_WIDTH }, { "no-pager", 0, 0, GO_NO_PAGER }, { "nopager", 0, 0, GO_NO_PAGER }, + { "zero", 0, 0, 'z' }, { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, @@ -2844,8 +2883,12 @@ static const struct option OptionLong[] = { "bz", 0, 0, GO_BZ }, { "bzip2", 0, 0, GO_BZIP2 }, { "bz2", 0, 0, GO_BZIP2 }, + { "cybz", 0, 0, GO_CYBZ }, + { "ybz", 0, 0, GO_YBZ }, { "lz", 0, 0, GO_LZ }, { "lzma", 0, 0, GO_LZMA }, + { "cylz", 0, 0, GO_CYLZ }, + { "ylz", 0, 0, GO_YLZ }, { "sh", 0, 0, GO_SH }, { "bash", 0, 0, GO_BASH }, { "json", 0, 0, GO_JSON }, @@ -3051,7 +3094,9 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x076 v */ OPT_VERBOSE, /* 0x077 */ 0, /* 0x078 x */ OPT_TRANSFORM, - /* 0x079 */ 0,0,0,0, 0,0,0, + /* 0x079 */ 0, + /* 0x07a z */ OPT_ZERO, + /* 0x07b */ 0,0,0,0, 0, /* 0x080 */ OPT_XHELP, /* 0x081 */ OPT_CONFIG, /* 0x082 */ OPT_YDEBUG, @@ -3188,72 +3233,77 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x105 */ OPT_XYZ, /* 0x106 */ OPT_BZ, /* 0x107 */ OPT_BZIP2, - /* 0x108 */ OPT_LZ, - /* 0x109 */ OPT_LZMA, - /* 0x10a */ OPT_SH, - /* 0x10b */ OPT_BASH, - /* 0x10c */ OPT_JSON, - /* 0x10d */ OPT_PHP, - /* 0x10e */ OPT_MAKEDOC, - /* 0x10f */ OPT_VAR, - /* 0x110 */ OPT_ARRAY, - /* 0x111 */ OPT_AVAR, - /* 0x112 */ OPT_CASE, - /* 0x113 */ OPT_FMODES, - /* 0x114 */ OPT_INSTALL, - /* 0x115 */ OPT_ANALYZE, - /* 0x116 */ OPT_ANALYZE_MODE, - /* 0x117 */ OPT_OLD, - /* 0x118 */ OPT_STD, - /* 0x119 */ OPT_NEW, - /* 0x11a */ OPT_EXTRACT, - /* 0x11b */ OPT_ID_LIST, - /* 0x11c */ OPT_REFERENCE, - /* 0x11d */ OPT_NUMBER, - /* 0x11e */ OPT_REMOVE_SRC, - /* 0x11f */ OPT_IGNORE_SETUP, - /* 0x120 */ OPT_PURGE, - /* 0x121 */ OPT_ALIGN_U8, - /* 0x122 */ OPT_ALIGN_LTA, - /* 0x123 */ OPT_ALIGN_PACK, - /* 0x124 */ OPT_ALIGN_BRRES, - /* 0x125 */ OPT_ALIGN_BREFF, - /* 0x126 */ OPT_ALIGN_BREFT, - /* 0x127 */ OPT_ALIGN, - /* 0x128 */ OPT_ENCODE_ALL, - /* 0x129 */ OPT_ENCODE_IMG, - /* 0x12a */ OPT_NO_ENCODE, - /* 0x12b */ OPT_NO_RECURSE, - /* 0x12c */ OPT_AUTO_ADD, - /* 0x12d */ OPT_NO_ECHO, - /* 0x12e */ OPT_PT_DIR, - /* 0x12f */ OPT_RM_AIPARAM, - /* 0x130 */ OPT_U8, - /* 0x131 */ OPT_SZS, - /* 0x132 */ OPT_WU8, - /* 0x133 */ OPT_XWU8, - /* 0x134 */ OPT_WBZ, - /* 0x135 */ OPT_WLZ, - /* 0x136 */ OPT_LFL, - /* 0x137 */ OPT_PACK, - /* 0x138 */ OPT_BRRES, - /* 0x139 */ OPT_BREFF, - /* 0x13a */ OPT_BREFT, - /* 0x13b */ OPT_NO_COMPRESS, - /* 0x13c */ OPT_FAST, - /* 0x13d */ OPT_LINKS, - /* 0x13e */ OPT_BASEDIR, - /* 0x13f */ OPT_DECODE, - /* 0x140 */ OPT_MIPMAPS, - /* 0x141 */ OPT_NO_MIPMAPS, - /* 0x142 */ OPT_N_MIPMAPS, - /* 0x143 */ OPT_MAX_MIPMAPS, - /* 0x144 */ OPT_MIPMAP_SIZE, - /* 0x145 */ OPT_FAST_MIPMAPS, - /* 0x146 */ OPT_CMPR_DEFAULT, - /* 0x147 */ OPT_CUT, - /* 0x148 */ OPT_RAW, - /* 0x149 */ OPT_SECTIONS, + /* 0x108 */ OPT_CYBZ, + /* 0x109 */ OPT_YBZ, + /* 0x10a */ OPT_LZ, + /* 0x10b */ OPT_LZMA, + /* 0x10c */ OPT_CYLZ, + /* 0x10d */ OPT_YLZ, + /* 0x10e */ OPT_SH, + /* 0x10f */ OPT_BASH, + /* 0x110 */ OPT_JSON, + /* 0x111 */ OPT_PHP, + /* 0x112 */ OPT_MAKEDOC, + /* 0x113 */ OPT_VAR, + /* 0x114 */ OPT_ARRAY, + /* 0x115 */ OPT_AVAR, + /* 0x116 */ OPT_CASE, + /* 0x117 */ OPT_FMODES, + /* 0x118 */ OPT_INSTALL, + /* 0x119 */ OPT_ANALYZE, + /* 0x11a */ OPT_ANALYZE_MODE, + /* 0x11b */ OPT_OLD, + /* 0x11c */ OPT_STD, + /* 0x11d */ OPT_NEW, + /* 0x11e */ OPT_EXTRACT, + /* 0x11f */ OPT_ID_LIST, + /* 0x120 */ OPT_REFERENCE, + /* 0x121 */ OPT_NUMBER, + /* 0x122 */ OPT_REMOVE_SRC, + /* 0x123 */ OPT_IGNORE_SETUP, + /* 0x124 */ OPT_PURGE, + /* 0x125 */ OPT_ALIGN_U8, + /* 0x126 */ OPT_ALIGN_LTA, + /* 0x127 */ OPT_ALIGN_PACK, + /* 0x128 */ OPT_ALIGN_BRRES, + /* 0x129 */ OPT_ALIGN_BREFF, + /* 0x12a */ OPT_ALIGN_BREFT, + /* 0x12b */ OPT_ALIGN, + /* 0x12c */ OPT_ENCODE_ALL, + /* 0x12d */ OPT_ENCODE_IMG, + /* 0x12e */ OPT_NO_ENCODE, + /* 0x12f */ OPT_NO_RECURSE, + /* 0x130 */ OPT_AUTO_ADD, + /* 0x131 */ OPT_NO_ECHO, + /* 0x132 */ OPT_PT_DIR, + /* 0x133 */ OPT_RM_AIPARAM, + /* 0x134 */ OPT_U8, + /* 0x135 */ OPT_SZS, + /* 0x136 */ OPT_WU8, + /* 0x137 */ OPT_XWU8, + /* 0x138 */ OPT_WBZ, + /* 0x139 */ OPT_WLZ, + /* 0x13a */ OPT_LFL, + /* 0x13b */ OPT_PACK, + /* 0x13c */ OPT_BRRES, + /* 0x13d */ OPT_BREFF, + /* 0x13e */ OPT_BREFT, + /* 0x13f */ OPT_NO_COMPRESS, + /* 0x140 */ OPT_FAST, + /* 0x141 */ OPT_LINKS, + /* 0x142 */ OPT_BASEDIR, + /* 0x143 */ OPT_DECODE, + /* 0x144 */ OPT_MIPMAPS, + /* 0x145 */ OPT_NO_MIPMAPS, + /* 0x146 */ OPT_N_MIPMAPS, + /* 0x147 */ OPT_MAX_MIPMAPS, + /* 0x148 */ OPT_MIPMAP_SIZE, + /* 0x149 */ OPT_FAST_MIPMAPS, + /* 0x14a */ OPT_CMPR_DEFAULT, + /* 0x14b */ OPT_CUT, + /* 0x14c */ OPT_RAW, + /* 0x14d */ OPT_SECTIONS, + /* 0x14e */ 0,0,0,0, 0,0, }; // @@ -4016,6 +4066,7 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_WIDTH, OptionInfo + OPT_MAX_WIDTH, OptionInfo + OPT_NO_PAGER, + OptionInfo + OPT_ZERO, OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, @@ -4079,8 +4130,12 @@ static const InfoOption_t * option_tab_tool[] = OptionInfo + OPT_XYZ, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_NONE, // separator @@ -4430,8 +4485,12 @@ static const InfoOption_t * option_tab_cmd_LIST[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -4506,8 +4565,12 @@ static const InfoOption_t * option_tab_cmd_LIST_L[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -4582,8 +4645,12 @@ static const InfoOption_t * option_tab_cmd_LIST_LL[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -4658,8 +4725,12 @@ static const InfoOption_t * option_tab_cmd_LIST_LLL[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -4734,8 +4805,12 @@ static const InfoOption_t * option_tab_cmd_LIST_A[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -4810,8 +4885,12 @@ static const InfoOption_t * option_tab_cmd_LIST_LA[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -4893,8 +4972,12 @@ static const InfoOption_t * option_tab_cmd_ILIST[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -4966,8 +5049,12 @@ static const InfoOption_t * option_tab_cmd_ILIST_L[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -5039,8 +5126,12 @@ static const InfoOption_t * option_tab_cmd_ILIST_LL[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -5112,8 +5203,12 @@ static const InfoOption_t * option_tab_cmd_ILIST_A[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -5185,8 +5280,12 @@ static const InfoOption_t * option_tab_cmd_ILIST_LA[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -5263,8 +5362,12 @@ static const InfoOption_t * option_tab_cmd_MEMORY[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -5341,8 +5444,12 @@ static const InfoOption_t * option_tab_cmd_MEMORY_A[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -5409,8 +5516,12 @@ static const InfoOption_t * option_tab_cmd_DUMP[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -5481,8 +5592,12 @@ static const InfoOption_t * option_tab_cmd_SHA1[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -5675,8 +5790,12 @@ static const InfoOption_t * option_tab_cmd_DISTRIBUTION[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -5764,8 +5883,12 @@ static const InfoOption_t * option_tab_cmd_CHECK[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -5887,8 +6010,12 @@ static const InfoOption_t * option_tab_cmd_SLOTS[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -6052,8 +6179,12 @@ static const InfoOption_t * option_tab_cmd_NORMALIZE[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -6163,8 +6294,12 @@ static const InfoOption_t * option_tab_cmd_PATCH[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -6275,8 +6410,12 @@ static const InfoOption_t * option_tab_cmd_COPY[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -6388,8 +6527,12 @@ static const InfoOption_t * option_tab_cmd_DUPLICATE[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -6560,8 +6703,12 @@ static const InfoOption_t * option_tab_cmd_COMPRESS[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -6868,8 +7015,12 @@ static const InfoOption_t * option_tab_cmd_CREATE[] = OptionInfo + OPT_YAZ1, OptionInfo + OPT_BZ, OptionInfo + OPT_BZIP2, + OptionInfo + OPT_CYBZ, + OptionInfo + OPT_YBZ, OptionInfo + OPT_LZ, OptionInfo + OPT_LZMA, + OptionInfo + OPT_CYLZ, + OptionInfo + OPT_YLZ, OptionInfo + OPT_SZS, OptionInfo + OPT_WBZ, OptionInfo + OPT_WLZ, @@ -7875,7 +8026,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, - 80, + 85, option_tab_tool, 0 }, @@ -8409,7 +8560,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " characters are parsed, see https://szs.wiimm.de/doc/wildcards for" " details.", 0, - 58, + 62, option_tab_cmd_LIST, option_allowed_cmd_LIST }, @@ -8425,7 +8576,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " 'LIST --long'. Wildcards and pipe characters are parsed, see" " https://szs.wiimm.de/doc/wildcards for details.", 0, - 58, + 62, option_tab_cmd_LIST_L, option_allowed_cmd_LIST_L }, @@ -8441,7 +8592,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " short cuts for 'LIST --long --long'. Wildcards and pipe characters" " are parsed, see https://szs.wiimm.de/doc/wildcards for details.", 0, - 58, + 62, option_tab_cmd_LIST_LL, option_allowed_cmd_LIST_LL }, @@ -8458,7 +8609,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " and pipe characters are parsed, see" " https://szs.wiimm.de/doc/wildcards for details.", 0, - 58, + 62, option_tab_cmd_LIST_LLL, option_allowed_cmd_LIST_LLL }, @@ -8474,7 +8625,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " cuts for 'LIST --long --all --all'. Wildcards and pipe characters" " are parsed, see https://szs.wiimm.de/doc/wildcards for details.", 0, - 58, + 62, option_tab_cmd_LIST_A, option_allowed_cmd_LIST_A }, @@ -8491,7 +8642,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " and pipe characters are parsed, see" " https://szs.wiimm.de/doc/wildcards for details.", 0, - 58, + 62, option_tab_cmd_LIST_LA, option_allowed_cmd_LIST_LA }, @@ -8527,7 +8678,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " does it) and listed. Wildcards and pipe characters are parsed, see" " https://szs.wiimm.de/doc/wildcards for details.", 0, - 55, + 59, option_tab_cmd_ILIST, option_allowed_cmd_ILIST }, @@ -8542,7 +8693,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, - 55, + 59, option_tab_cmd_ILIST_L, option_allowed_cmd_ILIST_L }, @@ -8557,7 +8708,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, - 55, + 59, option_tab_cmd_ILIST_LL, option_allowed_cmd_ILIST_LL }, @@ -8572,7 +8723,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, - 55, + 59, option_tab_cmd_ILIST_A, option_allowed_cmd_ILIST_A }, @@ -8587,7 +8738,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, - 55, + 59, option_tab_cmd_ILIST_LA, option_allowed_cmd_ILIST_LA }, @@ -8603,7 +8754,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " directories) are also supported. Wildcards and pipe characters are" " parsed, see https://szs.wiimm.de/doc/wildcards for details.", 0, - 57, + 61, option_tab_cmd_MEMORY, option_allowed_cmd_MEMORY }, @@ -8618,7 +8769,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, - 57, + 61, option_tab_cmd_MEMORY_A, option_allowed_cmd_MEMORY_A }, @@ -8636,7 +8787,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " supported. Wildcards and pipe characters are parsed, see" " https://szs.wiimm.de/doc/wildcards for details.", 0, - 51, + 55, option_tab_cmd_DUMP, option_allowed_cmd_DUMP }, @@ -8653,7 +8804,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " characters are parsed, see https://szs.wiimm.de/doc/wildcards for" " details.", 0, - 59, + 63, option_tab_cmd_SHA1, option_allowed_cmd_SHA1 }, @@ -8755,7 +8906,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " See »welect DISTRIBUTION« for a new and alternative implementation" " of this.", 0, - 55, + 59, option_tab_cmd_DISTRIBUTION, option_allowed_cmd_DISTRIBUTION }, @@ -8792,7 +8943,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " or WBZ file, or an U8 like directory. Wildcards and pipe characters" " are parsed, see https://szs.wiimm.de/doc/wildcards for details.", 0, - 107, + 111, option_tab_cmd_CHECK, option_allowed_cmd_CHECK }, @@ -8811,7 +8962,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " arenas, the keyword ARENA is printed. Wildcards and pipe characters" " are parsed, see https://szs.wiimm.de/doc/wildcards for details.", 0, - 103, + 107, option_tab_cmd_SLOTS, option_allowed_cmd_SLOTS }, @@ -8873,7 +9024,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " https://szs.wiimm.de/doc/wildcards for details.\n" " 'wszst NORMALIZE' is the same as 'wszst PATCH --norm'.", 0, - 89, + 93, option_tab_cmd_NORMALIZE, option_allowed_cmd_NORMALIZE }, @@ -8892,7 +9043,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " and pipe characters are parsed, see" " https://szs.wiimm.de/doc/wildcards for details.", 0, - 91, + 95, option_tab_cmd_PATCH, option_allowed_cmd_PATCH }, @@ -8916,7 +9067,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " https://szs.wiimm.de/doc/wildcards for details. Patching is also" " possible and option --overwrite is set implicitly.", 0, - 91, + 95, option_tab_cmd_COPY, option_allowed_cmd_COPY }, @@ -8941,7 +9092,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " Use command 'wkmpt GAMEMODES' to list all variants and to check them" " beforehand.", 0, - 92, + 96, option_tab_cmd_DUPLICATE, option_allowed_cmd_DUPLICATE }, @@ -8977,7 +9128,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " destination is '%P/%N.szs'. Wildcards and pipe characters are" " parsed, see https://szs.wiimm.de/doc/wildcards for details.", 0, - 90, + 94, option_tab_cmd_COMPRESS, option_allowed_cmd_COMPRESS }, @@ -9028,7 +9179,7 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = " Wildcards and pipe characters are parsed, see" " https://szs.wiimm.de/doc/wildcards for details.", 0, - 113, + 117, option_tab_cmd_CREATE, option_allowed_cmd_CREATE }, diff --git a/project/src/ui/ui-wszst.h b/project/src/ui/ui-wszst.h index e8774b0..6200428 100644 --- a/project/src/ui/ui-wszst.h +++ b/project/src/ui/ui-wszst.h @@ -219,6 +219,7 @@ typedef enum enumOptions OPT_WIDTH, OPT_MAX_WIDTH, OPT_NO_PAGER, + OPT_ZERO, OPT_QUIET, OPT_VERBOSE, OPT_LOGGING, @@ -283,8 +284,12 @@ typedef enum enumOptions OPT_XYZ, OPT_BZ, OPT_BZIP2, + OPT_CYBZ, + OPT_YBZ, OPT_LZ, OPT_LZMA, + OPT_CYLZ, + OPT_YLZ, OPT_SH, OPT_BASH, OPT_JSON, @@ -299,7 +304,7 @@ typedef enum enumOptions OPT_NEW, OPT_EXTRACT, - OPT__N_TOTAL // == 238 + OPT__N_TOTAL // == 243 } enumOptions; @@ -1240,6 +1245,7 @@ typedef enum enumGetOpt GO_UPDATE = 'u', GO_VERBOSE = 'v', GO_TRANSFORM = 'x', + GO_ZERO = 'z', GO_XHELP = 0x80, GO_CONFIG, @@ -1377,8 +1383,12 @@ typedef enum enumGetOpt GO_XYZ, GO_BZ, GO_BZIP2, + GO_CYBZ, + GO_YBZ, GO_LZ, GO_LZMA, + GO_CYLZ, + GO_YLZ, GO_SH, GO_BASH, GO_JSON, @@ -1457,7 +1467,7 @@ typedef enum enumGetOpt //extern const struct option OptionLong[]; //extern u8 OptionUsed[OPT__N_TOTAL+1]; //extern const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE]; -//UIOPT_INDEX_SIZE := 0x14a = 330 +//UIOPT_INDEX_SIZE := 0x154 = 340 //extern const InfoCommand_t CommandInfo[CMD__N+1]; extern const InfoUI_t InfoUI_wszst; diff --git a/project/src/ui/ui.def b/project/src/ui/ui.def index eced772..a3b76f7 100644 --- a/project/src/ui/ui.def +++ b/project/src/ui/ui.def @@ -621,6 +621,14 @@ "", \ "Forbid the internal usage of a pager." ) +#:def_opt( "ZERO", "z|zero", "GM", \ + "", \ + "This option affects the exit status of the programs. Instead of an" \ + " exit status, the value 0 is returned for OK. This happens for" \ + " notices ({-v}, status<15), warnings ({-vv}, status<29), errors" \ + " ({-vvv}, status<115) and fatal errors ({-vvvv}). The exit status for" \ + " INTERRUPT (112) is never replaced." ) + #:def_opt( "QUIET", "q|quiet", "GM", \ "", \ "Be quiet and print only error messages. Multiple use is possible." \ @@ -1383,12 +1391,12 @@ #:def_opt( "CUP_ICONS", "cup-icons|cupicons", "CP", \ "image", \ - "Load given image, convert it to TPL.CMPR and add the result as" \ + "Load given image, convert it to TPLx.CMPR and add the result as" \ " sub-files 'button/timg/ct_icons.tpl' and as" \ " 'control/timg/ct_icons.tpl' to files 'Channel.szs', 'MenuMulti.szs'" \ " and 'MenuSingle.szs'. Both sub-files are always linked, so that" \ " storage space is saved. The usual size for each single icon is" \ - " 128x128. This can be changed by LPAR setting CUP-ICON-SIZE." ) + " 128x128." ) #:def_opt( "NO_COPY", "no-copy|nocopy", "C", \ "", \ @@ -1714,15 +1722,37 @@ "", \ "If creating a compressed file, create a BZIP2 compatible file." ) +#:def_opt( "CYBZ", "cybz", "G", \ + "", \ + "If creating a compressed file, force YBZ compression (YAZ0 file" \ + " header, but BZIP2 compression), but don't change the payload." ) + +#:def_opt( "YBZ", "ybz", "G", \ + "", \ + "If creating a compressed file, force archive format U8 with YBZ" \ + " compression (YAZ0 file header, but BZIP2 compression). Therefore it" \ + " is a short cut for {--u8 --cybz}." ) + #:def_opt( "LZ", "lz", "G", \ "", \ - "If creating a compressed file, force BZ compression (a YAZ0 like file" \ + "If creating a compressed file, force LZ compression (a YAZ0 like file" \ " format with LZMA compression)." ) #:def_opt( "LZMA", "lzma", "G", \ "", \ "If creating a compressed file, create a LZMA compatible file." ) +#:def_opt( "CYLZ", "cylz", "G", \ + "", \ + "If creating a compressed file, force YLZ compression (YAZ0 file" \ + " header, but LZMA compression), but don't change the payload." ) + +#:def_opt( "YLZ", "ylz", "G", \ + "", \ + "If creating a compressed file, force archive format U8 with YLZ" \ + " compression (YAZ0 file header, but LZMA compression). Therefore it" \ + " is a short cut for {--u8 --cylz}." ) + #:def_opt( "SH", "sh", "G", \ "", \ "Dump info using SH syntax. Use {--var name} as prefix." ) @@ -2023,8 +2053,11 @@ " find the best compression mode with testing the first N modes of 9," \ " 1, 8, 2, 5. @TRY2@ is used for normalizing. For non bz-compression," \ " @TRY*@ are the same as @BEST@.\n" \ + " Do not use compression level >6 for LZMA if the file is intended" \ + " for Mario Kart Wii, as too much memory is required for decoding.\n" \ + "\n" \ " Option {--norm} takes precedence over {--compr} and sets the" \ - " compression level to @TRY2@ (@BEST@).\n" \ + " compression level for bzip2 to @TRY2@ (@BEST@) and for LZMA to 6.\n" \ " For more modes and details type {wszst -C list}. To force colorized" \ " output type {wszst -C clist}." ) @@ -2723,6 +2756,14 @@ "", \ "" ) +#:def_cmd_opt( "LIST", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "LIST", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "LIST", "LZ", \ "", \ "" ) @@ -2731,6 +2772,14 @@ "", \ "" ) +#:def_cmd_opt( "LIST", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "LIST", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "LIST", "SZS", \ "", \ "" ) @@ -2956,6 +3005,14 @@ "", \ "" ) +#:def_cmd_opt( "LIST_L", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "LIST_L", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "LIST_L", "LZ", \ "", \ "" ) @@ -2964,6 +3021,14 @@ "", \ "" ) +#:def_cmd_opt( "LIST_L", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "LIST_L", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "LIST_L", "SZS", \ "", \ "" ) @@ -3189,6 +3254,14 @@ "", \ "" ) +#:def_cmd_opt( "LIST_LL", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "LIST_LL", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "LIST_LL", "LZ", \ "", \ "" ) @@ -3197,6 +3270,14 @@ "", \ "" ) +#:def_cmd_opt( "LIST_LL", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "LIST_LL", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "LIST_LL", "SZS", \ "", \ "" ) @@ -3422,6 +3503,14 @@ "", \ "" ) +#:def_cmd_opt( "LIST_LLL", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "LIST_LLL", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "LIST_LLL", "LZ", \ "", \ "" ) @@ -3430,6 +3519,14 @@ "", \ "" ) +#:def_cmd_opt( "LIST_LLL", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "LIST_LLL", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "LIST_LLL", "SZS", \ "", \ "" ) @@ -3655,6 +3752,14 @@ "", \ "" ) +#:def_cmd_opt( "LIST_A", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "LIST_A", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "LIST_A", "LZ", \ "", \ "" ) @@ -3663,6 +3768,14 @@ "", \ "" ) +#:def_cmd_opt( "LIST_A", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "LIST_A", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "LIST_A", "SZS", \ "", \ "" ) @@ -3888,6 +4001,14 @@ "", \ "" ) +#:def_cmd_opt( "LIST_LA", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "LIST_LA", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "LIST_LA", "LZ", \ "", \ "" ) @@ -3896,6 +4017,14 @@ "", \ "" ) +#:def_cmd_opt( "LIST_LA", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "LIST_LA", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "LIST_LA", "SZS", \ "", \ "" ) @@ -4132,6 +4261,14 @@ "", \ "" ) +#:def_cmd_opt( "ILIST", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "ILIST", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "ILIST", "LZ", \ "", \ "" ) @@ -4140,6 +4277,14 @@ "", \ "" ) +#:def_cmd_opt( "ILIST", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "ILIST", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "ILIST", "SZS", \ "", \ "" ) @@ -4353,6 +4498,14 @@ "", \ "" ) +#:def_cmd_opt( "ILIST_L", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "ILIST_L", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "ILIST_L", "LZ", \ "", \ "" ) @@ -4361,6 +4514,14 @@ "", \ "" ) +#:def_cmd_opt( "ILIST_L", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "ILIST_L", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "ILIST_L", "SZS", \ "", \ "" ) @@ -4574,6 +4735,14 @@ "", \ "" ) +#:def_cmd_opt( "ILIST_LL", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "ILIST_LL", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "ILIST_LL", "LZ", \ "", \ "" ) @@ -4582,6 +4751,14 @@ "", \ "" ) +#:def_cmd_opt( "ILIST_LL", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "ILIST_LL", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "ILIST_LL", "SZS", \ "", \ "" ) @@ -4795,6 +4972,14 @@ "", \ "" ) +#:def_cmd_opt( "ILIST_A", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "ILIST_A", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "ILIST_A", "LZ", \ "", \ "" ) @@ -4803,6 +4988,14 @@ "", \ "" ) +#:def_cmd_opt( "ILIST_A", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "ILIST_A", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "ILIST_A", "SZS", \ "", \ "" ) @@ -5016,6 +5209,14 @@ "", \ "" ) +#:def_cmd_opt( "ILIST_LA", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "ILIST_LA", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "ILIST_LA", "LZ", \ "", \ "" ) @@ -5024,6 +5225,14 @@ "", \ "" ) +#:def_cmd_opt( "ILIST_LA", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "ILIST_LA", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "ILIST_LA", "SZS", \ "", \ "" ) @@ -5245,6 +5454,14 @@ "", \ "" ) +#:def_cmd_opt( "MEMORY", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "MEMORY", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "MEMORY", "LZ", \ "", \ "" ) @@ -5253,6 +5470,14 @@ "", \ "" ) +#:def_cmd_opt( "MEMORY", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "MEMORY", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "MEMORY", "SZS", \ "", \ "" ) @@ -5474,6 +5699,14 @@ "", \ "" ) +#:def_cmd_opt( "MEMORY_A", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "MEMORY_A", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "MEMORY_A", "LZ", \ "", \ "" ) @@ -5482,6 +5715,14 @@ "", \ "" ) +#:def_cmd_opt( "MEMORY_A", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "MEMORY_A", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "MEMORY_A", "SZS", \ "", \ "" ) @@ -5674,6 +5915,14 @@ "", \ "" ) +#:def_cmd_opt( "DUMP", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "DUMP", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "DUMP", "LZ", \ "", \ "" ) @@ -5682,6 +5931,14 @@ "", \ "" ) +#:def_cmd_opt( "DUMP", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "DUMP", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "DUMP", "SZS", \ "", \ "" ) @@ -5891,6 +6148,14 @@ "", \ "" ) +#:def_cmd_opt( "SHA1", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "SHA1", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "SHA1", "LZ", \ "", \ "" ) @@ -5899,6 +6164,14 @@ "", \ "" ) +#:def_cmd_opt( "SHA1", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "SHA1", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "SHA1", "SZS", \ "", \ "" ) @@ -6395,6 +6668,14 @@ "", \ "" ) +#:def_cmd_opt( "DISTRIBUTION", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "DISTRIBUTION", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "DISTRIBUTION", "LZ", \ "", \ "" ) @@ -6403,6 +6684,14 @@ "", \ "" ) +#:def_cmd_opt( "DISTRIBUTION", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "DISTRIBUTION", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "DISTRIBUTION", "SZS", \ "", \ "" ) @@ -6663,6 +6952,14 @@ "", \ "" ) +#:def_cmd_opt( "CHECK", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "CHECK", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "CHECK", "LZ", \ "", \ "" ) @@ -6671,6 +6968,14 @@ "", \ "" ) +#:def_cmd_opt( "CHECK", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "CHECK", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "CHECK", "SZS", \ "", \ "" ) @@ -7072,6 +7377,14 @@ "", \ "" ) +#:def_cmd_opt( "SLOTS", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "SLOTS", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "SLOTS", "LZ", \ "", \ "" ) @@ -7080,6 +7393,14 @@ "", \ "" ) +#:def_cmd_opt( "SLOTS", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "SLOTS", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "SLOTS", "SZS", \ "", \ "" ) @@ -7556,6 +7877,14 @@ "", \ "" ) +#:def_cmd_opt( "NORMALIZE", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "NORMALIZE", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "NORMALIZE", "LZ", \ "", \ "" ) @@ -7564,6 +7893,14 @@ "", \ "" ) +#:def_cmd_opt( "NORMALIZE", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "NORMALIZE", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "NORMALIZE", "SZS", \ "", \ "" ) @@ -7916,6 +8253,14 @@ "", \ "" ) +#:def_cmd_opt( "PATCH", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "PATCH", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "PATCH", "LZ", \ "", \ "" ) @@ -7924,6 +8269,14 @@ "", \ "" ) +#:def_cmd_opt( "PATCH", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "PATCH", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "PATCH", "SZS", \ "", \ "" ) @@ -8280,6 +8633,14 @@ "", \ "" ) +#:def_cmd_opt( "COPY", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "COPY", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "COPY", "LZ", \ "", \ "" ) @@ -8288,6 +8649,14 @@ "", \ "" ) +#:def_cmd_opt( "COPY", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "COPY", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "COPY", "SZS", \ "", \ "" ) @@ -8648,6 +9017,14 @@ "", \ "" ) +#:def_cmd_opt( "DUPLICATE", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "DUPLICATE", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "DUPLICATE", "LZ", \ "", \ "" ) @@ -8656,6 +9033,14 @@ "", \ "" ) +#:def_cmd_opt( "DUPLICATE", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "DUPLICATE", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "DUPLICATE", "SZS", \ "", \ "" ) @@ -9205,6 +9590,14 @@ "", \ "" ) +#:def_cmd_opt( "COMPRESS", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "COMPRESS", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "COMPRESS", "LZ", \ "", \ "" ) @@ -9213,6 +9606,14 @@ "", \ "" ) +#:def_cmd_opt( "COMPRESS", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "COMPRESS", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "COMPRESS", "SZS", \ "", \ "" ) @@ -10222,6 +10623,14 @@ "", \ "" ) +#:def_cmd_opt( "CREATE", "CYBZ", \ + "", \ + "" ) + +#:def_cmd_opt( "CREATE", "YBZ", \ + "", \ + "" ) + #:def_cmd_opt( "CREATE", "LZ", \ "", \ "" ) @@ -10230,6 +10639,14 @@ "", \ "" ) +#:def_cmd_opt( "CREATE", "CYLZ", \ + "", \ + "" ) + +#:def_cmd_opt( "CREATE", "YLZ", \ + "", \ + "" ) + #:def_cmd_opt( "CREATE", "SZS", \ "", \ "" ) @@ -13496,6 +13913,14 @@ "", \ "Forbid the internal usage of a pager." ) +#:def_opt( "ZERO", "z|zero", "GM", \ + "", \ + "This option affects the exit status of the programs. Instead of an" \ + " exit status, the value 0 is returned for OK. This happens for" \ + " notices ({-v}, status<15), warnings ({-vv}, status<29), errors" \ + " ({-vvv}, status<115) and fatal errors ({-vvvv}). The exit status for" \ + " INTERRUPT (112) is never replaced." ) + #:def_opt( "QUIET", "q|quiet", "GM", \ "", \ "Be quiet and print only error messages. Multiple use is possible." \ @@ -14875,6 +15300,14 @@ "", \ "Forbid the internal usage of a pager." ) +#:def_opt( "ZERO", "z|zero", "GM", \ + "", \ + "This option affects the exit status of the programs. Instead of an" \ + " exit status, the value 0 is returned for OK. This happens for" \ + " notices ({-v}, status<15), warnings ({-vv}, status<29), errors" \ + " ({-vvv}, status<115) and fatal errors ({-vvvv}). The exit status for" \ + " INTERRUPT (112) is never replaced." ) + #:def_opt( "QUIET", "q|quiet", "GM", \ "", \ "Be quiet and print only error messages. Multiple use is possible." \ @@ -15191,8 +15624,7 @@ " separated list of slots (A), slot ranges (A:B) or keywords is" \ " expected. If preceded by a minus sign, the slots are disabled. The" \ " keywords are: @TRACKS@ (slots 0:0x1f), @ARENAS@ (0x20:0x29) and" \ - " @SPECIAL@ (0x36:0x3a). @CTCODE@ is an abbreviation for" \ - " @ARENAS,SPECIAL@.\n" \ + " @SPECIAL@ (0x36:0x3a). @CTCODE@ is a short cut for @ARENAS,SPECIAL@.\n" \ " The default is to enable slot ranges @0x00:0x1f@, @0x2a:0x35@," \ " @0x3b:0x41@ and @0x44:0xfe@." ) @@ -16347,6 +16779,14 @@ "", \ "Forbid the internal usage of a pager." ) +#:def_opt( "ZERO", "z|zero", "GM", \ + "", \ + "This option affects the exit status of the programs. Instead of an" \ + " exit status, the value 0 is returned for OK. This happens for" \ + " notices ({-v}, status<15), warnings ({-vv}, status<29), errors" \ + " ({-vvv}, status<115) and fatal errors ({-vvvv}). The exit status for" \ + " INTERRUPT (112) is never replaced." ) + #:def_opt( "QUIET", "q|quiet", "GM", \ "", \ "Be quiet and print only error messages. Multiple use is possible." \ @@ -17469,6 +17909,14 @@ "", \ "Forbid the internal usage of a pager." ) +#:def_opt( "ZERO", "z|zero", "GM", \ + "", \ + "This option affects the exit status of the programs. Instead of an" \ + " exit status, the value 0 is returned for OK. This happens for" \ + " notices ({-v}, status<15), warnings ({-vv}, status<29), errors" \ + " ({-vvv}, status<115) and fatal errors ({-vvvv}). The exit status for" \ + " INTERRUPT (112) is never replaced." ) + #:def_opt( "QUIET", "q|quiet", "GM", \ "", \ "Be quiet and print only error messages. Multiple use is possible." \ @@ -20145,6 +20593,14 @@ "", \ "Forbid the internal usage of a pager." ) +#:def_opt( "ZERO", "z|zero", "GM", \ + "", \ + "This option affects the exit status of the programs. Instead of an" \ + " exit status, the value 0 is returned for OK. This happens for" \ + " notices ({-v}, status<15), warnings ({-vv}, status<29), errors" \ + " ({-vvv}, status<115) and fatal errors ({-vvvv}). The exit status for" \ + " INTERRUPT (112) is never replaced." ) + #:def_opt( "QUIET", "q|quiet", "GM", \ "", \ "Be quiet and print only error messages. Multiple use is possible." \ @@ -22364,6 +22820,14 @@ "", \ "Forbid the internal usage of a pager." ) +#:def_opt( "ZERO", "z|zero", "GM", \ + "", \ + "This option affects the exit status of the programs. Instead of an" \ + " exit status, the value 0 is returned for OK. This happens for" \ + " notices ({-v}, status<15), warnings ({-vv}, status<29), errors" \ + " ({-vvv}, status<115) and fatal errors ({-vvvv}). The exit status for" \ + " INTERRUPT (112) is never replaced." ) + #:def_opt( "QUIET", "q|quiet", "GM", \ "", \ "Be quiet and print only error messages. Multiple use is possible." \ @@ -24148,6 +24612,14 @@ "", \ "Forbid the internal usage of a pager." ) +#:def_opt( "ZERO", "z|zero", "GM", \ + "", \ + "This option affects the exit status of the programs. Instead of an" \ + " exit status, the value 0 is returned for OK. This happens for" \ + " notices ({-v}, status<15), warnings ({-vv}, status<29), errors" \ + " ({-vvv}, status<115) and fatal errors ({-vvvv}). The exit status for" \ + " INTERRUPT (112) is never replaced." ) + #:def_opt( "QUIET", "q|quiet", "GM", \ "", \ "Be quiet and print only error messages. Multiple use is possible." \ @@ -25515,6 +25987,14 @@ "", \ "Forbid the internal usage of a pager." ) +#:def_opt( "ZERO", "z|zero", "GM", \ + "", \ + "This option affects the exit status of the programs. Instead of an" \ + " exit status, the value 0 is returned for OK. This happens for" \ + " notices ({-v}, status<15), warnings ({-vv}, status<29), errors" \ + " ({-vvv}, status<115) and fatal errors ({-vvvv}). The exit status for" \ + " INTERRUPT (112) is never replaced." ) + #:def_opt( "QUIET", "q|quiet", "GM", \ "", \ "Be quiet and print only error messages. Multiple use is possible." \ @@ -26220,6 +26700,14 @@ "", \ "Forbid the internal usage of a pager." ) +#:def_opt( "ZERO", "z|zero", "GM", \ + "", \ + "This option affects the exit status of the programs. Instead of an" \ + " exit status, the value 0 is returned for OK. This happens for" \ + " notices ({-v}, status<15), warnings ({-vv}, status<29), errors" \ + " ({-vvv}, status<115) and fatal errors ({-vvvv}). The exit status for" \ + " INTERRUPT (112) is never replaced." ) + #:def_opt( "QUIET", "q|quiet", "GM", \ "", \ "Be quiet and print only error messages. Multiple use is possible." \ diff --git a/project/src/wbmgt.c b/project/src/wbmgt.c index e0161b1..6efb5bd 100644 --- a/project/src/wbmgt.c +++ b/project/src/wbmgt.c @@ -81,7 +81,7 @@ static void help_exit ( bool xmode ) PrintHelpCmd(&InfoUI_wbmgt,stdout,0,0,"HELP",0,URI_HOME); ClosePager(); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -106,7 +106,7 @@ static void version_exit() else fputs( TITLE "\n", stdout ); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -140,7 +140,7 @@ static void hint_exit ( enumError stat ) fprintf(stderr, "-> Type '%s -h' or '%s help' (pipe it to a pager like 'less') for more help.\n\n", ProgInfo.progname, ProgInfo.progname ); - exit(stat); + ExitFixed(stat); } // @@ -785,6 +785,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) case GO_WIDTH: err += ScanOptWidth(optarg); break; case GO_MAX_WIDTH: err += ScanOptMaxWidth(optarg); break; case GO_NO_PAGER: opt_no_pager = true; break; + case GO_ZERO: opt_zero++; break; case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break; case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break; case GO_LOGGING: logging++; break; @@ -991,7 +992,7 @@ static enumError CheckCommand ( int argc, char ** argv ) if (SIGINT_level) err = ERROR0(ERR_INTERRUPT,"Program interrupted by user."); ClosePager(); - return err; + return FixExitStatus(err); } // diff --git a/project/src/wctct.c b/project/src/wctct.c index 754d58b..7fc9c47 100644 --- a/project/src/wctct.c +++ b/project/src/wctct.c @@ -72,7 +72,7 @@ static void help_exit ( bool xmode ) PrintHelpCmd(&InfoUI_wctct,stdout,0,0,"HELP",0,URI_HOME); ClosePager(); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -97,7 +97,7 @@ static void version_exit() else fputs( TITLE "\n", stdout ); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -131,7 +131,7 @@ static void hint_exit ( enumError stat ) fprintf(stderr, "-> Type '%s -h' or '%s help' (pipe it to a pager like 'less') for more help.\n\n", ProgInfo.progname, ProgInfo.progname ); - exit(stat); + ExitFixed(stat); } // @@ -766,6 +766,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) case GO_WIDTH: err += ScanOptWidth(optarg); break; case GO_MAX_WIDTH: err += ScanOptMaxWidth(optarg); break; case GO_NO_PAGER: opt_no_pager = true; break; + case GO_ZERO: opt_zero++; break; case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break; case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break; case GO_LOGGING: logging++; break; @@ -1003,7 +1004,7 @@ static enumError CheckCommand ( int argc, char ** argv ) if (SIGINT_level) err = ERROR0(ERR_INTERRUPT,"Program interrupted by user."); ClosePager(); - return err; + return FixExitStatus(err); } // diff --git a/project/src/wimgt.c b/project/src/wimgt.c index 5071f5c..8874221 100644 --- a/project/src/wimgt.c +++ b/project/src/wimgt.c @@ -77,7 +77,7 @@ static void help_exit ( bool xmode ) PrintHelpCmd(&InfoUI_wimgt,stdout,0,0,"HELP",0,URI_HOME); ClosePager(); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -102,7 +102,7 @@ static void version_exit() else fputs( TITLE "\n", stdout ); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -136,7 +136,7 @@ static void hint_exit ( enumError stat ) fprintf(stderr, "-> Type '%s -h' or '%s help' (pipe it to a pager like 'less') for more help.\n\n", ProgInfo.progname, ProgInfo.progname ); - exit(stat); + ExitFixed(stat); } /////////////////////////////////////////////////////////////////////////////// @@ -169,7 +169,7 @@ static void syntax_error ( ccp func, ccp file, uint line ) } else PrintErrorFile(func,file,line,0,0,ERR_SYNTAX,"Syntax Error!\n"); - exit(ERR_SYNTAX); + ExitFixed(ERR_SYNTAX); } // @@ -621,6 +621,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) case GO_WIDTH: err += ScanOptWidth(optarg); break; case GO_MAX_WIDTH: err += ScanOptMaxWidth(optarg); break; case GO_NO_PAGER: opt_no_pager = true; break; + case GO_ZERO: opt_zero++; break; case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break; case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break; case GO_LOGGING: logging++; break; @@ -813,7 +814,7 @@ static enumError CheckCommand ( int argc, char ** argv ) if (SIGINT_level) err = ERROR0(ERR_INTERRUPT,"Program interrupted by user."); ClosePager(); - return err; + return FixExitStatus(err); } // diff --git a/project/src/wkclt.c b/project/src/wkclt.c index a70c2f9..ee7c4fd 100644 --- a/project/src/wkclt.c +++ b/project/src/wkclt.c @@ -73,7 +73,7 @@ static void help_exit ( bool xmode ) PrintHelpCmd(&InfoUI_wkclt,stdout,0,0,"HELP",0,URI_HOME); ClosePager(); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -98,7 +98,7 @@ static void version_exit() else fputs( TITLE "\n", stdout ); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -132,7 +132,7 @@ static void hint_exit ( enumError stat ) fprintf(stderr, "-> Type '%s -h' or '%s help' (pipe it to a pager like 'less') for more help.\n\n", ProgInfo.progname, ProgInfo.progname ); - exit(stat); + ExitFixed(stat); } /////////////////////////////////////////////////////////////////////////////// @@ -165,7 +165,7 @@ static void syntax_error ( ccp func, ccp file, uint line ) } else PrintErrorFile(func,file,line,0,0,ERR_SYNTAX,"Syntax Error!\n"); - exit(ERR_SYNTAX); + ExitFixed(ERR_SYNTAX); } // @@ -1315,6 +1315,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) case GO_WIDTH: err += ScanOptWidth(optarg); break; case GO_MAX_WIDTH: err += ScanOptMaxWidth(optarg); break; case GO_NO_PAGER: opt_no_pager = true; break; + case GO_ZERO: opt_zero++; break; case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break; case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break; case GO_LOGGING: logging++; break; @@ -1545,7 +1546,7 @@ static enumError CheckCommand ( int argc, char ** argv ) if (SIGINT_level) err = ERROR0(ERR_INTERRUPT,"Program interrupted by user."); ClosePager(); - return err; + return FixExitStatus(err); } // diff --git a/project/src/wkmpt.c b/project/src/wkmpt.c index c91cda6..0ae30bf 100644 --- a/project/src/wkmpt.c +++ b/project/src/wkmpt.c @@ -72,7 +72,7 @@ static void help_exit ( bool xmode ) PrintHelpCmd(&InfoUI_wkmpt,stdout,0,0,"HELP",0,URI_HOME); ClosePager(); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -97,7 +97,7 @@ static void version_exit() else fputs( TITLE "\n", stdout ); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -131,7 +131,7 @@ static void hint_exit ( enumError stat ) fprintf(stderr, "-> Type '%s -h' or '%s help' (pipe it to a pager like 'less') for more help.\n\n", ProgInfo.progname, ProgInfo.progname ); - exit(stat); + ExitFixed(stat); } // @@ -1603,6 +1603,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) case GO_WIDTH: err += ScanOptWidth(optarg); break; case GO_MAX_WIDTH: err += ScanOptMaxWidth(optarg); break; case GO_NO_PAGER: opt_no_pager = true; break; + case GO_ZERO: opt_zero++; break; case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break; case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break; case GO_LOGGING: logging++; break; @@ -1850,7 +1851,7 @@ static enumError CheckCommand ( int argc, char ** argv ) if (SIGINT_level) err = ERROR0(ERR_INTERRUPT,"Program interrupted by user."); ClosePager(); - return err; + return FixExitStatus(err); } // diff --git a/project/src/wlect.c b/project/src/wlect.c index 257f24d..6191272 100644 --- a/project/src/wlect.c +++ b/project/src/wlect.c @@ -75,7 +75,7 @@ static void help_exit ( bool xmode ) PrintHelpCmd(&InfoUI_wlect,stdout,0,0,"HELP",0,URI_HOME); ClosePager(); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -100,7 +100,7 @@ static void version_exit() else fputs( TITLE "\n", stdout ); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -134,7 +134,7 @@ static void hint_exit ( enumError stat ) fprintf(stderr, "-> Type '%s -h' or '%s help' (pipe it to a pager like 'less') for more help.\n\n", ProgInfo.progname, ProgInfo.progname ); - exit(stat); + ExitFixed(stat); } // @@ -1021,7 +1021,7 @@ static void help_create ( enumError exit_code ) ProgInfo.progname, ProgInfo.progname ); ClosePager(); - exit(exit_code); + ExitFixed(exit_code); } /////////////////////////////////////////////////////////////////////////////// @@ -2031,7 +2031,7 @@ static void help_distrib ( enumError exit_code ) ,GetLecodeInfoLEREG(LEREG_KOR) ); ClosePager(); - exit(exit_code); + ExitFixed(exit_code); } /////////////////////////////////////////////////////////////////////////////// @@ -2751,6 +2751,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) case GO_WIDTH: err += ScanOptWidth(optarg); break; case GO_MAX_WIDTH: err += ScanOptMaxWidth(optarg); break; case GO_NO_PAGER: opt_no_pager = true; break; + case GO_ZERO: opt_zero++; break; case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break; case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break; case GO_LOGGING: logging++; break; @@ -3018,7 +3019,7 @@ static enumError CheckCommand ( int argc, char ** argv ) if (SIGINT_level) err = ERROR0(ERR_INTERRUPT,"Program interrupted by user."); ClosePager(); - return err; + return FixExitStatus(err); } // diff --git a/project/src/wmdlt.c b/project/src/wmdlt.c index a39b068..f7c3169 100644 --- a/project/src/wmdlt.c +++ b/project/src/wmdlt.c @@ -66,7 +66,7 @@ static void help_exit ( bool xmode ) PrintHelpCmd(&InfoUI_wmdlt,stdout,0,0,"HELP",0,URI_HOME); ClosePager(); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -91,7 +91,7 @@ static void version_exit() else fputs( TITLE "\n", stdout ); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -125,7 +125,7 @@ static void hint_exit ( enumError stat ) fprintf(stderr, "-> Type '%s -h' or '%s help' (pipe it to a pager like 'less') for more help.\n\n", ProgInfo.progname, ProgInfo.progname ); - exit(stat); + ExitFixed(stat); } // @@ -558,6 +558,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) case GO_WIDTH: err += ScanOptWidth(optarg); break; case GO_MAX_WIDTH: err += ScanOptMaxWidth(optarg); break; case GO_NO_PAGER: opt_no_pager = true; break; + case GO_ZERO: opt_zero++; break; case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break; case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break; case GO_LOGGING: logging++; break; @@ -765,7 +766,7 @@ static enumError CheckCommand ( int argc, char ** argv ) if (SIGINT_level) err = ERROR0(ERR_INTERRUPT,"Program interrupted by user."); ClosePager(); - return err; + return FixExitStatus(err); } // diff --git a/project/src/wpatt.c b/project/src/wpatt.c index c4424d8..ea79d5c 100644 --- a/project/src/wpatt.c +++ b/project/src/wpatt.c @@ -66,7 +66,7 @@ static void help_exit ( bool xmode ) PrintHelpCmd(&InfoUI_wpatt,stdout,0,0,"HELP",0,URI_HOME); ClosePager(); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -91,7 +91,7 @@ static void version_exit() else fputs( TITLE "\n", stdout ); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -125,7 +125,7 @@ static void hint_exit ( enumError stat ) fprintf(stderr, "-> Type '%s -h' or '%s help' (pipe it to a pager like 'less') for more help.\n\n", ProgInfo.progname, ProgInfo.progname ); - exit(stat); + ExitFixed(stat); } // @@ -358,6 +358,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) case GO_WIDTH: err += ScanOptWidth(optarg); break; case GO_MAX_WIDTH: err += ScanOptMaxWidth(optarg); break; case GO_NO_PAGER: opt_no_pager = true; break; + case GO_ZERO: opt_zero++; break; case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break; case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break; case GO_LOGGING: logging++; break; @@ -546,7 +547,7 @@ static enumError CheckCommand ( int argc, char ** argv ) if (SIGINT_level) err = ERROR0(ERR_INTERRUPT,"Program interrupted by user."); ClosePager(); - return err; + return FixExitStatus(err); } // diff --git a/project/src/wstrt.c b/project/src/wstrt.c index 800275a..cc13aa0 100644 --- a/project/src/wstrt.c +++ b/project/src/wstrt.c @@ -78,7 +78,7 @@ static void help_exit ( bool xmode ) PrintHelpCmd(&InfoUI_wstrt,stdout,0,0,"HELP",0,URI_HOME); ClosePager(); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -103,7 +103,7 @@ static void version_exit() else fputs( TITLE "\n", stdout ); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -137,7 +137,7 @@ static void hint_exit ( enumError stat ) fprintf(stderr, "-> Type '%s -h' or '%s help' (pipe it to a pager like 'less') for more help.\n\n", ProgInfo.progname, ProgInfo.progname ); - exit(stat); + ExitFixed(stat); } // @@ -1605,6 +1605,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) case GO_WIDTH: err += ScanOptWidth(optarg); break; case GO_MAX_WIDTH: err += ScanOptMaxWidth(optarg); break; case GO_NO_PAGER: opt_no_pager = true; break; + case GO_ZERO: opt_zero++; break; case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break; case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break; case GO_LOGGING: logging++; break; @@ -1909,7 +1910,7 @@ static enumError CheckCommand ( int argc, char ** argv ) if (SIGINT_level) err = ERROR0(ERR_INTERRUPT,"Program interrupted by user."); ClosePager(); - return err; + return FixExitStatus(err); } // diff --git a/project/src/wszst.c b/project/src/wszst.c index e6bdee2..9d2d965 100644 --- a/project/src/wszst.c +++ b/project/src/wszst.c @@ -99,7 +99,7 @@ static void help_exit ( bool xmode ) PrintHelpCmd(&InfoUI_wszst,stdout,0,0,"HELP",0,URI_HOME); ClosePager(); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -107,7 +107,10 @@ static void help_exit ( bool xmode ) static void list_compressions_exit() { SetupColors(); - const int fw = GetTermWidth(80,40) - 1; + int fw = GetTermWidth(80,40) - 1; + if ( fw > 120 ) + fw = 120; + PrintColoredLines(stdout,colout,0,fw,0,0, "\n{setup|%s}\n\n{caption|Compression modes:}\n" "\n" @@ -116,7 +119,7 @@ static void list_compressions_exit() " Each methods and level can be address by a numerical mode" " and some by a name.\n" "\n" - "In general, 2 compression formats are supported: YAZ0/YAZ1 and BZ (bzip2).\n" + "In general, 3 compression formats are supported: YAZ0/YAZ1, BZ (bzip2) and LZ (LZMA).\n" "\n" "The following list shows all modes." " A mode can by selected by option {opt|--compr=param} or {opt|-C param}.\n" @@ -131,9 +134,13 @@ static void list_compressions_exit() "\t{hl| 1\tFAST}\t|" "Fastest available standard compression.\n" "\t{hl|1-8\t}\t|" - "Standard levels between {par|FAST} and {par|BEST}.\n" + "Standard levels between {par|FAST} and {par|BEST}." + " Do not use compression level >6 for {cmd|LZMA} if the file is intended" + " for Mario Kart Wii, as too much memory is required for decoding.\n" "\t{hl| 9\tBEST}\t|" - "Best and {par|default} standard compression.\n" + "Best compression level.\n" + "\t{hl|\tDEFAULT}\t|" + "Default compression: {par|6} for {cmd|LZMA} and {par|9} for all other methods.\n" "\n" "\t\t{hl|TRY2 - TRY5}\t|" "Because of many repeated data, the best {cmd|BZ} compression mode varies." @@ -177,7 +184,7 @@ static void list_compressions_exit() ,3*fw,ThinLine300_3 ); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -202,7 +209,7 @@ static void version_exit() else fputs( TITLE "\n", stdout ); - exit(ERR_OK); + ExitFixed(ERR_OK); } /////////////////////////////////////////////////////////////////////////////// @@ -236,7 +243,7 @@ static void hint_exit ( enumError stat ) fprintf(stderr, "-> Type '%s -h' or '%s help' (pipe it to a pager like 'less') for more help.\n\n", ProgInfo.progname, ProgInfo.progname ); - exit(stat); + ExitFixed(stat); } /////////////////////////////////////////////////////////////////////////////// @@ -626,6 +633,8 @@ static const sizeof_info_t sizeof_info_szs_list[] = SIZEOF_INFO_ENTRY(raw_data_t) SIZEOF_INFO_ENTRY(wbz_header_t) SIZEOF_INFO_ENTRY(wlz_header_t) + SIZEOF_INFO_ENTRY(ybz_header_t) + SIZEOF_INFO_ENTRY(ylz_header_t) SIZEOF_INFO_ENTRY(analyze_param_t) SIZEOF_INFO_ENTRY(analyze_szs_t) SIZEOF_INFO_ENTRY(file_type_t) @@ -672,7 +681,7 @@ static enumError cmd_test_options() printf(" align-breff: %16x = %12d\n",opt_align_breff,opt_align_breff); printf(" align-breft: %16x = %12d\n",opt_align_breft,opt_align_breft); printf(" tiny: %16x = %12d\n",opt_tiny,opt_tiny); - printf(" compression: mode %2d, level %d\n",opt_compr_mode,opt_compr); + printf(" compression: mode %2d, level %d ==> %d\n",opt_compr_mode,opt_compr,GetComprByFF(fform_compr,0)); printf(" recurse: %16x = %12d\n",opt_recurse,opt_recurse); printf(" cmpr-default: valid=%d, RGB565: %04x %04x, RGB: %06x %06x\n", opt_cmpr_valid, @@ -1443,7 +1452,7 @@ static enumError cmd_code() { ERROR0(ERR_NOT_IMPLEMENTED, "Command _RECODE not implemented in this version!\n"); - exit(ERR_NOT_IMPLEMENTED); + ExitFixed(ERR_NOT_IMPLEMENTED); } #endif @@ -5758,7 +5767,7 @@ static enumError cmd_yazdump() { ERROR0(ERR_NOT_IMPLEMENTED, "Command VEHICLE not implemented in this version!\n"); - exit(ERR_NOT_IMPLEMENTED); + ExitFixed(ERR_NOT_IMPLEMENTED); } #endif @@ -5798,6 +5807,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) case GO_WIDTH: err += ScanOptWidth(optarg); break; case GO_MAX_WIDTH: err += ScanOptMaxWidth(optarg); break; case GO_NO_PAGER: opt_no_pager = true; break; + case GO_ZERO: opt_zero++; break; case GO_QUIET: verbose = verbose > -1 ? -1 : verbose - 1; break; case GO_VERBOSE: verbose = verbose < 0 ? 0 : verbose + 1; break; case GO_LOGGING: logging++; break; @@ -5926,8 +5936,10 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) case GO_XYZ: SetCompressionFF(FF_INVALID,FF_XYZ); break; case GO_BZ: SetCompressionFF(FF_INVALID,FF_BZ); break; case GO_BZIP2: SetCompressionFF(FF_INVALID,FF_BZIP2); break; + case GO_CYBZ: SetCompressionFF(FF_INVALID,FF_YBZ); break; case GO_LZ: SetCompressionFF(FF_INVALID,FF_LZ); break; case GO_LZMA: SetCompressionFF(FF_INVALID,FF_LZMA); break; + case GO_CYLZ: SetCompressionFF(FF_INVALID,FF_YLZ); break; case GO_U8: SetCompressionFF(FF_U8,FF_INVALID); break; case GO_SZS: SetCompressionFF(FF_U8,FF_YAZ0); break; @@ -5935,6 +5947,8 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) case GO_XWU8: SetCompressionFF(FF_WU8,FF_XYZ); break; case GO_WBZ: SetCompressionFF(FF_WU8,FF_BZ); break; case GO_WLZ: SetCompressionFF(FF_WU8,FF_LZ); break; + case GO_YBZ: SetCompressionFF(FF_U8,FF_YBZ); break; + case GO_YLZ: SetCompressionFF(FF_U8,FF_YLZ); break; //case GO_LTA: SetCompressionFF(FF_LTA,FF_INVALID); break; case GO_LFL: SetCompressionFF(FF_LFL,FF_INVALID); break; //case GO_ARC: SetCompressionFF(FF_RARC,FF_INVALID); break; @@ -6575,7 +6589,7 @@ int main ( int argc, char ** argv ) DASSERT(w); const int err = w->func(argc,argv); ClosePager(); - return err; + return FixExitStatus(err); } // diff --git a/project/src/wtest.c b/project/src/wtest.c index 3cc7003..cec42c7 100644 --- a/project/src/wtest.c +++ b/project/src/wtest.c @@ -4214,7 +4214,7 @@ static enumError test_pf_expand ( int argc, char ** argv ) " -i : Set mode to INSERT (default).\n" " -a : Set mode to APPEND.\n" "\n"); - exit(1); + ExitFixed(1); } @@ -4269,7 +4269,7 @@ static enumError test_coded_version ( int argc, char ** argv ) if ( argc <= 1 ) { printf( "\nSyntax: VERSIONCODE | VC [number]...\n\n"); - exit(1); + ExitFixed(1); } int fw = 11; @@ -4318,7 +4318,7 @@ static enumError test_key_list ( int argc, char ** argv ) if ( argc <= 1 ) { printf( "\nSyntax: KEY-LIST | KL [options] [a..b] [args]...\n\n"); - exit(1); + ExitFixed(1); } static const KeywordTab_t keytab[] = @@ -4807,7 +4807,6 @@ be32n((u32*)head,(u32*)head,sizeof(head)/4); be32n((u32*)node,(u32*)node,sizeof(node)/4); while ( node->data_size ) { -xBINGO; if (!strcasecmp(node->file_name,path)) { res.data = (u8*)node + node->data_offset; @@ -5283,7 +5282,7 @@ void help_exit() #endif ClosePager(); - exit(ERR_SYNTAX); + ExitFixed(ERR_SYNTAX); }; // diff --git a/project/templates/HISTORY.txt b/project/templates/HISTORY.txt index 0060f87..a40f435 100644 --- a/project/templates/HISTORY.txt +++ b/project/templates/HISTORY.txt @@ -424,7 +424,7 @@ szs v2.20a r8279 - 2020-10-03 and self linked item routes with 1 point. - wszst CHECK: Hints about unusual TEX version 1 are suppressed now if option --verbose is not set. - - Fewer program crashes when reading faulty SZS files. + - Fewer program crashes when reading faulty SZS files. szs v2.21a r8311 - 2020-11-30 @@ -436,7 +436,7 @@ szs v2.21a r8311 - 2020-11-30 - Support of LE-CODE build 25: - Speedometer support for LPAR-files. - New option for wlect: --speedometer=off/on - - Again fewer program crashes when reading faulty SZS files. + - Again fewer program crashes when reading faulty SZS files. - BMG supports little endian files now, but only encoding UTF-8 was checked. I need example files to verify other encodings (CP-1252,UTF-16,SHIFT-JIS). - KCL/OBJ: Faces with any number of vertices are accepted now. Before there @@ -672,7 +672,7 @@ szs v2.31a r8725 - 2022-12-16 - File format LE-DEF: Instructions STANDARD-BATTLE-ARENAS and/or STANDARD-VERSUS-TRACKS will be executed automatically if no other battle arena or no other versus track are defined. - - wlect DISTRIB: + - wlect DISTRIB: - Bug fix: Random slots are ignored now if adding missed tracks to cups. - Fixed import of LE-CODE binaries without standard tracks. - New instructions: CUP-ICONS, CUP-INFO (both are experimental). @@ -688,7 +688,7 @@ szs v2.32a r8742 - 2022-12-25 - wlect DISTRIB: - Instructions cup-icons= and cup-info=: - By default, 5 characters are used for the name part. The source can - now be specified as an optional storage indicator. + now be specified as an optional storage indicator. - Fixed some issues. - Instruction distrib=: Improved track list. - New instruction report=: Analyse the distribution and print a report. @@ -775,17 +775,17 @@ szs v2.36a r8834 - 2023-07-22 - The 114 commands of the following list including their short cuts accept wildcards as source now: - wszst: ANALYZE AUTOADD BINARY BMG BRSUB CAT CHECK COMPRESS COPY CREATE - DECOMPRESS DISTRIBUTION DUMP ENCODE EXTRACT FEATURES FILETYPE - GHOST ILIST INFO INSTALL IS-ARENA IS-TEXTURE KCL KMP LEX MEMORY - MINIMAP NAME-REF NORMALIZE PATCH SHA1 SLOTS SPLIT STGI TEXT - UPDATE XALL XCOMMON XDECODE XEXPORT YAZDUMP + DECOMPRESS DISTRIBUTION DUMP ENCODE EXTRACT FEATURES FILETYPE + GHOST ILIST INFO INSTALL IS-ARENA IS-TEXTURE KCL KMP LEX MEMORY + MINIMAP NAME-REF NORMALIZE PATCH SHA1 SLOTS SPLIT STGI TEXT + UPDATE XALL XCOMMON XDECODE XEXPORT YAZDUMP - wbmgt: CAT DECODE ENCODE FILETYPE LIST MIX SECTIONS PATCH SLOTS - wctct: CAT CREATE DECODE DUMP FILETYPE PATCH - wimgt: CONVERT COPY DECODE ENCODE FILETYPE LIST - wkclt: ANALYZE BLOW CAT CFF CHECK COPY DECODE DUMP ENCODE FILETYPE - FLAGS LIST SHA1 TRIANGLES + FLAGS LIST SHA1 TRIANGLES - wkmpt: CAT CHECK DECODE DRAW ENCODE FILETYPE GAMEMODES GOBJ KTPT ROUTES - STGI + STGI - wlect: CAT DECODE DUMP ENCODE FILETYPE LPAR PATCH TIMESTAMP - wmdlt: CAT DECODE ENCODE FILETYPE GEOMETRY STRINGS XTEST - wpatt: CAT DECODE ENCODE FILETYPE @@ -827,9 +827,9 @@ szs v2.38a r8889 - 2023-09-22 - Fixed a bug that caused distribution files to be read incorrectly. - New compression formats: LZ: Read and create LZ compressed files. LZ is like YAZ0 and BZ, but - with LZMA compression. + with LZMA compression. LZMA: Read and create LZMA compressed files. Tracks compressed with LZMA - are approx 40% smaller than the YAZ0 compressed tracks. + are approx 40% smaller than the YAZ0 compressed tracks. XZ: Detect XZ compressed files. - Formats BZIP2, LZMA and XZ are compatible with external tools like 'bzip2', 'lzma' and 'xz'. @@ -919,6 +919,14 @@ szs v2.41a r8953 - 2024-02-17 - New LPAR setting: SLOT-04X. +szs v2.41b r8971 - 2024-02-23 + - Cygwin only: Fixed a silent stack overflow if reordering the tracks. + - New image format TPLx: Technically, TPLx is a TPL file with 2 extensions. + The main feature is the conversion of width and height so that images with + a height >65535 lines can be used. Cup icons are an example of this. + - New virtual image type CUPICON: Alias for TPLx.CMPR. + + @@MODULE(last-history.txt)@@ diff --git a/project/templates/MILESTONES.txt b/project/templates/MILESTONES.txt index 91b85c1..a47a8be 100644 --- a/project/templates/MILESTONES.txt +++ b/project/templates/MILESTONES.txt @@ -166,3 +166,6 @@ szs v2.34a szs v2.41a - LE-CODE supports 8192 tracks and 2048 versus cups now. +szs v2.41b + - Support of file format TPLx. + diff --git a/project/templates/module/last-history.txt b/project/templates/module/last-history.txt index 5b4d3a0..f9b0eeb 100644 --- a/project/templates/module/last-history.txt +++ b/project/templates/module/last-history.txt @@ -1,10 +1,18 @@ szs v@@VERSION@@ r@@REV-NEXT@@ - @@@@-@@-@@ - - Cygwin only: Fixed a silent stack overflow if reordering the tracks. - - New image format TPLx: Technically, TPLx is a TPL file with 2 extensions. - The main feature is the conversion of width and height so that images with - a height >65535 lines can be used. Cup icons are an example of this. - - New virtual image type CUPICON: Alias for TPLx.CMPR. + - Updated prefix database: Added CTGPS, EX, EXTR, GK2, GK3, GK7, HGSS, HWTA, + SBSPLCP, SKK, TGO. Removed LPC. + - Bug fix for option --lex-purge: The tools occasionally crashed when + attempting to delete an existing but unneeded LEX file. + - Added support for compression methods YBZ and YLZ (Yaz0 header, but + alternative compressions bzip2 or LZMA). Use one of the new options --cybz, + --ybz, --cylz or --ylz to select the new methods. LE-CODE supports YLZ. + - New option --zero (-z): This option affects the exit status of the + programs. Instead of an exit status, the value 0 is returned for OK. This + happens for notices (-v, status<15), warnings (-vv, status<29), errors + (-vvv, status<115) and fatal errors (-vvvv). The exit status for INTERRUPT + (112) is never replaced. + - Information only: wszst now knows 243 different options. ~ - KMP:STGI support for up to 255 laps. ~ - Option --kmp=MODES supports now settings 1LAP .. 15LAPS. diff --git a/project/text-files/lpar.inc/lpar-sect-param-cr.inc b/project/text-files/lpar.inc/lpar-sect-param-cr.inc index f6d757b..3c5b556 100644 --- a/project/text-files/lpar.inc/lpar-sect-param-cr.inc +++ b/project/text-files/lpar.inc/lpar-sect-param-cr.inc @@ -151,6 +151,10 @@ MAX-ONLINE-SEC = %3u%s # 64x64 (saves 75%% space) for >800 cups and more. The image with the cup # icons, which is loaded with the --cup-icons option, for example, must have # the appropriate size. +# +# As of build 41, LE-CODE supports the TPLx file format. If the cup icons are +# in this file format and a valid signature is found, then CUP-ICON-SIZE will +# be ignored. CUP-ICON-SIZE = %u @@ -159,6 +163,9 @@ CUP-ICON-SIZE = %u # format (same number of characters). However, this is only relevant if a slot # ≥0x1000 (≥4096) is used. The distribution creator must ensure that the files # in ./Race/Course/ and directories in ./Race/Common/ are in the same format. +# +# As of build 41, LE-CODE scans the ./Race/Course/ directory and finds out +# which format is used. This setting is then only used as a fallback. SLOT-04X = %u diff --git a/project/text-files/setup.inc/setup-order-cr.inc b/project/text-files/setup.inc/setup-order-cr.inc index 45c96fc..a6b1152 100644 --- a/project/text-files/setup.inc/setup-order-cr.inc +++ b/project/text-files/setup.inc/setup-order-cr.inc @@ -4,8 +4,8 @@ [order] # This list contains all extracted files in the order of the original archive. -# If creating archives (but not U8) this list will be used to sort the found -# files. For archives with directory support (all but not PACK) it is very +# If creating archives (but neither U8 nor LTA) this list will be used to sort +# the found files. For archives with directory support (all except PACK) it is # important, that the directories are listed before the files that resides in # the directories. # |
