https://www.ioccc.org/2019/lynn/index.html
Copyright © 1984-2025 by Landon Curt Noll: Some Rights Reserved
CC-BY-SA 4.0
https://www.ioccc.org/2019/lynn/index.html
Copyright © 1984-2025 by Landon Curt Noll: Some Rights Reserved
CC-BY-SA 4.0
| %.c: %.hs | |
| ( ../prog < $<; cat ../prog.c) > $@ || (rm $@; false) |
| #define x 0 /**/ | |
| //! Usage: | |
| //! (prog < file.hs; cat prog.c) > file.c | |
| //! $CC -o file file.c && ./file | |
| #include <stdio.h> | |
| typedef unsigned int u32; | |
| enum { L = 1 << 26 }; | |
| // ## Virtual machine | |
| typedef enum OutputMode { | |
| OutputMode_Numeric, | |
| OutputMode_Byte, | |
| } OutputMode; | |
| typedef struct Runtime { | |
| u32 *mem; | |
| u32 *ip; | |
| u32 sp; | |
| OutputMode o_mode; | |
| } Runtime; | |
| static Runtime vm; | |
| // ## Memory operation for virtual machine | |
| /// Get argument for the instruction | |
| static u32 w(u32 idx) { | |
| return vm.mem[vm.ip[idx] + 1]; | |
| } | |
| /// Indirect load | |
| static u32 U(u32 idx) { | |
| return vm.mem[w(idx) + 1]; | |
| } | |
| /// Push an application | |
| /// Lowercase el | |
| static u32 l(u32 arg0, u32 arg1) { | |
| vm.mem[vm.sp++] = arg0; | |
| vm.mem[vm.sp++] = arg1; | |
| return vm.sp - 2; | |
| } | |
| /// Load and apply and push | |
| static u32 G(u32 arg0, u32 arg1) { | |
| return l(w(arg0), w(arg1)); | |
| } | |
| // ## Instructions (Operations) for virtual machine | |
| /// 0th: load, or, apply, primitive | |
| /// prim_val is in 18, 19, 20, 21, 22, 23. | |
| static void O(u32 prim_val) { | |
| u32 *D = vm.mem + vm.ip[2]; | |
| *D = w(2); | |
| *++D = l(w(1), prim_val - 8); | |
| vm.ip += 2; | |
| } | |
| /// 1st | |
| static void b(void) { | |
| u32 *D = vm.mem + vm.ip[2]; | |
| *D = w(2); | |
| *++D = vm.ip[1]; | |
| vm.ip += 2; | |
| } | |
| /// 2nd | |
| static void f(void) { | |
| u32 *D = vm.mem + vm.ip[3]; | |
| *D = G(1, 3); | |
| *++D = G(2, 3); | |
| vm.ip += 3; | |
| } | |
| /// 3rd | |
| static void u(void) { | |
| u32 *D = vm.mem + vm.ip[3]; | |
| *D = G(1, 3); | |
| *++D = w(2); | |
| vm.ip += 3; | |
| } | |
| /// 4th | |
| static void s(void) { | |
| u32 *D = vm.mem + vm.ip[3]; | |
| *D = G(2, 3); | |
| *++D = w(1); | |
| vm.ip += 3; | |
| } | |
| /// 5th | |
| static void c(void) { | |
| u32 *D = vm.mem + vm.ip[3]; | |
| *D = w(1); | |
| *++D = G(2, 3); | |
| vm.ip += 3; | |
| } | |
| /// 6th | |
| static void a(void) { | |
| u32 *D = vm.mem + vm.ip[2]; | |
| *D = w(2); | |
| *++D = w(1); | |
| vm.ip += 2; | |
| } | |
| /// 7th: read a byte | |
| static void t(void) { | |
| u32 *D = vm.mem + vm.ip[1]; | |
| *D = 9; | |
| int S; | |
| // Doing either pushing empty list or concatenation of something? | |
| *++D = (S = getchar()) < 0 ? 8 : l(l(17, l(1, S)), l(7, 0)); | |
| vm.ip += 1; | |
| } | |
| /// 8th: (:)? | |
| static void e(void) { | |
| u32 *D = vm.mem + vm.ip[2]; | |
| *D = 9; | |
| *++D = w(1); | |
| vm.ip += 2; | |
| } | |
| /// 9th | |
| static void d(void) { | |
| u32 *D = vm.mem + vm.ip[2]; | |
| *D = w(1); | |
| *++D = w(2); | |
| vm.ip += 2; | |
| } | |
| /// 10th: (<=) | |
| static void _(void) { | |
| u32 *D = vm.mem + vm.ip[2]; | |
| *D = 9; | |
| *++D = U(1) > U(2) ? l(8, 9) : 8; | |
| vm.ip += 2; | |
| } | |
| /// 11th: multvm.iple | |
| static void p(void) { | |
| u32 *D = vm.mem + vm.ip[2]; | |
| *D = 1; | |
| *++D = U(1) * U(2); | |
| vm.ip += 2; | |
| } | |
| /// 12th: add | |
| static void r(void) { | |
| u32 *D = vm.mem + vm.ip[2]; | |
| *D = 1; | |
| *++D = U(1) + U(2); | |
| vm.ip += 2; | |
| } | |
| /// 13th: subtract | |
| static void o(void) { | |
| u32 *D = vm.mem + vm.ip[2]; | |
| *D = 1; | |
| *++D = U(1) - U(2); | |
| vm.ip += 2; | |
| } | |
| /// 14th: divide | |
| static void g(void) { | |
| u32 *D = vm.mem + vm.ip[2]; | |
| *D = 1; | |
| *++D = U(1) / U(2); | |
| vm.ip += 2; | |
| } | |
| /// 15th: output: (:) | |
| static void R(void) { | |
| u32 *D = vm.mem + vm.ip[2]; | |
| *D = l(w(2), printf(vm.o_mode == OutputMode_Byte ? "%c" : "%u,", U(1))); | |
| *++D = l(23, 9); | |
| vm.ip += 2; | |
| } | |
| /// 16th | |
| static void A(void) { | |
| u32 *D = vm.mem + vm.ip[1]; | |
| *D = w(1); | |
| *++D = vm.ip[1]; | |
| vm.ip += 1; | |
| } | |
| /// 17th | |
| static void m(void) { | |
| u32 *D = vm.mem + vm.ip[4]; | |
| *D = G(4, 1); | |
| *++D = w(2); | |
| vm.ip += 4; | |
| } | |
| /// ==0: halt. | |
| static int Runtime_step(void) { | |
| static void (*cmds[])() = {O, b, f, u, s, c, a, t, e, | |
| d, _, p, r, o, g, R, A, m}; | |
| u32 op_val = *vm.ip; | |
| if (op_val == 0) { | |
| return 0; | |
| } else if (op_val < 18) { | |
| cmds[op_val](); | |
| } else if (op_val < 24) { | |
| O(op_val); | |
| } else { | |
| *--vm.ip = vm.mem[op_val]; | |
| } | |
| return 1; | |
| } | |
| /// In base85. | |
| static char literal_y[] = "33Yb59@&iBFApt;[[h3V19\\3<:4cJ!U 2eT18pC,Qqik4J:sh?HUXMrR(-l0R\"!eKZcI!@E(@B,C/*!aogn5LbK/e=2CmReb+6,]kD!iOC9DEOC9Dc1EV6976c?&s)Be;P;E^tl2eUYkg*#Yf:6^d[Mg_P;VGCr823^L_<X+j2,%nD20Ls lmpi&I(*hV=+p aTO`r.b1<i[/R\\t1,KBt)\\%;\\@27H>^#d6B!tb-on27d%i_OS5(W5eV-=M14kYO);Fe7k!N41<iX*T,kHW,&)_l&L)'0:Jj%j7^h+JU /9pZn&Td:&T%'TE<7>LW%m/R\\rON3-=G]^akjT778YCJ7B8e-5E#RX R=Ig8#/pDdAI;=a[ ISbp't+ZLJ;lUO71C)b5[Y)qTWmFJ)G1ehmS<.`n3RnE IG+G_A`CE=?hZU)bScgt7R3GNs+V(HQLL_R)n4;]#cUR.p>5!^4T3pQg^o//WLATCE18mSUme[Q<53e:')Q_%<L$1lKOnFD(R3%*jj85VW+#8Wt*Ud,1D7AKcdh<9r%igC$2</HD7X$K_0Rr/>L.*D2%;[0B+#8UANT1.tSd/^@L$&a6^g@jYNMC7O<rPWO5AfA;C'9WnLn9E:0d:R\\hAZ^m=/09d.R$Jd%:Gp hB-g4&N!VO)$;iED1:F`^`UrnWCSZ!L$Tdma!_hn7H0F$^MT(-Ln9F_Ljfp9*h8Er!<.g.h_7@b0l03?a+]`=dIoY>WCKOk&#[9FCQ#WFoga(tK<[PG6@5k2KY\\ oW':M;e//kd\"[l,_V?UlZ,m(Hh?O81mhM!G18 ]7m?X7e^[7EZYj[;kR,YXD\\X,!k6.HF8Z(V^^nBYea^NIL:]lG0(/\\Ik<m`>jPam;F-A,(tVN+bG@<L'J 1D8dE*hN87:TsccSKVE7KP+k8^5qZIkJG_fH_$MS--5(!*St/1:b+g8(" | |
| "/*"; | |
| /// Commands to indicate what encoding to use for each retrieved bytes or something from literal_y | |
| static char literal_n[] = { | |
| [0] = ' ', [1] = '$', [2] = '6', [3] = 'I', [4] = '7', | |
| [5] = 'H', [6] = '#', [7] = 'v', [8] = ' ', [9] = 'J', | |
| [10] = 'w', [11] = '\t', [12] = '{', [13] = '\v', [14] = '}', | |
| [15] = '\f', [16] = ';', [17] = '\t', [18] = ' ', [19] = '\v', | |
| [20] = ' ', [21] = '}', [22] = '\f', [23] = ' ', [24] = '}', | |
| [25] = '\f', [26] = ' ', [27] = '\f', [28] = ' ', [29] = '\f', | |
| [30] = ' ', [31] = '\v', [32] = ' ', [33] = '}', [34] = '\f', | |
| [35] = ' ', [36] = '\v', [37] = '\t', [38] = ' ', [39] = '}', | |
| [40] = ' ', [41] = '}', [42] = '\t', [43] = ' ', [44] = ';', | |
| [45] = '\f', [46] = ' ', [47] = '}', [48] = '\f', [49] = ' ', | |
| [50] = '\f', [51] = '\t', [52] = ' ', [53] = '{', [54] = '\f', | |
| [55] = '\v', [56] = ' ', [57] = '}', [58] = ' ', [59] = '\f', | |
| [60] = '\t', [61] = ' ', [62] = '}', [63] = '\f', [64] = ' ', | |
| [65] = ';', [66] = '\t', [67] = ' ', [68] = '\f', [69] = '\f', | |
| [70] = ' ', [71] = '\t', [72] = '\t', [73] = ' ', [74] = '{', | |
| [75] = '\f', [76] = ' ', [77] = '{', [78] = '\v', [79] = '\v', | |
| [80] = ' ', [81] = '\t', [82] = ' ', [83] = '\v', [84] = '\v', | |
| [85] = '\v', [86] = ' ', [87] = '\f', [88] = ' ', [89] = '}', | |
| [90] = '\v', [91] = '\v', [92] = ' ', [93] = '}', [94] = ' ', | |
| [95] = '}', [96] = '\v', [97] = '\v', [98] = ' ', [99] = '\f', | |
| [100] = '\v', [101] = '\v', [102] = ' ', [103] = '\f', [104] = '\v', | |
| [105] = '\v', [106] = ' ', [107] = ';', [108] = '\v', [109] = '\v', | |
| [110] = ' ', [111] = '\v', [112] = ' ', [113] = ';', [114] = '\v', | |
| [115] = '\v', [116] = ' ', [117] = '\t', [118] = '\v', [119] = '\v', | |
| [120] = ' ', [121] = '}', [122] = '\v', [123] = '\v', [124] = ' ', | |
| [125] = '\v', [126] = '\t', [127] = ' ', [128] = ';', [129] = '\v', | |
| [130] = '\v', [131] = ' ', [132] = '\t', [133] = '\v', [134] = '\v', | |
| [135] = ' ', [136] = '}', [137] = '\v', [138] = '\v', [139] = ' ', | |
| [140] = '}', [141] = '\v', [142] = '\v', [143] = ' ', [144] = ';', | |
| [145] = '\f', [146] = ' ', [147] = '}', [148] = '\t', [149] = ' ', | |
| [150] = '}', [151] = '\t', [152] = ' ', [153] = '}', [154] = '\v', | |
| [155] = '\v', [156] = ' ', [157] = ';', [158] = '\f', [159] = ' ', | |
| [160] = '}', [161] = '\t', [162] = ' ', [163] = '\f', [164] = '\f', | |
| [165] = ' ', [166] = '\v', [167] = '\t', [168] = ' ', [169] = '\f', | |
| [170] = '\f', [171] = ' ', [172] = '\t', [173] = '\v', [174] = '\v', | |
| [175] = ' ', [176] = '}', [177] = '\v', [178] = '\v', [179] = ' ', | |
| [180] = ';', [181] = '\v', [182] = '\v', [183] = ' ', [184] = '\t', | |
| [185] = '\v', [186] = '\v', [187] = ' ', [188] = '}', [189] = '\v', | |
| [190] = '\v', [191] = ' ', [192] = '{', [193] = '\t', [194] = ' ', | |
| [195] = '\f', [196] = '\f', [197] = ' ', [198] = '\f', [199] = '\v', | |
| [200] = '\v', [201] = ' ', [202] = '\t', [203] = '\v', [204] = '\v', | |
| [205] = ' ', [206] = '}', [207] = '\t', [208] = ' ', [209] = ';', | |
| [210] = '\f', [211] = ' ', [212] = '}', [213] = '\f', [214] = ' ', | |
| [215] = '}', [216] = '\v', [217] = '\v', [218] = ' ', [219] = '\t', | |
| [220] = '\v', [221] = '\v', [222] = ' ', [223] = ';', [224] = ' ', | |
| [225] = '\f', [226] = '\f', [227] = ' ', [228] = ';', [229] = '\f', | |
| [230] = ' ', [231] = '}', [232] = '\f', [233] = ' ', [234] = '\t', | |
| [235] = '\f', [236] = ' ', [237] = '}', [238] = '\f', [239] = ' ', | |
| [240] = ';', [241] = '\v', [242] = '\v', [243] = ' ', [244] = '\f', | |
| [245] = '\v', [246] = '\v', [247] = ' ', [248] = '{', [249] = '\t', | |
| [250] = ' ', [251] = '}', [252] = '\f', [253] = ' ', [254] = '\f', | |
| [255] = '\v', [256] = '\v', [257] = ' ', [258] = '\v', [259] = ' ', | |
| [260] = '{', [261] = '\f', [262] = '\v', [263] = ' ', [264] = '}', | |
| [265] = '\v', [266] = '\v', [267] = ' ', [268] = ';', [269] = '\v', | |
| [270] = '\v', [271] = ' ', [272] = '}', [273] = '\f', [274] = ' ', | |
| [275] = '{', [276] = '\f', [277] = '\v', [278] = ' ', [279] = ';', | |
| [280] = '\t', [281] = ' ', [282] = '{', [283] = '\f', [284] = '\v', | |
| [285] = ' ', [286] = '\f', [287] = '\v', [288] = '\v', [289] = ' ', | |
| [290] = ';', [291] = '\t', [292] = ' ', [293] = '{', [294] = '\f', | |
| [295] = '\v', [296] = ' ', [297] = '\f', [298] = '\t', [299] = ' ', | |
| [300] = '}', [301] = '\f', [302] = ' ', [303] = '\v', [304] = ' ', | |
| [305] = ';', [306] = '\v', [307] = '\v', [308] = ' ', [309] = ';', | |
| [310] = '\v', [311] = '\v', [312] = ' ', [313] = ';', [314] = '\t', | |
| [315] = '\v', [316] = ' ', [317] = '{', [318] = '\v', [319] = '\v', | |
| [320] = ' ', [321] = '{', [322] = '\f', [323] = '\v', [324] = ' ', | |
| [325] = '}', [326] = '\f', [327] = '\v', [328] = ' ', [329] = '}', | |
| [330] = '\v', [331] = '\v', [332] = ' ', [333] = '\t', [334] = '\f', | |
| [335] = '\v', [336] = ' ', [337] = ';', [338] = '\v', [339] = '\v', | |
| [340] = ' ', [341] = '\t', [342] = '\v', [343] = '\v', [344] = ' ', | |
| [345] = ';', [346] = '\v', [347] = '\v', [348] = ' ', [349] = '{', | |
| [350] = '\f', [351] = '\v', [352] = ' ', [353] = '\t', [354] = '\v', | |
| [355] = '\v', [356] = ' ', [357] = '}', [358] = ' ', [359] = '\f', | |
| [360] = '\v', [361] = '\v', [362] = ' ', [363] = '\f', [364] = '\f', | |
| [365] = '\v', [366] = ' ', [367] = '{', [368] = '\v', [369] = '}', | |
| [370] = ' ', [371] = '\f', [372] = '\v', [373] = '\v', [374] = ' ', | |
| [375] = '}', [376] = '\v', [377] = '\v', [378] = ' ', [379] = '\v', | |
| [380] = '\v', [381] = '}', [382] = ' ', [383] = '}', [384] = '\f', | |
| [385] = ' ', [386] = '\f', [387] = '\f', [388] = ' ', [389] = '{', | |
| [390] = '\t', [391] = '\v', [392] = ' ', [393] = ';', [394] = '\f', | |
| [395] = ' ', [396] = '\f', [397] = '\f', [398] = ' ', [399] = '\v', | |
| [400] = ' ', [401] = '{', [402] = '\t', [403] = ' ', [404] = '\f', | |
| [405] = '\f', [406] = ' ', [407] = '\t', [408] = '\f', [409] = ' ', | |
| [410] = ';', [411] = '\f', [412] = ' ', [413] = '}', [414] = ' ', | |
| [415] = '{', [416] = '\t', [417] = ' ', [418] = '\t', [419] = '\f', | |
| [420] = ' ', [421] = '}', [422] = ' ', [423] = '}', [424] = '\f', | |
| [425] = ' ', [426] = '\v', [427] = '\f', [428] = '}', [429] = ' ', | |
| [430] = '}', [431] = '\t', [432] = ' ', [433] = '\f', [434] = ' ', | |
| [435] = '\f', [436] = ' ', [437] = '\f', [438] = '\f', [439] = ' ', | |
| [440] = ';', [441] = '\v', [442] = '}', [443] = ' ', [444] = ';', | |
| [445] = '\t', [446] = ' ', [447] = '\f', [448] = '\t', [449] = ' ', | |
| [450] = '}', [451] = '\f', [452] = ' ', [453] = '}', [454] = '\t', | |
| [455] = ' ', [456] = '}', [457] = '\t', [458] = '\v', [459] = ' ', | |
| [460] = '\f', [461] = '\v', [462] = '}', [463] = ' ', [464] = '}', | |
| [465] = '\f', [466] = '}', [467] = ' ', [468] = '}', [469] = '\f', | |
| [470] = ' ', [471] = '\v', [472] = '\f', [473] = '}', [474] = ' ', | |
| [475] = '\f', [476] = '\t', [477] = ' ', [478] = '}', [479] = '\t', | |
| [480] = ' ', [481] = '{', [482] = '\f', [483] = '}', [484] = ' ', | |
| [485] = ' ', [486] = ':', [487] = '!', [488] = '#', [489] = '$', | |
| [490] = '%', [491] = '&', [492] = '*', [493] = '+', [494] = '.', | |
| [495] = '/', [496] = '<', [497] = '=', [498] = '>', [499] = '?', | |
| [500] = '@', [501] = '\\', [502] = '^', [503] = '|', [504] = '-', | |
| [505] = '~', [506] = '\t', [507] = '\t', [508] = '\t', [509] = ' ', | |
| [510] = '\v', [511] = '\v', [512] = '\v', [513] = ' ', [514] = '\f', | |
| [515] = '\t', [516] = ' ', [517] = ' ', [518] = ' ', [519] = '\n', | |
| [520] = '\t', [521] = '\v', [522] = '\f', [523] = '}', [524] = ' ', | |
| [525] = '{', [526] = '\v', [527] = '\v', [528] = ' ', [529] = '{', | |
| [530] = '\v', [531] = '\v', [532] = ' ', [533] = '\f', [534] = '\f', | |
| [535] = ' ', [536] = '}', [537] = '\f', [538] = ' ', [539] = ' ', | |
| [540] = '-', [541] = '-', [542] = '\t', [543] = '\t', [544] = '\t', | |
| [545] = ' ', [546] = '\f', [547] = '\t', [548] = ' ', [549] = ';', | |
| [550] = '\f', [551] = '}', [552] = ' ', [553] = ';', [554] = '\f', | |
| [555] = ' ', [556] = '\v', [557] = '\t', [558] = ' ', [559] = ';', | |
| [560] = '\f', [561] = ' ', [562] = '}', [563] = '\f', [564] = ' ', | |
| [565] = '\v', [566] = '\t', [567] = ' ', [568] = '}', [569] = '\f', | |
| [570] = ' ', [571] = '\f', [572] = '\t', [573] = ' ', [574] = '\v', | |
| [575] = '\f', [576] = '\v', [577] = ' ', [578] = ';', [579] = '\v', | |
| [580] = '\v', [581] = ' ', [582] = '{', [583] = '\f', [584] = '\v', | |
| [585] = ' ', [586] = '{', [587] = '\f', [588] = '\v', [589] = ' ', | |
| [590] = '\v', [591] = '\f', [592] = '\v', [593] = ' ', [594] = '}', | |
| [595] = ' ', [596] = '}', [597] = '\v', [598] = '\v', [599] = ' ', | |
| [600] = '\f', [601] = '\v', [602] = '\v', [603] = ' ', [604] = '}', | |
| [605] = '\f', [606] = ' ', [607] = '{', [608] = '\f', [609] = '\v', | |
| [610] = ' ', [611] = '\v', [612] = '\f', [613] = '}', [614] = ' ', | |
| [615] = '\t', [616] = '\v', [617] = '\v', [618] = ' ', [619] = ';', | |
| [620] = '\v', [621] = '\v', [622] = ' ', [623] = '\t', [624] = '\t', | |
| [625] = ' ', [626] = '}', [627] = '\v', [628] = '\t', [629] = ' ', | |
| [630] = '\t', [631] = '\v', [632] = '\v', [633] = ' ', [634] = '\v', | |
| [635] = '\v', [636] = '\v', [637] = ' ', [638] = ' ', [639] = '\\', | |
| [640] = '\'', [641] = '"', [642] = '\t', [643] = '\t', [644] = '\f', | |
| [645] = '}', [646] = ' ', [647] = '{', [648] = '\f', [649] = '\v', | |
| [650] = ' ', [651] = ';', [652] = '\f', [653] = ' ', [654] = '\t', | |
| [655] = '\t', [656] = ' ', [657] = '}', [658] = '\v', [659] = '{', | |
| [660] = '\f', [661] = ' ', [662] = '\v', [663] = '\v', [664] = '\v', | |
| [665] = ' ', [666] = '}', [667] = '\t', [668] = '}', [669] = ' ', | |
| [670] = '}', [671] = '\v', [672] = '\v', [673] = ' ', [674] = '\v', | |
| [675] = '\v', [676] = '\v', [677] = ' ', [678] = '\t', [679] = '\f', | |
| [680] = '}', [681] = ' ', [682] = ';', [683] = '\v', [684] = '\f', | |
| [685] = ' ', [686] = '\v', [687] = '\f', [688] = '}', [689] = ' ', | |
| [690] = '}', [691] = '\f', [692] = '}', [693] = ' ', [694] = '\f', | |
| [695] = '\f', [696] = '\v', [697] = ' ', [698] = '\f', [699] = '\v', | |
| [700] = '\f', [701] = ' ', [702] = '}', [703] = '\f', [704] = '}', | |
| [705] = ' ', [706] = '}', [707] = '\f', [708] = ' ', [709] = ' ', | |
| [710] = ':', [711] = '\t', [712] = '\f', [713] = '\v', [714] = '}', | |
| [715] = ' ', [716] = '\v', [717] = '\t', [718] = ' ', [719] = '\v', | |
| [720] = '\v', [721] = '\v', [722] = ' ', [723] = '}', [724] = '\f', | |
| [725] = ' ', [726] = '}', [727] = '\t', [728] = ' ', [729] = '}', | |
| [730] = '\f', [731] = ' ', [732] = '\v', [733] = '\v', [734] = '\t', | |
| [735] = ' ', [736] = '\f', [737] = '\v', [738] = '\t', [739] = ' ', | |
| [740] = '}', [741] = '\f', [742] = '\v', [743] = ' ', [744] = '\v', | |
| [745] = '\f', [746] = '\v', [747] = ' ', [748] = '{', [749] = '\f', | |
| [750] = '\t', [751] = ' ', [752] = '\f', [753] = '\t', [754] = '{', | |
| [755] = '\f', [756] = ' ', [757] = '\v', [758] = '\f', [759] = '\v', | |
| [760] = ' ', [761] = ';', [762] = '\f', [763] = '\f', [764] = ' ', | |
| [765] = '\v', [766] = '\v', [767] = '\t', [768] = ' ', [769] = '\f', | |
| [770] = '\v', [771] = '\f', [772] = ' ', [773] = '\t', [774] = '\v', | |
| [775] = '\t', [776] = ' ', [777] = ' ', [778] = 'o', [779] = 'f', | |
| [780] = '\t', [781] = '\v', [782] = '\v', [783] = '\v', [784] = ' ', | |
| [785] = ';', [786] = '\t', [787] = '\v', [788] = ' ', [789] = '\f', | |
| [790] = '\t', [791] = '\v', [792] = ' ', [793] = '}', [794] = ' ', | |
| [795] = '\f', [796] = '\f', [797] = ' ', [798] = '{', [799] = '\t', | |
| [800] = '\v', [801] = ' ', [802] = '}', [803] = '\t', [804] = '\v', | |
| [805] = ' ', [806] = '}', [807] = '\t', [808] = '\v', [809] = ' ', | |
| [810] = '\f', [811] = '\f', [812] = ' ', [813] = '\f', [814] = '\t', | |
| [815] = ' ', [816] = '}', [817] = '\f', [818] = '\v', [819] = ' ', | |
| [820] = '\f', [821] = '\v', [822] = '}', [823] = ' ', [824] = '{', | |
| [825] = '\f', [826] = '\v', [827] = ' ', [828] = '\t', [829] = '\v', | |
| [830] = '\f', [831] = ' ', [832] = '\f', [833] = '\f', [834] = ' ', | |
| [835] = '}', [836] = '\f', [837] = ' ', [838] = '\f', [839] = '\v', | |
| [840] = '\v', [841] = ' ', [842] = ';', [843] = '\t', [844] = '\v', | |
| [845] = ' ', [846] = '\t', [847] = '\v', [848] = '\v', [849] = ' ', | |
| [850] = '\v', [851] = '\t', [852] = ' ', [853] = '{', [854] = '\f', | |
| [855] = '\t', [856] = ' ', [857] = '{', [858] = '\f', [859] = '\t', | |
| [860] = ' ', [861] = '}', [862] = '\f', [863] = ' ', [864] = '}', | |
| [865] = '\t', [866] = ' ', [867] = ';', [868] = '\v', [869] = '}', | |
| [870] = ' ', [871] = '\t', [872] = '\v', [873] = '}', [874] = ' ', | |
| [875] = '{', [876] = '\v', [877] = '}', [878] = ' ', [879] = ';', | |
| [880] = '\f', [881] = ' ', [882] = '}', [883] = '\f', [884] = ' ', | |
| [885] = '\f', [886] = '\f', [887] = ' ', [888] = '}', [889] = '\t', | |
| [890] = '\f', [891] = ' ', [892] = '\t', [893] = '\v', [894] = '\f', | |
| [895] = ' ', [896] = '}', [897] = '\v', [898] = '}', [899] = ' ', | |
| [900] = '\f', [901] = '\v', [902] = '}', [903] = ' ', [904] = '\f', | |
| [905] = '\v', [906] = '\f', [907] = ' ', [908] = '\f', [909] = '\f', | |
| [910] = ' ', [911] = '\v', [912] = '\v', [913] = '\v', [914] = ' ', | |
| [915] = ';', [916] = '\t', [917] = ' ', [918] = '}', [919] = '\f', | |
| [920] = '}', [921] = ' ', [922] = '\t', [923] = '\v', [924] = '\v', | |
| [925] = ' ', [926] = '\t', [927] = '\f', [928] = '\v', [929] = ' ', | |
| [930] = '{', [931] = '\t', [932] = ' ', [933] = ' ', [934] = '-', | |
| [935] = '>', [936] = '\t', [937] = '\v', [938] = '\v', [939] = '\v', | |
| [940] = ' ', [941] = '\f', [942] = '\t', [943] = '{', [944] = '\f', | |
| [945] = ' ', [946] = '\t', [947] = '\t', [948] = '{', [949] = '\f', | |
| [950] = ' ', [951] = '\t', [952] = '\v', [953] = '\f', [954] = ' ', | |
| [955] = '\v', [956] = '\f', [957] = '\v', [958] = ' ', [959] = '\v', | |
| [960] = '\t', [961] = '\v', [962] = ' ', [963] = ';', [964] = '\t', | |
| [965] = ' ', [966] = '\f', [967] = '\v', [968] = '}', [969] = ' ', | |
| [970] = ';', [971] = '\t', [972] = ' ', [973] = '\f', [974] = '\f', | |
| [975] = '}', [976] = ' ', [977] = '}', [978] = '\f', [979] = '}', | |
| [980] = ' ', [981] = '\f', [982] = '\v', [983] = ';', [984] = ' ', | |
| [985] = '\t', [986] = '\f', [987] = '}', [988] = ' ', [989] = '\v', | |
| [990] = '\f', [991] = '\v', [992] = ' ', [993] = '\t', [994] = '\f', | |
| [995] = '\f', [996] = ' ', [997] = '}', [998] = '\t', [999] = ' ', | |
| [1000] = '\f', [1001] = '\f', [1002] = '}', [1003] = ' ', [1004] = '}', | |
| [1005] = '\f', [1006] = '}', [1007] = ' ', [1008] = '\v', [1009] = '\t', | |
| [1010] = ' ', [1011] = '\t', [1012] = '\v', [1013] = '}', [1014] = ' ', | |
| [1015] = '\t', [1016] = '\t', [1017] = ' ', [1018] = '{', [1019] = '\f', | |
| [1020] = '}', [1021] = ' ', [1022] = '\t', [1023] = '\f', [1024] = '\v', | |
| [1025] = ' ', [1026] = '\v', [1027] = '\f', [1028] = '\f', [1029] = ' ', | |
| [1030] = '\f', [1031] = '\f', [1032] = '}', [1033] = ' ', [1034] = '\v', | |
| [1035] = '\v', [1036] = ';', [1037] = ' ', [1038] = '}', [1039] = '\f', | |
| [1040] = '\f', [1041] = ' ', [1042] = '\t', [1043] = '\v', [1044] = '}', | |
| [1045] = ' ', [1046] = '}', [1047] = '\f', [1048] = '}', [1049] = ' ', | |
| [1050] = '}', [1051] = '\f', [1052] = '}', [1053] = ' ', [1054] = '}', | |
| [1055] = '\f', [1056] = '}', [1057] = ' ', [1058] = '{', [1059] = '\f', | |
| [1060] = '\v', [1061] = ' ', [1062] = '}', [1063] = '\v', [1064] = '}', | |
| [1065] = ' ', [1066] = '\f', [1067] = '\v', [1068] = '}', [1069] = ' ', | |
| [1070] = '\f', [1071] = '\v', [1072] = '}', [1073] = ' ', [1074] = ';', | |
| [1075] = '\f', [1076] = '\v', [1077] = ' ', [1078] = '\f', [1079] = '\v', | |
| [1080] = '}', [1081] = ' ', [1082] = '\v', [1083] = '\f', [1084] = '\v', | |
| [1085] = ' ', [1086] = '{', [1087] = '\f', [1088] = '\v', [1089] = ' ', | |
| [1090] = '}', [1091] = '\v', [1092] = '}', [1093] = ' ', [1094] = ';', | |
| [1095] = '\t', [1096] = '\v', [1097] = ' ', [1098] = ';', [1099] = '\t', | |
| [1100] = '\v', [1101] = ' ', [1102] = '{', [1103] = '\f', [1104] = '}', | |
| [1105] = ' ', [1106] = ';', [1107] = '\f', [1108] = '\v', [1109] = ' ', | |
| [1110] = ';', [1111] = '\t', [1112] = '\v', [1113] = ' ', [1114] = '\f', | |
| [1115] = '\f', [1116] = '}', [1117] = ' ', [1118] = ';', [1119] = '\f', | |
| [1120] = '\f', [1121] = ' ', [1122] = '\f', [1123] = '\f', [1124] = '}', | |
| [1125] = ' ', [1126] = '}', [1127] = '\v', [1128] = ';', [1129] = ' ', | |
| [1130] = '{', [1131] = '\t', [1132] = '}', [1133] = ' ', [1134] = '{', | |
| [1135] = '\f', [1136] = ' ', [1137] = '\t', [1138] = ' ', [1139] = ';', | |
| [1140] = '\f', [1141] = ' ', [1142] = ';', [1143] = ' ', [1144] = ' ', | |
| [1145] = '\v', [1146] = '\t', [1147] = '\v', [1148] = ' ', [1149] = '\t', | |
| [1150] = '\v', [1151] = '}', [1152] = ' ', [1153] = '\f', [1154] = '\f', | |
| [1155] = '\v', [1156] = ' ', [1157] = '}', [1158] = '\f', [1159] = '}', | |
| [1160] = ' ', [1161] = '}', [1162] = '\f', [1163] = '}', [1164] = ' ', | |
| [1165] = '}', [1166] = '\f', [1167] = '}', [1168] = ' ', [1169] = '}', | |
| [1170] = '\f', [1171] = '}', [1172] = ' ', [1173] = ';', [1174] = '\f', | |
| [1175] = '}', [1176] = ' ', [1177] = '\f', [1178] = '\f', [1179] = '}', | |
| [1180] = ' ', [1181] = '\f', [1182] = '\v', [1183] = ';', [1184] = ' ', | |
| [1185] = '}', [1186] = '\f', [1187] = '\f', [1188] = ' ', [1189] = '{', | |
| [1190] = '\t', [1191] = '\f', [1192] = ' ', [1193] = '{', [1194] = '\v', | |
| [1195] = '}', [1196] = ' ', [1197] = ';', [1198] = '\f', [1199] = ' ', | |
| [1200] = ' ', [1201] = 'l', [1202] = 'e', [1203] = 't', [1204] = '\t', | |
| [1205] = ';', [1206] = '\f', [1207] = ' ', [1208] = ' ', [1209] = 'i', | |
| [1210] = 'n', [1211] = '\t', [1212] = '\t', [1213] = '\f', [1214] = ' ', | |
| [1215] = '}', [1216] = '\f', [1217] = ' ', [1218] = ';', [1219] = '\f', | |
| [1220] = '}', [1221] = ' ', [1222] = '\f', [1223] = '\f', [1224] = '}', | |
| [1225] = ' ', [1226] = '\v', [1227] = '\v', [1228] = ';', [1229] = ' ', | |
| [1230] = '}', [1231] = '\f', [1232] = '\f', [1233] = ' ', [1234] = '}', | |
| [1235] = ' ', [1236] = '{', [1237] = '\v', [1238] = '}', [1239] = ' ', | |
| [1240] = ';', [1241] = '\f', [1242] = ' ', [1243] = ' ', [1244] = 'c', | |
| [1245] = 'a', [1246] = 's', [1247] = 'e', [1248] = '\t', [1249] = ';', | |
| [1250] = '\f', [1251] = ' ', [1252] = '}', [1253] = '\v', [1254] = '\v', | |
| [1255] = ' ', [1256] = '\t', [1257] = '\f', [1258] = ' ', [1259] = '\v', | |
| [1260] = '\f', [1261] = '}', [1262] = ' ', [1263] = '\v', [1264] = '\t', | |
| [1265] = ' ', [1266] = ';', [1267] = '\f', [1268] = '}', [1269] = ' ', | |
| [1270] = '\f', [1271] = '\f', [1272] = '}', [1273] = ' ', [1274] = '}', | |
| [1275] = '\t', [1276] = ' ', [1277] = '{', [1278] = '\f', [1279] = '}', | |
| [1280] = ' ', [1281] = '{', [1282] = '\v', [1283] = '\v', [1284] = ' ', | |
| [1285] = '\v', [1286] = '\f', [1287] = '}', [1288] = ' ', [1289] = '{', | |
| [1290] = '\t', [1291] = ' ', [1292] = ';', [1293] = '\f', [1294] = '}', | |
| [1295] = ' ', [1296] = '\f', [1297] = '\f', [1298] = '}', [1299] = ' ', | |
| [1300] = '\f', [1301] = '\v', [1302] = ';', [1303] = ' ', [1304] = '{', | |
| [1305] = '\t', [1306] = '\f', [1307] = ' ', [1308] = '{', [1309] = '\v', | |
| [1310] = '}', [1311] = ' ', [1312] = '{', [1313] = '\t', [1314] = '\v', | |
| [1315] = ' ', [1316] = '}', [1317] = '\v', [1318] = '\t', [1319] = ' ', | |
| [1320] = '{', [1321] = '\t', [1322] = ' ', [1323] = '\f', [1324] = '\f', | |
| [1325] = ' ', [1326] = ';', [1327] = '\t', [1328] = ' ', [1329] = '}', | |
| [1330] = '\f', [1331] = '}', [1332] = ' ', [1333] = '}', [1334] = '\f', | |
| [1335] = '}', [1336] = ' ', [1337] = '\f', [1338] = '\f', [1339] = '}', | |
| [1340] = ' ', [1341] = '}', [1342] = '\f', [1343] = '\v', [1344] = ' ', | |
| [1345] = '\t', [1346] = '\t', [1347] = ' ', [1348] = '\t', [1349] = '\f', | |
| [1350] = '}', [1351] = ' ', [1352] = ';', [1353] = '\f', [1354] = '}', | |
| [1355] = ' ', [1356] = '\f', [1357] = '\f', [1358] = '}', [1359] = ' ', | |
| [1360] = ';', [1361] = '\f', [1362] = '}', [1363] = ' ', [1364] = '\f', | |
| [1365] = '\f', [1366] = '}', [1367] = ' ', [1368] = '}', [1369] = '\f', | |
| [1370] = '\f', [1371] = ' ', [1372] = '}', [1373] = '\f', [1374] = '\f', | |
| [1375] = ' ', [1376] = '\t', [1377] = '\t', [1378] = '}', [1379] = ' ', | |
| [1380] = '\f', [1381] = '\f', [1382] = '\f', [1383] = ' ', [1384] = '\t', | |
| [1385] = '\t', [1386] = ' ', [1387] = '\v', [1388] = '\t', [1389] = ' ', | |
| [1390] = '\t', [1391] = '\v', [1392] = ';', [1393] = ' ', [1394] = ' ', | |
| [1395] = '\f', [1396] = '\v', [1397] = ';', [1398] = ' ', [1399] = '\t', | |
| [1400] = '\v', [1401] = ';', [1402] = ' ', [1403] = '\t', [1404] = ' ', | |
| [1405] = '\v', [1406] = ' ', [1407] = '}', [1408] = ' ', [1409] = '{', | |
| [1410] = '\f', [1411] = ';', [1412] = ' ', [1413] = '{', [1414] = '\f', | |
| [1415] = ';', [1416] = ' ', [1417] = '{', [1418] = '\f', [1419] = ';', | |
| [1420] = ' ', [1421] = '}', [1422] = ' ', [1423] = '\t', [1424] = ' ', | |
| [1425] = '}', [1426] = ' ', [1427] = '}', [1428] = ' ', [1429] = '\f', | |
| [1430] = '\v', [1431] = ';', [1432] = ' ', [1433] = '}', [1434] = ' ', | |
| [1435] = '}', [1436] = '\f', [1437] = '\f', [1438] = ' ', [1439] = '\v', | |
| [1440] = ' ', [1441] = '\f', [1442] = '\v', [1443] = ';', [1444] = ' ', | |
| [1445] = ' ', [1446] = '}', [1447] = ' ', [1448] = '\v', [1449] = ' ', | |
| [1450] = '{', [1451] = '\f', [1452] = ' ', [1453] = ';', [1454] = '\v', | |
| [1455] = '\v', [1456] = ' ', [1457] = ' ', [1458] = '{', [1459] = '\f', | |
| [1460] = ';', [1461] = ' ', [1462] = '}', [1463] = ' ', [1464] = '}', | |
| [1465] = ' ', [1466] = '\v', [1467] = '\f', [1468] = ';', [1469] = ' ', | |
| [1470] = '{', [1471] = '\f', [1472] = ';', [1473] = ' ', [1474] = '}', | |
| [1475] = '\f', [1476] = ';', [1477] = ' ', [1478] = '}', [1479] = ' ', | |
| [1480] = '}', [1481] = '\f', [1482] = ';', [1483] = ' ', [1484] = '\v', | |
| [1485] = ' ', [1486] = '}', [1487] = '\f', [1488] = ';', [1489] = ' ', | |
| [1490] = '\v', [1491] = ' ', [1492] = '\f', [1493] = '\f', [1494] = ' ', | |
| [1495] = '}', [1496] = '\f', [1497] = ';', [1498] = ' ', [1499] = '\f', | |
| [1500] = '\f', [1501] = ' ', [1502] = '\v', [1503] = '\f', [1504] = ';', | |
| [1505] = ' ', [1506] = '}', [1507] = '\v', [1508] = ';', [1509] = ' ', | |
| [1510] = ';', [1511] = '\v', [1512] = ';', [1513] = ' ', [1514] = '\f', | |
| [1515] = '\f', [1516] = ' ', [1517] = '}', [1518] = '\f', [1519] = ';', | |
| [1520] = ' ', [1521] = ';', [1522] = '\f', [1523] = ' ', [1524] = '\t', | |
| [1525] = ' ', [1526] = ';', [1527] = '\t', [1528] = ' ', [1529] = '}', | |
| [1530] = '\f', [1531] = ';', [1532] = ' ', [1533] = '}', [1534] = ' ', | |
| [1535] = '}', [1536] = '\f', [1537] = ' ', [1538] = ';', [1539] = '\f', | |
| [1540] = '}', [1541] = ' ', [1542] = '\f', [1543] = '\v', [1544] = '\v', | |
| [1545] = ' ', [1546] = ' ', [1547] = ':', [1548] = ' ', [1549] = '<', | |
| [1550] = '=', [1551] = ' ', [1552] = '*', [1553] = ' ', [1554] = '+', | |
| [1555] = ' ', [1556] = '-', [1557] = ' ', [1558] = '/', [1559] = '\t', | |
| [1560] = '}', [1561] = '\f', [1562] = ';', [1563] = ' ', [1564] = '{', | |
| [1565] = '\f', [1566] = '\v', [1567] = ' ', [1568] = '}', [1569] = '\f', | |
| [1570] = ' ', [1571] = '\t', [1572] = '\f', [1573] = '}', [1574] = ' ', | |
| [1575] = '{', [1576] = '\v', [1577] = '}', [1578] = ' ', [1579] = '\v', | |
| [1580] = '\t', [1581] = '}', [1582] = ' ', [1583] = '\v', [1584] = '\f', | |
| [1585] = ';', [1586] = ' ', [1587] = '}', [1588] = '\f', [1589] = '\f', | |
| [1590] = ' ', [1591] = '\f', [1592] = '\t', [1593] = '\v', [1594] = ' ', | |
| [1595] = '{', [1596] = '\t', [1597] = '}', [1598] = ' ', [1599] = '\t', | |
| [1600] = '\f', [1601] = '}', [1602] = ' ', [1603] = ';', [1604] = '\f', | |
| [1605] = '\v', [1606] = ' ', [1607] = '}', [1608] = '\t', [1609] = ' ', | |
| [1610] = ' ', [1611] = 'd', [1612] = 'a', [1613] = 't', [1614] = 'a', | |
| [1615] = '\t', [1616] = '\v', [1617] = '\f', [1618] = '\f', [1619] = ' ', | |
| [1620] = '\v', [1621] = '\t', [1622] = ' ', [1623] = '\v', [1624] = '\t', | |
| [1625] = '}', [1626] = ' ', [1627] = '\v', [1628] = '\v', [1629] = ';', | |
| [1630] = ' ', [1631] = '}', [1632] = '\f', [1633] = ';', [1634] = ' ', | |
| [1635] = ';', [1636] = '\t', [1637] = '}', [1638] = ' ', [1639] = '{', | |
| [1640] = '\v', [1641] = '\v', [1642] = ' ', [1643] = '{', [1644] = '\f', | |
| [1645] = ';', [1646] = ' ', [1647] = '\v', [1648] = '\t', [1649] = '\f', | |
| [1650] = ' ', [1651] = '{', [1652] = '\t', [1653] = '\f', [1654] = ' ', | |
| [1655] = '\v', [1656] = '\t', [1657] = '\f', [1658] = ' ', [1659] = '}', | |
| [1660] = '\f', [1661] = '\f', [1662] = ' ', [1663] = '\v', [1664] = '\v', | |
| [1665] = ';', [1666] = ' ', [1667] = ';', [1668] = '\v', [1669] = ';', | |
| [1670] = ' ', [1671] = '\f', [1672] = '\t', [1673] = '\v', [1674] = ' ', | |
| [1675] = '}', [1676] = '\t', [1677] = '}', [1678] = ' ', [1679] = '\v', | |
| [1680] = '\t', [1681] = '}', [1682] = ' ', [1683] = '}', [1684] = '\f', | |
| [1685] = ';', [1686] = ' ', [1687] = '\v', [1688] = '\v', [1689] = '\v', | |
| [1690] = ' ', [1691] = '\v', [1692] = '\t', [1693] = '}', [1694] = ' ', | |
| [1695] = ';', [1696] = '\f', [1697] = ' ', [1698] = '}', [1699] = ' ', | |
| [1700] = ';', [1701] = '\f', [1702] = '}', [1703] = ' ', [1704] = '{', | |
| [1705] = '\t', [1706] = '}', [1707] = ' ', [1708] = '{', [1709] = '\t', | |
| [1710] = '}', [1711] = ' ', [1712] = '}', [1713] = '\v', [1714] = '\v', | |
| [1715] = ' ', [1716] = '\v', [1717] = '\t', [1718] = ' ', [1719] = '}', | |
| [1720] = '\f', [1721] = '\v', [1722] = ' ', [1723] = '\v', [1724] = '\t', | |
| [1725] = ' ', [1726] = ';', [1727] = '\v', [1728] = '\v', [1729] = ' ', | |
| [1730] = ';', [1731] = '\t', [1732] = '{', [1733] = '\f', [1734] = ' ', | |
| [1735] = '\v', [1736] = '\t', [1737] = '}', [1738] = ' ', [1739] = '}', | |
| [1740] = ' ', [1741] = '{', [1742] = '\t', [1743] = ' ', [1744] = '\v', | |
| [1745] = ' ', [1746] = '}', [1747] = '\t', [1748] = '}', [1749] = ' ', | |
| [1750] = '\v', [1751] = '\t', [1752] = '}', [1753] = ' ', [1754] = '{', | |
| [1755] = '\f', [1756] = ';', [1757] = ' ', [1758] = '\t', [1759] = '\f', | |
| [1760] = ' ', [1761] = ';', [1762] = '\f', [1763] = '}', [1764] = ' ', | |
| [1765] = '}', [1766] = '\t', [1767] = '}', [1768] = ' ', [1769] = '\v', | |
| [1770] = '\t', [1771] = '}', [1772] = ' ', [1773] = '{', [1774] = '\t', | |
| [1775] = '\f', [1776] = ' ', [1777] = '{', [1778] = '\t', [1779] = '\v', | |
| [1780] = ' ', [1781] = '\f', [1782] = '\v', [1783] = '\v', [1784] = ' ', | |
| [1785] = '\t', [1786] = '\f', [1787] = ' ', [1788] = '\t', [1789] = '\v', | |
| [1790] = '\f', [1791] = ' ', [1792] = ';', [1793] = '\f', [1794] = ';', | |
| [1795] = ' ', [1796] = '#', [1797] = 'd', [1798] = 'e', [1799] = 'f', | |
| [1800] = 'i', [1801] = 'n', [1802] = 'e', [1803] = ' ', [1804] = 'x', | |
| [1805] = ' ', [1806] = '\\', | |
| }; | |
| typedef struct PredefLoader { | |
| char *n, *T, *v; | |
| } PredefLoader; | |
| static PredefLoader ldr = { | |
| .n = literal_n, | |
| .T = literal_n + 19, | |
| .v = literal_n + 12, | |
| }; | |
| typedef struct Base85 { | |
| u32 a; | |
| u32 mask; | |
| char *y; | |
| } Base85; | |
| static Base85 b85 = { | |
| .a = 0, | |
| .mask = 1<<0, | |
| .y = literal_y, | |
| }; | |
| // ## Utilities to uncompress and decode predefined program | |
| static u32 Z(void) { | |
| u32 local0 = *ldr.T++; | |
| return local0 == 9 ? 8 : l(l(17, l(1, local0)), Z()); | |
| } | |
| /// initialized with 0, 1, 1 | |
| /// | |
| /// each args and idx change to: | |
| /// 1. 0, 1, 1, 0 | |
| /// 2. idx1, 6, 2, idx1 | |
| /// 3. idx1+(idx2/2*6), 18, 1, idx2 | |
| /// 4. idx1+(idx2/2*6)+idx3*18, 54, 2, idx3 | |
| /// 5. idx1+(idx2/2*6)+idx3*18+(idx4/2*54), 162, 1, idx4 | |
| /// 6. ... | |
| static u32 N(u32 arg0, u32 arg1, u32 arg2) { | |
| for (u32 idx;;) { | |
| for (idx = 0; ldr.v[idx] != *ldr.T; idx++) | |
| ; | |
| ldr.T++; | |
| if (idx >= 6) | |
| return arg0; | |
| arg0 = arg0 + idx / arg2 * arg1; | |
| arg1 = arg1 * 6 / arg2; | |
| arg2 = 3 - arg2; | |
| } | |
| } | |
| static u32 Base85_takeBit(void) { | |
| if ( (b85.mask >>= 1) == 0) { | |
| b85.mask = (u32)1 << 31; | |
| b85.a = 0; | |
| for (u32 itr = 5; itr--;) | |
| b85.a = 85 * b85.a + *b85.y++ - 32; | |
| } | |
| return (b85.a & b85.mask) ? 1 : 0; | |
| } | |
| /// Extract compressed bytes | |
| static u32 W(u32 arg0, u32 *argD) { | |
| u32 my_byte = arg0 << 1; | |
| my_byte |= Base85_takeBit(); | |
| u32 idx_n = 0; | |
| for (;;) { | |
| if (ldr.n[idx_n] == 9) | |
| return W(my_byte, argD); | |
| if (ldr.n[idx_n] == my_byte + 32) | |
| break; | |
| idx_n += 1; | |
| } | |
| switch (idx_n) { | |
| case 0: | |
| idx_n = W(0, argD); | |
| return l(idx_n, W(0, argD)); | |
| default: | |
| idx_n -= 1; | |
| if (idx_n >= 2) | |
| return idx_n; | |
| } | |
| u32 C = N(0, 1, 1); | |
| if (idx_n != 0) | |
| return l(idx_n, C); | |
| switch (C) { | |
| case 0: | |
| return Z(); | |
| case 1: | |
| case 2: | |
| case 3: | |
| case 4: | |
| case 5: | |
| case 6: | |
| case 7: | |
| return C + 15; | |
| default: | |
| return (argD-C)[7]; // XXX: pointer and unsigned value | |
| } | |
| } | |
| static u32 root_mem[L] = { x }; | |
| static Runtime vm = { | |
| .mem = root_mem, | |
| // .sp = vm.mem[0], /* HACK: not comptime-known */ | |
| .ip = root_mem + L - 3, | |
| .o_mode = OutputMode_Byte, | |
| }; | |
| int main(void) { | |
| vm.sp = vm.mem[0]; | |
| u32 *D = vm.mem+2; | |
| int load_compiler = vm.sp == 0; | |
| if (load_compiler) { | |
| vm.sp = 24; | |
| vm.o_mode = OutputMode_Numeric; | |
| for (D = vm.mem + L / 2;;) { | |
| if ( (*D = W(0, D)) == 0) break; | |
| D++; | |
| } | |
| puts(ldr.T); | |
| } | |
| *vm.ip = l(l(l(*--D, l(7, 0)), 0), l(23, 9)); | |
| while (Runtime_step()) {} | |
| if (load_compiler) puts(b85.y); | |
| } |