From e14a1ed4fbd789bdffaedf5f7b15a62441792b20 Mon Sep 17 00:00:00 2001 From: PQCraft <58464017+PQCraft@users.noreply.github.com> Date: Fri, 24 Sep 2021 19:52:26 -0400 Subject: [PATCH] 0.22.4 Fixed a bug in Windows which caused _txtlock to break inkey$() Added \[ and \] support for colored prompt strings Allowed _PROMPT and _PROMPTTAB to be called in an autorun Changed the autorun files --- Makefile | 2 +- README.md | 2 +- clibasic.c | 61 ++++++++++++++++++++++++--------------------- commands.c | 15 +++++++---- docs/manual.odt | Bin 24816 -> 24842 bytes docs/manual.pdf | Bin 119081 -> 119083 bytes examples/hello.bas | 26 +++++++++++++++++++ logic.c | 7 ++++-- 8 files changed, 75 insertions(+), 38 deletions(-) create mode 100644 examples/hello.bas diff --git a/Makefile b/Makefile index b8192b9..294bffb 100644 --- a/Makefile +++ b/Makefile @@ -76,7 +76,7 @@ update: printf "\\e[0m\\e[31;1mAre you sure? [y/N]:\\e[0m "; read -n 1 I; [ ! "$$I" == "" ] && printf "\\n" &&\ ([[ ! "$$I" =~ ^[^Yy]$$ ]] && sh -c 'git restore . && git pull' &> /dev/null && chmod +x *.sh) || exit 0 -install: +install: uninstall if [ ! -f $(BUILD_TO) ]; then $(BUILD__); fi $(INSTALL) diff --git a/README.md b/README.md index 84dc433..8c97485 100644 --- a/README.md +++ b/README.md @@ -72,5 +72,5 @@ To build CLIBASIC with support for VT escape codes, add `vt` before the rest of - Due to Windows not having proper fork() and exec\*() functions, EXEC, EXEC(), and EXEC$() are passed through system() under Windows and one issue out of the many with this is a space parsing issue where running `EXEC "test prog"` will attempt to execute `EXEC "test", "prog"` if `test prog` cannot be found in the current directory or %PATH%. - On Windows, pressing CTRL+C will not display a new prompt line due to the Windows version of readline catching and ignoring the CTRL+C. - If the file `.clibasic_history` is present in the user's home directory CLIBASIC will automatically save history there. Run `_AUTOCMDHIST`, `_SAVECMDHIST` (without any arguments), or create the file `.clibasic_history` in your home/user folder to enable this feature. Remove the file to disable this feature. -- CLIBASIC will look for `AUTORUN.BAS` (and `autorun.bas` on Linux) in the user's home directory and run the file if present. +- CLIBASIC will look for `~/.clibasicrc`, `autorun.bas`, then `.autorun.bas` in this order in the user's home directory and run the first file found. - The development scripts are `build.sh` which is for testing if CLIBASIC compiles correctly for Linux and Windows, `package.sh` which creates the zip files for making a CLIBASIC release, and `release-text.sh` which generates the text for making a CLIBASIC release. diff --git a/clibasic.c b/clibasic.c index 8c6cefd..93b4501 100644 --- a/clibasic.c +++ b/clibasic.c @@ -115,7 +115,7 @@ // Base defines -char VER[] = "0.22.3"; +char VER[] = "0.22.4"; #if defined(__linux__) char OSVER[] = "Linux"; @@ -242,6 +242,7 @@ bool inprompt = false; bool runfile = false; bool runc = false; +bool autorun = false; bool sh_silent = false; bool sh_clearAttrib = true; @@ -605,7 +606,7 @@ int main(int argc, char** argv) { #if defined(GUI_CHECK) && defined(__unix__) if (system("tty -s 1> /dev/null 2> /dev/null")) { char* command = malloc(CB_BUF_SIZE); - copyStr("xterm -T CLIBASIC -b 0 -bg black -bcn 200 -bcf 200 -e $'clear &&", command); + copyStr("xterm -T CLIBASIC -b 0 -bg black -bcn 200 -bcf 200 -e $'clear;", command); for (int i = 0; i < argc; ++i) { copyStrApnd(" $\\'", command); gpbuf[0] = 0; @@ -871,7 +872,11 @@ int main(int argc, char** argv) { FILE* tmpfile = fopen(HIST_FILE, "r"); if ((autohist = (tmpfile != NULL))) {fclose(tmpfile); read_history(HIST_FILE);} inProg = true; - if (!loadProg("AUTORUN.BAS")) if (!loadProg("autorun.bas")) inProg = false; + autorun = true; + if (!loadProg(".clibasicrc")) + if (!loadProg("autorun.bas")) + if (!loadProg(".autorun.bas")) + {autorun = false; inProg = false;} ret = chdir(tmpcwd); (void)ret; } @@ -977,20 +982,18 @@ int main(int argc, char** argv) { bool comment = false; while (1) { #ifdef _WIN32 - if (!textlock) { - char kbc; - int kbh = kbhit(); - for (int i = 0; i < kbh; ++i) { - kbc = _getch(); - kbinbuf[i] = kbc; - putchar(kbc); - if (kbc == 3) { - if (inProg) {goto brkproccmd;} - else {cmdIntHndl();} - } + char kbc; + int kbh = kbhit(); + for (int i = 0; i < kbh; ++i) { + kbc = _getch(); + kbinbuf[i] = kbc; + if (!textlock) putchar(kbc); + if (kbc == 3) { + if (inProg) {goto brkproccmd;} + else {cmdIntHndl();} } - fflush(stdout); } + fflush(stdout); #endif rechk:; if (progindex < 0) {inProg = false;} @@ -1076,20 +1079,18 @@ static inline void cb_wait(uint64_t d) { #else uint64_t t = d + usTime(); while (t > usTime() && !cmdint) { - if (!textlock) { - char kbc; - int kbh = kbhit(); - for (int i = 0; i < kbh; ++i) { - kbc = _getch(); - kbinbuf[i] = kbc; - putchar(kbc); - if (kbc == 3) { - cmdint = true; - return; - } + char kbc; + int kbh = kbhit(); + for (int i = 0; i < kbh; ++i) { + kbc = _getch(); + kbinbuf[i] = kbc; + if (!textlock) putchar(kbc); + if (kbc == 3) { + cmdint = true; + return; } - fflush(stdout); } + fflush(stdout); } #endif } @@ -1187,6 +1188,7 @@ void unloadProg() { proggotomaxct = (int*)realloc(proggotomaxct, progindex * sizeof(int)); progindex--; if (progindex < 0) inProg = false; + if (autorun) autorun = false; } void unloadAllProg() { @@ -1587,6 +1589,8 @@ static inline void getStr(char* str1, char* str2) { case 'v': c = '\v'; break; case 'b': c = '\b'; break; case 'e': c = '\e'; break; + case '[': c = 1; break; + case ']': c = 2; break; case 'x': h[0] = '0'; h[1] = 'x'; @@ -1689,7 +1693,7 @@ uint8_t getFunc(char* inbuf, char* outbuf) { ++getFuncIndex; { int32_t i; - for (i = 0; inbuf[i] != '('; ++i) {if (inbuf[i] >= 'a' && inbuf[i] <= 'z') inbuf[i] = inbuf[i] - 32;} + for (i = 0; inbuf[i] != '('; ++i) {} int32_t j = strlen(inbuf) - 1; copyStrSnip(inbuf, i + 1, j, gftmp[0]); fargct = getArgCt(gftmp[0]); @@ -2731,7 +2735,6 @@ bool runlogic() { while (cmd[j] != ' ' && cmd[j]) {++j;} h = j; while (cmd[h] == ' ') {++h;} - if (cmd[h] == '=') return false; copyStrSnip(cmd, i, j, ltmp[0]); copyStrFrom(cmd, i, cmd); j -= i; diff --git a/commands.c b/commands.c index 12e3cf1..fedbbee 100644 --- a/commands.c +++ b/commands.c @@ -87,14 +87,18 @@ if (chkCmd(3, "%", "GOTO", "GO")) { goto noerr; } if (chkCmd(1, "DIM")) { - if (argct != 3) {cerr = 3; goto cmderr;} + if (argct < 2 || argct > 3) {cerr = 3; goto cmderr;} cerr = 0; if (!solvearg(2)) goto cmderr; - if (!solvearg(3)) goto cmderr; + if (argct == 3 && !solvearg(3)) goto cmderr; if (argt[2] != 2) {cerr = 2; goto cmderr;} int32_t asize = atoi(arg[2]); if (asize < 0) {cerr = 16; goto cmderr;} - if (!setVar(tmpargs[1], arg[3], argt[3], asize)) goto cmderr; + if (!tmpargs[1][0]) {cerr = 4; seterrstr(""); goto cmderr;} + if (!setVar(tmpargs[1],\ + ((argct == 3) ? arg[3] : ((tmpargs[1][argl[1] - 1] == '$') ? "" : "0")),\ + ((argct == 3) ? argt[3] : 2 - (tmpargs[1][argl[1] - 1] == '$')),\ + asize)) goto cmderr; goto noerr; } if (chkCmd(1, "DEL")) { @@ -668,7 +672,7 @@ if (chkCmd(1, "_UNSETENV")) { goto noerr; } if (chkCmd(1, "_PROMPT")) { - if (inProg) {cerr = 254; goto cmderr;} + if (inProg && !autorun) {cerr = 254; goto cmderr;} if (argct != 1) {cerr = 3; goto cmderr;} cerr = 0; if (!solvearg(1)) goto cmderr; @@ -677,12 +681,13 @@ if (chkCmd(1, "_PROMPT")) { goto noerr; } if (chkCmd(1, "_PROMPTTAB")) { - if (inProg) {cerr = 254; goto cmderr;} + if (inProg && !autorun) {cerr = 254; goto cmderr;} if (argct != 1) {cerr = 3; goto cmderr;} cerr = 0; if (!solvearg(1)) goto cmderr; if (argt[1] != 2) {cerr = 2; goto cmderr;} tab_width = atoi(arg[1]); + goto noerr; } if (chkCmd(1, "_AUTOCMDHIST")) { if (inProg) {cerr = 254; goto cmderr;} diff --git a/docs/manual.odt b/docs/manual.odt index 3fd508d32852c2761aec284840929a6c1cf6f8be..456da07731351a3269b40e81b52b2ce19585ec79 100644 GIT binary patch delta 18481 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%0A+-{}I*3O9SD#L> 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 GBnSY2OA0Lj diff --git a/docs/manual.pdf b/docs/manual.pdf index 837b018fbf73d68abc93e7bdeaee031ea57888ef..ac1c864c0524999fd1ea518af2e7149baf549ffa 100644 GIT binary patch delta 3514 zcmah}c|28l8}Crza%CBBM7pkJBFj1Vp6#aXa%~l&RBoo|MpTw8V~LKnXhzhrBCCr(Xn1jeqg_KUE1nWm)9VbUUzaSwraU` zXQisQs^7%G=E5R_6Q2rq+do3n&g@2KI05 z3s`IftPV>XP)}27;Dk~M^w!j@q-@V-QxS~-x6i+nv(0w$RAvhfaD-8v2DQ1}+B)Ot zQ?tkC|6=1RgYSd9m>V71-};_EvB`pe>#k4e6@x4&^?)5aRY{FO2(^7iU#i_%HvPgz zZsEfXL_%2IwTpvcRvSjNB15CbqL|V-pYC-!myT9HIkn|POPP9pscD9m@~g8_li_n> ztyx*d&oj1Mh%nwa;dxBy$NFOa@}#BHca>JCtzVifW;t!Ym)-4E!45DUFdzM4cTnB{ z^Gv1DoE7n(3X-OuuG{=>W_NgxR)A(;5F;?*X_{*V(dSuw<;tAgCwIn`7m87K+3_gC zAtFMUA>YVu9T)C^?-$A0n4#Vs2L4x5*3I%dURlx;*-=v(4)#qXigF0^s)VzJB5p$5 zL|L=`4qz2j;x}!??e$@%f4&0$;o$8?b-`1!bkVAW%uunRDQ}D2-KU#X++W+x?#fm{ z*Dg!-O)9RFoa(X}ducZ8|uo8~v-h9@Sd9t|3=JaR`AwjiRp!Fu+dBfpy7 z{8Pt!QAMnvOx;Ep-BT(2%|3OowySg91Ht}+45+2jOYKyUwodcDC-K9(KUbi!|pw^3V=ZFroHP^VNFFfDnKl#L_Wf?_PiPrI_x@P7Iz1OK` z_DS^DIP6?gdtE2tU0Ifef3xvfg>zQdc((l|smh7${p@iNm~_LP`v?vL_ruJXR@ zn-m=VBr@{e{l?O(0=?&Q`Sy)S`t5@DhkecGMGARCFI@F}QzP!H1gv#xY;&qH75xp# zA9Ah@eqPtALrnabr00;^dH02Ac+Mf=miuR}**0F=6*6qmW_++Xywp6iuKvj;J)JY7 z&Urh6UOrnYS`}hG&tk5_IgQebl773mHSs2&=2n+;nJ?qtE0^w#_McUHwA-v7?y^W$ z+xud+;^P<{GQK1WCVc&*;dKizcY*C&>gKYEl) z9;;A!_tg|Lt0vw2X2}i zl-w9pSau_&rN>bJZ$kTq?TrBsO{eAkIX{au^F)n~3I{Z9f2XoORT{CMK~!^&}~g(-VNr@LI&z2Dzj zHXf6`cG1wiypMB7n@(+0ZR`_3r4u`iIvxbt8_yZjf97Ag_rGUi#jZ{JJ;>aBLyl(mVr#(FIw(}*z{)b>f$2=U?3OYA#R(eDaN%_0B)U~)?2V{X^nA&*tv=!&*LFt zVHKAwHv|Z=Mzu-3lM#T+iG7b*)z_K;9)S3dNo=2*i^{Mu2hspMk&@IWpb^0PB-OfE0k7IUiVG?-L3zO-SWH zK#7dZ1(+l|5HKZ==K_gjOCaU6CJ)F4NRJS}iqtLunn=Y^z_V_N{VWj~lnW?{*H)>L z$+>{3IK3)`w8{gF>#%AIIkGPw0PC`jxdZi23V_vy$`HlV-O8TBLLk!m5}>DoqF)e{ zg`oAKOTa#cA_s}n#AHCq8RdXe z4RMT)@o+jB$`_jqI2jKFc{oNd1cFeQ^G!TLRxuCy7L>_=qV!52E&?InILpjHWJ(e) z!ljdj5D2F!NcnO=nD{mz2q7GBNpv+!1aWb2N@6a~p|gfy5Tf-Hf?)1cUl^WB21elj zsXFhUR}ZCL6*_AS#JQwbE3la0+i?Vl02T028$Oo{!F&v~=i7i>*oJRoi`wy)Fc$q^ z6V?w5D?zZx*56mOJuD)SWrf+;U=ZKl4&|YIgae^Gjy<0e6b9{aE+4kDVJum~2n+WK Y4UbX}_4Q*w5cQJc3}a(ES9`{P0U{aIu>b%7 delta 3502 zcmah}dps5S8#Z$5xD(-2j%#wAIWy;+8AaATWL=`0`1&S^82PG4BY0BtCUfJn#sy0i>Y)`wPP?LKUuswUxH>2} zL{}UXhd;$Zy}kK^xbtSM{blVtHXdtL?PAHzYE-By9cBi-d7A%@m<}L;LYndiWoj5w?-`fD7!{1Pitxk93IRoVNARNu~E5hmG=9Z^6erLY3fEfwFl!QLKwn+ z*Hn97SK}?Wyk7b(+#;$Mvo>N)iA`eBxg)Xh?x9Wlc!on&zlR{Qei>t$v{!Lwe9;$V|B3Ym+g0UnK~ww;JgR( z={vV6#`G(_82TKY2F& zaN)LTb!W;R`OqXIcIl)uprJ&sosvVw+N#8BJh%1zULQ8-VyY5*q!sGfT=K}mySMI} z7V}T8fwDJ*Dpg$IgPlzSZb%C}zrjN5#S6CLeVc=-H6l*o#;&cidVTTgdRc)rd*l3*;g z^?-ZHXe49Bh*8c-Pd}`Dpa#%12#;U*1t~cD!FAj%|9aagiyQje<7&)&UWTVRel4r0 zZ|3%9UPbhv$;wV;V2P(ze$?zE;)D8B<&yj@Zy+;cxC?3Eb1I$l(M389C2^w0lR9XV^X zPdv&XIDXjqg&ZEep~1E*Keqn$p$V7clXY+CzbFRnMfKtn-M8nujCmJ+E0XdgLrBZK z^QpdiOzw`NjqBS^DcTwE@~rYt7&#(s=~iZSIeLqgYK&i>pLW(eMQ=(=+t!=%lQ4AN zdrw2n;=ux5JZ*ixZsfjSj*nYLu{%SPJ61*8RQ&Aoec!LbiTJdW(lek)n%Dej>2^%4 zb?3r4)2s`}%$&uasa_2K%F4J7YB>V+syc{|d&@N`HLmOIOmT|U71{bt)Xf!E&Z3gW z^rW7t=0@(Bbuv1-V?wL@kX1E%cRz2aNw*zXd$==P9Us%Px>^=&@9vNOrvwa_Sf+ONXpES{0k6!7%UnG?oy8ZpXh-SX(#NT&*`yso{fsZ>+wK(+A;iU5O3o}6ut&rW0!o(ToMU7WmHrahz zlJD*e&J^EGAIiQKG1nYsA5WJLP!qcK@9lSK=P z2;_gz5RBMG09U!%O}aej6ksUKO=$*sxut*`z!hups<*J!i6f*$ft8|63}dkfHBo@c zz1WBoJ)(eay+ac!On6EFCiQjA9sseD26)x)YN@d%qCh}`P!a`XiF6RqBb-EmWCDT! zZQhJ15F|`YG69g6CIO@Y#0U)R;Q7-4XV1?ccRAfOl^ z{7L~6LKOz?@kYu3cP&Xa*^ZluEtA1w6J|dEYou7vKM0$_hIm0g09iB%2!qI)5jL^d z1(*U%g4qph1lU9b{{<3P_%DQ*_~%Qr2Uw3Y86f{*L@;RlHw2MhkwX0E3kHHLgoRKs z4wH#3$H-iSL*WBK4wGNzay}Gd|I3Ge5h0V=5IHbvAj+a*7)mXM%;kI`{K5x<7|NkG z0+G7lGCrK&F$OIM`8KfG)J`Cn1;NXb`C%YSKm=yN)S@94gi;(NbD1C$Urq=@EG8&G z$ig^+$uNJtm$^kYf(Zz-QJ50PHv#*?hyOcw5MrY&$~-}c17nn8_{LByB;Dd55Qka} z2LlC#IVgpX^q+%K7YRgQ7@;l=i3!XYfms6fBM1ajM~5KfnV=NNL0DvS_;L$52pgih zz(G)uYAc5YV^k3i3l(qygAsx4C$ay=iT`u#Kn!NHsY{3 255: X = X * -1: ENDIF +IF R < 0: X = X * -1: ENDIF +IF G > 255: Y = Y * -1: ENDIF +IF G < 0: Y = Y * -1: ENDIF +IF B > 255: Z = Z * -1: ENDIF +IF B < 0: Z = Z * -1: ENDIF +WAIT 0.005 +PUT "\r" +LOCATE , CURY() - 1 +GOTO LOOP diff --git a/logic.c b/logic.c index 0f6bcc4..6032f60 100644 --- a/logic.c +++ b/logic.c @@ -12,6 +12,7 @@ if (chkCmd(2, "?", "PRINT")) { while (cmd[j] == ' ') j++; if (cmd[j] == 0) {putchar('\n'); return true;} else {j--;} + bool newline = false; bool inStr = false; bool lookingForSpChar = false; bool sawSpChar = false; @@ -35,9 +36,10 @@ if (chkCmd(2, "?", "PRINT")) { int32_t len = strlen(ltmp[1]); int tmpt; if (!(tmpt = getVal(ltmp[1], ltmp[1]))) return true; + newline = false; if (cmd[j] == ',') { - if (tmpt == 255) {putchar('\n');} - else {putchar('\t');} + if (tmpt == 255 && !cmd[j + 1]) {newline = false;} + putchar('\t'); } fputs(ltmp[1], stdout); if (cmd[i] == 0 && len > 0) putchar('\n'); @@ -57,6 +59,7 @@ if (chkCmd(2, "?", "PRINT")) { } } } + if (newline) putchar('\n'); if (pct || bct || inStr) {cerr = 1; return true;} fflush(stdout); return true;