From 2ed826bcc464080fc6ec35083e6ef26c7d497ca9 Mon Sep 17 00:00:00 2001 From: Jaromil Date: Sun, 22 Dec 2024 22:00:00 +0100 Subject: [PATCH] feat: new flappy example from tinyc.games small mods for size (png sprites instead of bmp) and paths fixes, plus using a public domain font --- REUSE.toml | 6 + examples/flappy.c | 211 ++++++++++++++++++ .../tinyc.games/PixelatedEleganceRegular.ttf | Bin 0 -> 20852 bytes examples/tinyc.games/flappy/background.png | Bin 0 -> 13068 bytes examples/tinyc.games/flappy/bird-0.png | Bin 0 -> 2174 bytes examples/tinyc.games/flappy/bird-1.png | Bin 0 -> 2173 bytes examples/tinyc.games/flappy/bird-2.png | Bin 0 -> 2222 bytes examples/tinyc.games/flappy/bird-3.png | Bin 0 -> 2201 bytes examples/tinyc.games/flappy/pillar.png | Bin 0 -> 1784 bytes test/bats_setup | 2 +- 10 files changed, 218 insertions(+), 1 deletion(-) create mode 100644 examples/flappy.c create mode 100755 examples/tinyc.games/PixelatedEleganceRegular.ttf create mode 100644 examples/tinyc.games/flappy/background.png create mode 100644 examples/tinyc.games/flappy/bird-0.png create mode 100644 examples/tinyc.games/flappy/bird-1.png create mode 100644 examples/tinyc.games/flappy/bird-2.png create mode 100644 examples/tinyc.games/flappy/bird-3.png create mode 100644 examples/tinyc.games/flappy/pillar.png diff --git a/REUSE.toml b/REUSE.toml index f7538a5..7413452 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -15,6 +15,12 @@ precedence = "aggregate" SPDX-FileCopyrightText = "Copyright (c) 2016 Jer Wilson" SPDX-License-Identifier = "MIT" +[[annotations]] +path = "examples/tinyc.games/res/PixelatedEleganceRegular.ttf" +precedence = "aggregate" +SPDX-FileCopyrightText = " 2024 GGBotNet" +SPDX-License-Identifier = "MIT-0" + [[annotations]] path = [".*", ".github/**"] precedence = "aggregate" diff --git a/examples/flappy.c b/examples/flappy.c new file mode 100644 index 0000000..70b4c10 --- /dev/null +++ b/examples/flappy.c @@ -0,0 +1,211 @@ +// Flappy -- http://tinyc.games -- (c) 2020 Jer Wilson +// +// Flappy is an extremely small implementation of the Flappy Bird game. + +#include +#include +#include + +#include +#include +#include + +#define W 480 +#define H 600 +#define GROUND 80 +#define PIPE_W 86 +#define PHYS_W (W + PIPE_W + 80) +#define GAP 220 +#define GRACE 4 +#define RANDOM_PIPE_HEIGHT (rand() % (H - GROUND - GAP - 120) + 60) +#define PLYR_X 80 +#define PLYR_SZ 60 + +enum gamestates {READY, ALIVE, GAMEOVER} gamestate = READY; + +float player_y = (H - GROUND)/2; +float player_vel; +int pipe_x[2] = {W, W}; +float pipe_y[2]; +int score; +int best; +int idle_time = 30; +float frame = 0; + +SDL_Event event; +SDL_Renderer *renderer; +SDL_Surface *surf; +SDL_Texture *pillar; +SDL_Texture *background; +SDL_Texture *bird[4]; +TTF_Font *font; + +void setup(); +void new_game(); +void update_stuff(); +void update_pipe(int i); +void draw_stuff(); +void text(char *fstr, int value, int height); + +//the entry point and main game loop +int main() +{ + setup(); + + for(;;) + { + while(SDL_PollEvent(&event)) switch(event.type) + { + case SDL_QUIT: + exit(0); + case SDL_KEYDOWN: + case SDL_MOUSEBUTTONDOWN: + if(gamestate == ALIVE) + { + player_vel = -11.7f; + frame += 1.0f; + } + else if(idle_time > 30) + { + new_game(); + } + } + + update_stuff(); + draw_stuff(); + SDL_Delay(1000 / 60); + idle_time++; + } +} + +//initial setup to get the window and rendering going +void setup() +{ + srand(time(NULL)); + + SDL_Init(SDL_INIT_VIDEO); + SDL_Window *win = SDL_CreateWindow("Flappy", + SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, W, H, SDL_WINDOW_SHOWN); + renderer = SDL_CreateRenderer(win, -1, SDL_RENDERER_PRESENTVSYNC); + if(!renderer) exit(fprintf(stderr, "Could not create SDL renderer\n")); + IMG_Init(IMG_INIT_PNG); + pillar = IMG_LoadTexture(renderer,"examples/tinyc.games/flappy/pillar.png"); + SDL_SetColorKey(surf, 1, 0xffff00); + background = IMG_LoadTexture(renderer,"examples/tinyc.games/flappy/background.png"); + + for(int i = 0; i < 4; i++) + { + char file[80]; + sprintf(file, "examples/tinyc.games/flappy/bird-%d.png", i); + // surf = SDL_LoadBMP(file); + // SDL_SetColorKey(surf, 1, 0xffff00); + // bird[i] = SDL_CreateTextureFromSurface(renderer, surf); + bird[i] = IMG_LoadTexture(renderer,file); + } + + TTF_Init(); + font = TTF_OpenFont("examples/tinyc.games/PixelatedEleganceRegular.ttf", 42); +} + +//start a new game +void new_game() +{ + gamestate = ALIVE; + player_y = (H - GROUND)/2; + player_vel = -11.7f; + score = 0; + pipe_x[0] = PHYS_W + PHYS_W/2 - PIPE_W; + pipe_x[1] = PHYS_W - PIPE_W; + pipe_y[0] = RANDOM_PIPE_HEIGHT; + pipe_y[1] = RANDOM_PIPE_HEIGHT; +} + +//when we hit something +void game_over() +{ + gamestate = GAMEOVER; + idle_time = 0; + if(best < score) best = score; +} + +//update everything that needs to update on its own, without input +void update_stuff() +{ + if(gamestate != ALIVE) return; + + player_y += player_vel; + player_vel += 0.61; // gravity + + if(player_vel > 10.0f) + frame = 0; + else + frame -= (player_vel - 10.0f) * 0.03f; //fancy animation + + if(player_y > H - GROUND - PLYR_SZ) + game_over(); + + for(int i = 0; i < 2; i++) + update_pipe(i); +} + +//update one pipe for one frame +void update_pipe(int i) +{ + if(PLYR_X + PLYR_SZ >= pipe_x[i] + GRACE && PLYR_X <= pipe_x[i] + PIPE_W - GRACE && + (player_y <= pipe_y[i] - GRACE || player_y + PLYR_SZ >= pipe_y[i] + GAP + GRACE)) + game_over(); // player hit pipe + + // move pipes and increment score if we just passed one + pipe_x[i] -= 5; + if(pipe_x[i] + PIPE_W < PLYR_X && pipe_x[i] + PIPE_W > PLYR_X - 5) + score++; + + // respawn pipe once far enough off screen + if(pipe_x[i] <= -PIPE_W) + { + pipe_x[i] = PHYS_W - PIPE_W; + pipe_y[i] = RANDOM_PIPE_HEIGHT; + } +} + +//draw everything in the game on the screen +void draw_stuff() +{ + SDL_Rect dest = {0, 0, W, H}; + SDL_RenderCopy(renderer, background, NULL, &dest); + + //draw pipes + for(int i = 0; i < 2; i++) + { + int lower = pipe_y[i] + GAP; + SDL_RenderCopy(renderer, pillar, NULL, &(SDL_Rect){pipe_x[i], pipe_y[i] - H, PIPE_W, H}); + SDL_Rect src = {0, 0, 86, H - lower - GROUND}; + SDL_RenderCopy(renderer, pillar, &src, &(SDL_Rect){pipe_x[i], lower, PIPE_W, src.h}); + } + + //draw player + SDL_RenderCopy(renderer, bird[(int)frame % 4], NULL, + &(SDL_Rect){PLYR_X, player_y, PLYR_SZ, PLYR_SZ}); + + if(gamestate != READY) text("%d", score, 10); + if(gamestate == READY) text("Press any key", 0, 150); + if(gamestate == GAMEOVER) text("High score: %d", best, 150); + + SDL_RenderPresent(renderer); +} + +void text(char *fstr, int value, int height) +{ + if(!font) return; + int w, h; + char msg[80]; + snprintf(msg, 80, fstr, value); + TTF_SizeText(font, msg, &w, &h); + SDL_Surface *msgsurf = TTF_RenderText_Blended(font, msg, (SDL_Color){255, 255, 255}); + SDL_Texture *msgtex = SDL_CreateTextureFromSurface(renderer, msgsurf); + SDL_Rect fromrec = {0, 0, msgsurf->w, msgsurf->h}; + SDL_Rect torec = {(W - w)/2, height, msgsurf->w, msgsurf->h}; + SDL_RenderCopy(renderer, msgtex, &fromrec, &torec); + SDL_DestroyTexture(msgtex); + SDL_FreeSurface(msgsurf); +} diff --git a/examples/tinyc.games/PixelatedEleganceRegular.ttf b/examples/tinyc.games/PixelatedEleganceRegular.ttf new file mode 100755 index 0000000000000000000000000000000000000000..9deeb16c2ec34ca02f7d3b7f5a82c01e263bbfde GIT binary patch literal 20852 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 literal 0 HcmV?d00001 diff --git a/examples/tinyc.games/flappy/background.png b/examples/tinyc.games/flappy/background.png new file mode 100644 index 0000000000000000000000000000000000000000..af462ca7368ad467b2c75fe0f3c7db4b7ddb3ce9 GIT binary patch literal 13068 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 Sp7Jvbm4>ReN|n;PPyY*P&GB9U literal 0 HcmV?d00001 diff --git a/examples/tinyc.games/flappy/bird-0.png b/examples/tinyc.games/flappy/bird-0.png new file mode 100644 index 0000000000000000000000000000000000000000..49f1617480c3e2b61271bf354bc794d841ebacd7 GIT binary patch literal 2174 zcmbVN4NMbf7(V(dEiFz&{;W7K^Hsq zQC6L0$&Q#9t#@>Ml1i6ab2YnqYT1LHKkBw_uqBnj8QTgXD<10(jY{$wy7rvnNwXU? z4{LlHzvmtxuxOGGkxIPHEpJ=*W!1V|_{{D#@Tg6CU1v}x|B6`p6taxm)$j}o^rPh{ zq~TOwkoJSTwjc!Ll~CBXxg`{azj-f_;U6ME9%c#9D<>M4C!-A&-RB(Q>myamSnoC6 zoFzaOyJLFHFKoPDfFDGH+dZ33)mok)7IB74>%wxvzu0K<(W+g8=XCcr8`*=}pN*h` zINgQ!l8wt)%Pd?i+c?ASW8!>6dn#la$H9!@QPPja!!-v&W%;70KyUjZ^n>Uy`Pg|c z3>mgdpi;zPjSx|c}kFu zdX}ChxXD82gkuECs`F^LM!~f7`L->oLl3A$kQUs=NI%2EwF9ZuUxX@zH7&dj z_5GWC5iHOb3gjmGKA1g$N@pI&eI@Sv$batS4j;YK^GNFJaLh5q1calLCBOG7MhSRn zg`jM(W&hV%|EYpqb|Z%?x?f@564@4*y1dh?;J!-QtUH+*g@2)Vmi7+?s**x7Hsfd5o20 z+{p?m6lH|lTdWsUt%pch#nT6-;UkI(FrO;h=_|=Ge6oSSo?>3{zEwLCRhUM`fi@rE zg{@H*GzQog9J%v3GCL-$Ie9}Yyu;L{uEkH^R-_qdZ!C4gfPZSnqq2me!6wgkB9)yD z#>koEh^c4_{zhM9jVz~V#Q55m9CZVuDi!c{K(h3%zp;*B_dy9@G`EDm7UV6M zii$wxT>I27&vqhMyYR_Ejhe?(On)Qy>B#Mf=A|Qf>tIJ_&he!Q5nrmAN;b{zqzJG7 zta4Fpdw-uWr?m?fnbc*aH^iKPZ6k^J^Fe^jMXPL@9t}CfY&&YomVO-QArhvAZ8gj9VFdCVErx|M2pT`2YX_ literal 0 HcmV?d00001 diff --git a/examples/tinyc.games/flappy/bird-1.png b/examples/tinyc.games/flappy/bird-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca7edafd23936b77efeb967d08ba98ecd970b07 GIT binary patch literal 2173 zcmeAS@N?(olHy`uVBq!ia0y~yV7dUpEX+U=@5-q4KuSHpC&cyte+GttCfkK~7@99G zSg?KXfxFH1bN>GM{2vHj?E1fgVR1GCL&mZOCKFGf7RDrRcNdPfdsC}`9L@rd$YKTt zZeb8+WSBKa0w~B{;_2(k{(?tLgj=l3Z=*F({^xU|KXtcmyiX{jeM+DA}<2SWwb6hzdJv=>gG>}_T9=BFJhVT zx%HL91?CUs`upDgYiee@8@9l4yJ*IRTvn-)=tcxrv}vE-tNV7*RX-QZ<~4b-jfr>H zT8HL5?F$QTb0N5^nH}wSMY2kLxl?)@NKRxyH3VknX{Y_VulBB&Vv<+6mw$cQg9VPw zY`jum1X-m_GA=B5%?lzOuS>sJw$S^-_Sd_04@^JC6kGUwcH{lh+04AVHaUQlm+Wl> zk|r;zn1N)*g|B5I7gQ_CTOKT!-a3y-uZlyeL={y58%UWuzpV*lT`f?V^8x#NZ!LjB zQ_-viS>C*EyVb(q^WW~+DgEQ-r4 zNnxP}@;PI{7NMvCyDMV?zYp)b zKj>Z`IDKwo9^)<+cCaz%x?bciU_Z%uaChnL{$E*7l3RD1ZjDvGaJwl!j}PiXRBdY= zraxeBoVW6!X8Fe0bYN)dP5)N68yuwQ>TCTMc1PC68&}-_PC5|1y-%3|i?hW4m zbul=qkc@-sfAMX>?{nM-8?($;+U|a(Zn#IUA;0@FR>$&IxxEnjlcxXS;lWQAUcYtQ zsg-B<>D!qDSY5)#TgCWd;kp-T%h_&B-~IOd>VKQ^YT23CWSicVaU**RuKPPn)#;ly zuTtaB+}aS|9xL>M*?GQr_K)IXdAqets6heNvn%X{uDb0;dF8)`MUiRe7Vv+W{-?s_ z%jIAHe(mAHYQqBl?eggtJsZ|>O917&*-?TQWaeF=FN+%a%-Q&=p5ZM{m}K)9?tj{8 z@?tj|!9pZ9X5A~Uf(yp%gjDk1VTcK9sAt%lj<--c%X>HeU(L%>-TP1TzSi|~7hIT3 zpezev`}OHx(|eAXFKfzcn83LfYas+I4NgxBvq%vC&Dq~z&k70hes$CWNc+Nfpb zht93Gulwtx?jPrz)Om6DU$=gydPXd%8RYNV4*j8Pz9w(qm-u%6_3z(L`2IfZ&u9Eg z30Kw?{Sxs1*K*zUzxRX-U-0KQuG&)Xl>jPRVZjJzT<5!6ek*gD+?d(L;y zcOH8zIw}I9GwA>TK)lGX9RNT^Cm$*WU)h`&e;xn49=&B}xYG#$(NcDGFCa5GolaTN zc^IzK=uM6ZixWefSAZ{t0FYjDCQ)R?kC0L}M}$$!)4R9h6SvIBT?YZceg5P_0?wUZ zgfD{GyshCNHpkn`ohci0%mn~fh!@7)`ALtt$1nFz+@hn&`QS;n++zPSK9JF#$w(-^ zbeR;t@YvorJ-<7G8a`VY5E~WmeJ16SRBnh|^LfZ#WmTOe(pE9Ff`4vZ@c8$AXEqJo zHH?<^Ya8RqOX%5epw*mG;=z?D?A};QdHkWQJVm8H4BLsto@v;(9~*TH^xEV1*HJ}< zT$@X<7ZweNmN5R$pvmmU5O=){;0)NOZ!u=N=u=^KoFchI`|&K0NgI}Raxzhv%U_y~ z=D0Ak1tl~AALe!~cs{MHx0v;9aYhOxPM*H^w`d2+1SV!L^T&=*33O;<(EcR{!HkQ$ zAGP$>!)d^i44n-(Dx*P6|MV9I%2yE036RyP@x4D!SR1HF@>V37N9#FVb2KZ0UKD+H zSa>Al?N60D^Hoa2g>mu0QmTM9UFoDGww_+7QI(*geHwzN zY7ar*46dG~+f(;rr;HaYUGDkk}~j(x&K3z8 z+Q_N{3DJbgLWUQ0QA|Evpeb-Ja#qs0=GMA`4hkcfYU;devEaV`mv3kg5{RW-Pc=XE zXj&QB^OdN%WQgR8EOx~Y38c0=l?(z?)<00(n-97NCBNwc+l#s-qjp}SaR6RO*6e;6 z1H$>OSBF9AT8F{n!f79FZJl^`4pMlMP@D#h1F$@*bo=R7&6dTkl9=d6TSP~7L&e&C zLz?~+JeCMprm+FUd`+c3q;3g#hb5-ku7OAcc2iF*42fCT@6ZzkxghbIEMe7wX6Mgg zdN>qSn8*;*`V0QTDZC9$@yJ>`8BWTj2uZSLq#$>rTdg2-~*0bEgZnX1? zxuvj;O2nMF085$Z_Dl*|xJ_l=lbDRcio-(`kbvW0NKhs^p=}Z6>w0=G-GI}izTq@& z1(8ywwK}vSXTQo}8kY|yboe>;cyC87xml`=*y1VF*kj5+EnsSf$?$mJ>3f@~8kkdB ze49Q}PU!NGZ0w`Q?J8S9QH8o=jQy6LYopCl02gDo)$ZCAnTAt8J)D=0y1V&f2pK|@ z9GP+z3J=nsPx+7_uVT9wESS>H(GcV^y7}rUKA z{mwS6$;%>>s3ZUY$l0qi-UI+F>=}5R+mf@hNa=pi*St}X>2d+U8VOr51W2#ATrO3g z-eI4BpdP8{s0%smItH|r0RaEY zBi%;gw(Q(YA`%ilKRD{cmUmuuTP)cbsRcDRO+)O1Ll-f1`Qrgcn%8!{L@xvDZvNWz z)owAFuc087KlimS)fIm7YJ0(-pB?CbCG@WnOyS(&g(Xh)=NHtm=R;tmw)LMp)7}W) zWM$hS^!i@C>I{k>oQFii`A{1tOS~Vun2(~tJXC+4;0TAP`xIe6j4ZF*9*5t z-j(qt&429wR-RjqU0CD!7s*&OaUf6f7p z%Zdmrw?V{Cyupi()5|YKR~?E}t9h%I_t4fshb0CR#ed=AB_AykJzSZ-0%w!OW+isk z+qUAYo$&iDdgC>YpRxi}aR{UIzFCHgWslInTGa-0A}v(K3#24TK#7($?55HOKYBw! zr(d8o$auNo-64}A1|B?P*PNf+u(4c(5f;O{0{jHAkZulFpfVKQrx8IL1_f;^CMut1 zb$Tra9%|H-H})IK6Zg_u`t~29DI=~f8S1hZ%GWEpFF#Fj11sM8$pnj+GKGASK@!Jy_+rXmFKr%Evk`_P#0Z z!eb=0q>qik+V)f$)mycE?|9PR1N!uqpadk0__V~$bWW~X`k*VwqJ?B3v*<=ERZwHM zo`UZhoeQdKM_a3C+9DneiaHqrx7}LSllZ6~RYIzHR__Y^rBYjwXyS zjD~5%T)IbLyo3bnSf(h%i;8rK6_3uEm4us;hrvZt46BFT1PBumhETNWg68#-9>OCE zdFeB^J86%a>i6gQ%(_1_n$Ao{9=D}qE~(QF zi}GHxf1#BBh;-Zu#YH2`+4vlVQnYp2Z%n2K|7tY04GkY`LHBlI6%4=q_A&Ig5Er&CH-^w?Oq=8WEda7J^D<7Pl}P>r?J}ts literal 0 HcmV?d00001 diff --git a/examples/tinyc.games/flappy/pillar.png b/examples/tinyc.games/flappy/pillar.png new file mode 100644 index 0000000000000000000000000000000000000000..6dc8d49124945fe0516c386ad08499b5886fa4de GIT binary patch literal 1784 zcmdT^`8(SQ8qZAIr?Xl+JA9K+SD&J;R-c*YS)Gj}irj}PISCbtWvVTS926yl-a=ie zThXD?PL-C7pe-HLBc!gn770aF%SI-oYqNjGexB!jKF3e*^L*atz3%UaH8nY60s?_d z@iSl$&a?TV_^{&AG*|Zo~G7P&pa5A&sNj%_E ztb~;)Vd8#QZi7=?x#N}U`-gxQ^Bjp5poA-&}zt48Bj zts$kown^@SCUt@fCy~qy2s0fLEQSab5P<>`oDDG2fyzY^4UVV6aCA7H;_Xd=VU`V| zDh;txO%N)~`5gem7h5ukE1AOGpTWNS%$?d4$`%>YY0OoHHNPFqZv%2iU;;Um*9IiE z0YRByUK@n>0!VxT1dG8GB#M=4A0oC2$+is7v5UyD3(K))i7lAv00n`f^K2;yG%ebN ze%X=!%W;aAF9qpKfnixbenDr*OfM1@ZmbwbN8*@Xcq#%zg=44)EDedJz%dk048x1K zw+Esja3v$;@;UOzzY~`YnVMbEuNrFAf?ve~F}2$+sRLT}FKop;DXY&#*Z~&EAuKV3 zc?}Yj0Ts%PdxDuM7BnPjZ*R{=!b>sU**D=tEUI_s+oVCG`O6g?lLG=BGXLLv1Co|n z7{h~HJQ;oP!(j+;z|6do@dyOk?}A5pQv~nV$Mu0DLhCp2?cWpRs-Hx-k*5xw=fuh~ zvq-L`#0HW9#>Y7FawQ>LMpUHE`wS2zp9=kSNxrU4TQ90fXN#HAbh~09GELBtmTdU5 zM2~ZDkQ}yzUHmggQiHi`>1IdEFi*-a?>r#akX~k*`o&phRnZ_*qEty9iT{Ko7{V4 zjJ8;-ieBqt76x11(=%am*CC5Q(=#Po-w1bIfV$$cIn#H=;Z_S zpLIPlV$qDdu0Ynf!f$$CrDb)-Z_$oTrR@3*&CJdwBP4L!p|2nGH*9mH0&e^M)(v)> zdw$OZ_HG3b^|XHI*rNx#Ld;t755nH&O};?i@AmR>3Nr2J-#+iA{5HE^bU8)A@8+6l zvtL@Re(#jG(Gl9$)paI#D*Lj6nyUM`vVv|84OAR0@GHGnR57h~39Kida&|8L zfgKGQbS*!bKXmRbxzVilYPnC9GqpcIzW@v!Jnyf#a_&}>|4A88_^_x>^)%0w-R9He z-ei{7cp@;Sp{3nI9XOsV&e%f+riWlMIxw^)e zlIlX1W=z{peYBknWzYSmci+L2;Xe7JV<#B<8%GOW3kcvD!IE$G-HCN3-LJ99o_gf=@%Aro{~9OiSl|*F zS%b{&x04*%R#_R8H9rlNyNB@P)AV*(-CRp-_88}D?_luti@J4B1V1@>LyOuJz;!jt zZb?UD7lv2NCKTD4b`m7Q4v`vA+*gjg`6TbtvSrf-T5UPhKR2&&d;DGJw%(9_rfWmj vlVpBaq1DeGP`SLbGr9cGs}!fuCGG9Aov#gC)E)b3{39Sd+7Bi33Cs8|b3JQv literal 0 HcmV?d00001 diff --git a/test/bats_setup b/test/bats_setup index e35fce5..28eaf01 100644 --- a/test/bats_setup +++ b/test/bats_setup @@ -14,7 +14,7 @@ setup() { >&2 echo "CJIT is not built, cannot run test suite" exit 1 } - rm -rf `${CJIT} --tgen` + rm -rf `${CJIT} --temp` TCC="${R}/lib/tinycc/tcc" [ -r "$TCC" ] || TCC="${R}/lib/tinycc/tcc.exe" }