From a2e2d3fa3eaf66ad909ffdd252025d3bb430274e Mon Sep 17 00:00:00 2001 From: PQCraft <58464017+PQCraft@users.noreply.github.com> Date: Sat, 25 Sep 2021 20:08:22 -0400 Subject: [PATCH] 0.22.5 Fixed a bug in PRINT Disabled line numbers when typing in the shell Improve Windows speed problem slightly by reducing the number of times _kbhit() is called Added truecolor to 16-color conversion for non-VT Windows --- clibasic.c | 99 +++++++++++++++++++++------------------------ commands.c | 3 ++ docs/manual.odt | Bin 24842 -> 24929 bytes docs/manual.pdf | Bin 119083 -> 119090 bytes examples/hello.bas | 4 +- examples/input.bas | 8 +++- functions.c | 13 ++---- logic.c | 11 ++++- 8 files changed, 72 insertions(+), 66 deletions(-) diff --git a/clibasic.c b/clibasic.c index 3f77043..1709453 100644 --- a/clibasic.c +++ b/clibasic.c @@ -115,7 +115,7 @@ // Base defines -char VER[] = "0.22.4.1"; +char VER[] = "0.22.5"; #if defined(__linux__) char OSVER[] = "Linux"; @@ -367,8 +367,10 @@ char** rl_tab(const char* text, int start, int end) { #ifdef _WIN32 #define hConsole GetStdHandle(STD_OUTPUT_HANDLE) char* rlptr; +char kbinbuf[256]; bool inrl = false; void cleanExit(); +void cmdIntHndl(); void setcsr() { COORD coord; coord.X = 0; @@ -400,13 +402,32 @@ void enablevt() { } } #endif +void updatechars() { + char kbc; + int i = strlen(kbinbuf) - 1; + while (_kbhit()) { + kbc = _getch(); + if (!((GetKeyState(VK_LCONTROL) | GetKeyState(VK_RCONTROL)) & 0x80)) { + if (kbc == 13) kbc = 10; + else if (kbc == 10) kbc = 13; + } + kbinbuf[++i] = kbc; + if (!textlock) putchar(kbc); + if (kbc == 3) { + //cmdint = true; + cmdIntHndl(); + } + } + kbinbuf[++i] = 0; + fflush(stdout); +} #ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING #define ENABLE_VIRTUAL_TERMINAL_PROCESSING 4 #endif #ifndef WEXITSTATUS #define WEXITSTATUS(x) ((uint8_t)(x)) #endif -char kbinbuf[256]; + #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wimplicit-fallthrough" bool winArgNeedsQuotes(char* str) { @@ -982,20 +1003,6 @@ int main(int argc, char** argv) { progLine = 1; bool comment = false; while (1) { - #ifdef _WIN32 - 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); - #endif rechk:; if (progindex < 0) {inProg = false;} else if (inProg == false) {progindex = - 1;} @@ -1080,18 +1087,7 @@ static inline void cb_wait(uint64_t d) { #else uint64_t t = d + usTime(); while (t > usTime() && !cmdint) { - 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); + updatechars(); } #endif } @@ -1544,30 +1540,29 @@ void updateTxtAttrib() { if (txt_reverse) fputs("\e[7m", stdout); if (txt_underlncolor) printf("\e[58:5:%um", txt_underlncolor); #else - uint8_t tfgc, tbgc; - switch (fgc % 16) { - case 1: tfgc = 4; break; - case 3: tfgc = 6; break; - case 4: tfgc = 1; break; - case 6: tfgc = 3; break; - case 9: tfgc = 12; break; - case 11: tfgc = 14; break; - case 12: tfgc = 9; break; - case 14: tfgc = 11; break; - default: tfgc = fgc; break; - } - switch (bgc % 16) { - case 1: tbgc = 4; break; - case 3: tbgc = 6; break; - case 4: tbgc = 1; break; - case 6: tbgc = 3; break; - case 9: tbgc = 12; break; - case 11: tbgc = 14; break; - case 12: tbgc = 9; break; - case 14: tbgc = 11; break; - default: tbgc = bgc; break; - } - SetConsoleTextAttribute(hConsole, (tfgc % 16) + (tbgc % 16) * 16); + uint8_t tmpfgc, tmpbgc; + if (txt_truecolor) { + uint8_t a; + tmpfgc = (((truefgc >> 23) & 1) << 2) | (((truefgc >> 15) & 1) << 1) | ((truefgc >> 7) & 1); + tmpfgc |= ((((truefgc >> 22) & 1) & ((truefgc >> 21) & 1)) << 2)\ + | ((((truefgc >> 14) & 1) & ((truefgc >> 13) & 1)) << 1)\ + | (((truefgc >> 6) & 1) & ((truefgc >> 5) & 1)); + a = ((((truefgc >> 16) & 0xFF) + ((truefgc >> 8) & 0xFF) + (truefgc & 0xFF)) / 3); + tmpfgc |= (8 * (a > 84)); + tmpbgc = (((truebgc >> 23) & 1) << 2) | (((truebgc >> 15) & 1) << 1) | ((truebgc >> 7) & 1); + tmpbgc |= ((((truebgc >> 22) & 1) & ((truebgc >> 21) & 1)) << 2)\ + | ((((truebgc >> 14) & 1) & ((truebgc >> 13) & 1)) << 1)\ + | (((truebgc >> 6) & 1) & ((truebgc >> 5) & 1)); + a = ((((truebgc >> 16) & 0xFF) + ((truebgc >> 8) & 0xFF) + (truebgc & 0xFF)) / 3); + tmpbgc |= (8 * (a > 84)); + } else { + uint8_t b1 = 0, b2 = 0; + b1 = fgc & 1; b2 = (fgc >> 2) & 1; tmpfgc = (b1 ^ b2); + tmpfgc = (tmpfgc) | (tmpfgc << 2); tmpfgc = fgc ^ tmpfgc; + b1 = bgc & 1; b2 = (bgc >> 2) & 1; tmpbgc = (b1 ^ b2); + tmpbgc = (tmpbgc) | (tmpbgc << 2); tmpbgc = bgc ^ tmpbgc; + } + SetConsoleTextAttribute(hConsole, (tmpfgc % 16) + ((tmpbgc % 16) << 4)); #endif fflush(stdout); } diff --git a/commands.c b/commands.c index fedbbee..9ccffe7 100644 --- a/commands.c +++ b/commands.c @@ -57,6 +57,9 @@ if (chkCmd(3, "@", "LABEL", "LBL")) { gotodata[i].dlsp = dlstackp; gotodata[i].fnsp = fnstackp; gotodata[i].itsp = itstackp; + #ifdef _WIN32 + updatechars(); + #endif goto noerr; } if (chkCmd(3, "%", "GOTO", "GO")) { diff --git a/docs/manual.odt b/docs/manual.odt index 456da07731351a3269b40e81b52b2ce19585ec79..e162b7b3faf3dea5d9a1682945cd1ff926ec5550 100644 GIT binary patch delta 21169 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 delta 21162 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 f^#)%C*CZ2ow&Gsd}#l53Y{4|`rWQl@vDDDW1G z_hm{mFU1Xc?-lttnl?EXg!Tj{i<3%fE>5Z)Fb!NfulS{ZxJeFjKC4MGkD6xjq@n+n zn_ua}hJ7ygQ&-~24$JQ6PNkkjWwZ_XyD#r-JNXgYTymy&N~3pOullBcqSHk`EZ})b zMYj*xG4E37SLbc!BsPD%Ak@<4aN$8|#p)eaPIo`a?4R7=l_@uP_{6rM_c0gR$_@@% z*>uj4EC#0s-7c7_=h9tHjv+o}SER%OcHuP0J~VMJX-EXWgu{GyHJ>ib>CI=~~uzMfGgU z^vo)CFs}M(_w1~S6W$Y#)5d`}H>+J8wdMIiHpAuz*>Qf+zh!=I6diq_Tb-gP-dgX{ zJ+KQ?9tfJg*ePuL!2T-NnUefXB`=m31?%QYk9hah?ur{kDm5P7N!*4f*I~czgVQ%RhK*E zmeCI?)p9qsooI0{Z2qheVXNAdzA@8w)>!r4QWhR=eKS)RsV;NQ{$25PM_J#jtUvqm z!>N}^&PCZ_GniH1ce#+Cn&)j8T=)SQ;J5oPAN3u(qm3!mqHXtM+7w*@!y0*NX^a70 z`9*AXZ?eydh8Q#5pu1sFy{0v~z~J1p*F6u?iVKGf*jC@Bh&&7O?)8Sew)s8m$pep% zU9Oi^Yx`@eauO0&E37R2Z-t7&+CM`cp(Mnla#QBXpX>`-=C*2MJ%*Wx#|PHjvb>NdQa=AXFzbWG06+6&gR zeO;gbFvY?_`&{zcSfd->B~(O)#Kp%d2C<3?K;VMokU>0%Y=j! zP5@dp+$>-WAXH&mfvW*Ysv@-lHvyw6)`tYH>iajey~2e!sam5yX{gG*!et>ogKL7BED{0zCyEpa^(TZB3GmSvfD}#9d<+qQ9F1{Y zir|{ke38<&im%;tL`glKhn*njBLE(HuBh z4+3ubyea50278ysj_jT5gXR^6fCLn8)Eq|8Bjgb-1PsNS7UVFRZw5k$c#W_eM)LQ> zVKgwU)vFhI5DhQOUA zxxq;>2}#m2i~pbVFh41*vN3+MiCifFaaMHUt85vB-U7q>wva*>h%dJqio w^zz~iazfApgE9oT=ZkyN1Su4Yg>mun*!YA=v5K`qZmt+b3hnJZmwE~R21*xxO#lD@ delta 1891 zcmah|eN;?&7~UHxQ;P_LVyF=tx*xy$RZQ+QGj`P`(o$PVndnI9;|vb2kn&OTdC%5~ znv_jLQY+hHrH)cFY9)2VrX)$(4N>cB@9g5}w&(2q=RNOpe$V?n@5eo-HOtkSo&8zH zPCzU#RWE73yJP-*?U?jw_q!LR7ZncqYtXkAgV)5i9c=nzLRfh9SB*o*+hN+$d9w9Z zqi^a0Q-0lJ9fmI47@B61n_T(2FTd}l=iBMyduP87zY`KNC#WR)gSG4J20{+I_On*@2$@L1~+eyEo|Q{-#TreWb=2rW8)p26GYeA?K?Df zC99*3vN?HIX1Q$^rI;lLo{^g*UVITbx@ARYR)vqbL)Wh4DfN<;w4=}oE_cKOXM@Fw z3OvDmeQOqi2w>P;85j!u{tvvf^*lKNzEcG&jXu@9%zy=Z=` zyLXy(C@u|6aL$=K?ZQn%zn<5isnFQm zam6kl$rv$tuZ3mFDZ}0KhgS_c-;=&uA364mU{=&qlaSh0ZBG9lTs!oP`#LX5<#BaW zlkN7-XPR!2^ib$VOX*bmm_<`PGh;hTn-AYGNR?xliQZQB>iuad6u$40xo%tZ!=4#i zl$oBX`s-DjeuyQg;W?>ibf(=mehYL2E3ZxTd_C<=z1P+QKC@1h7UwCdE_+(}IjZ%h z1ud*oebtfPZ}!#t=@I9kcr>Ei|Lgp{j!RNTd9>7Ys3)y9&z6pclej zGSbGS-Al14Y~?H4eIsWKx!UmFHa_XXkEJ?A>(l4H{&Te*i3K&!xpS2(_O`Wet86OV z{L`Phw5|uYZI^=Vaef=__06H%IRz&yRn7XpZHj6bK zwmTgIhe#%Ql!?nGMY#G0fP(g(TTO6*Z3NWJuGKA`mli*Ktu8S(uD(u1zb?0)Vj3RO zW&bqi!SU3`;w@_PN8V3F>X!x0`SBTx9rS3T^(;8+_{>#Do>V|qjcr9$nL%CipQXQp zUP(=Q`nZKD(5OSzj0FVmXk>~S8OSEV3?MWhP=tGT9imNOz|obEvk9QMm`cb6Lb-fn ziVupB4b1l0?>)fRA`3BaG@E3gfUXcB?*BD3=j$ONuDfR2}$7tMELpP!gay`B?MDIc#Oh7=&~R84g)|6gb^5ralxp043Hnm zAGrujBJ20E`IMi68(Q$OV8m<6=De z&#oWfp#Omw{|NfixIT4E!W71-YoIwSqeK1DooWU>zFeI#E 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 +WAITMS LIMIT(10 - TIMERMS(), 0, 10) +RESETTIMER PUT "\r" LOCATE , CURY() - 1 GOTO LOOP diff --git a/examples/input.bas b/examples/input.bas index eb12abc..c99f335 100644 --- a/examples/input.bas +++ b/examples/input.bas @@ -4,9 +4,13 @@ DO L = LEN(K$) IF ASC(K$) <> 0 P = 0 - 'LOCATE 1 + IF _OS$ = "Windows" + LOCATE 16 + ELSE + PUT "\r\t\t" + ENDIF IF ASC(K$, LEN(K$) - 1) = 10: LOCATE , CURY() - 1: ENDIF - PUT "\r\t\t [", LEN(K$), "]" + PUT " [", LEN(K$), "]" DOWHILE P < L PUT ", ", ASC(K$, P) P = P + 1 diff --git a/functions.c b/functions.c index 88e0cc4..0aa8ef9 100644 --- a/functions.c +++ b/functions.c @@ -493,16 +493,9 @@ if (chkCmd(1, "INKEY$")) { } outbuf[obp] = 0; #else - int tmp = 1; - int obp = 0; - while (obp < tmp) { - outbuf[obp] = 0; - outbuf[obp] = kbinbuf[obp]; - kbinbuf[obp] = 0; - if (outbuf[obp] == 0) {break;} - obp++; - } - outbuf[obp] = 0; + updatechars(); + copyStr(kbinbuf, outbuf); + kbinbuf[0] = 0; #endif goto fexit; } diff --git a/logic.c b/logic.c index 6032f60..df391f4 100644 --- a/logic.c +++ b/logic.c @@ -38,7 +38,7 @@ if (chkCmd(2, "?", "PRINT")) { if (!(tmpt = getVal(ltmp[1], ltmp[1]))) return true; newline = false; if (cmd[j] == ',') { - if (tmpt == 255 && !cmd[j + 1]) {newline = false;} + if (tmpt == 255 && !cmd[j + 1]) {newline = true;} putchar('\t'); } fputs(ltmp[1], stdout); @@ -83,6 +83,9 @@ if (chkCmd(1, "DO")) { dlstack[dlstackp].pl = progLine; dlstack[dlstackp].fnsp = fnstackp; dlstack[dlstackp].itsp = itstackp; + #ifdef _WIN32 + updatechars(); + #endif return true; } if (chkCmd(2, "WHILE", "DOWHILE")) { @@ -105,6 +108,9 @@ if (chkCmd(2, "WHILE", "DOWHILE")) { dlstack[dlstackp].cp = cmdpos; dlstack[dlstackp].fnsp = fnstackp; dlstack[dlstackp].itsp = itstackp; + #ifdef _WIN32 + updatechars(); + #endif } dldcmd[dlstackp] = (bool)testval; dldcmd[dlstackp] = !dldcmd[dlstackp]; @@ -278,6 +284,9 @@ if (chkCmd(1, "FOR")) { fnstack[fnstackp].dlsp = dlstackp; fnstack[fnstackp].itsp = itstackp; cerr = 0; + #ifdef _WIN32 + updatechars(); + #endif return true; } if (chkCmd(1, "NEXT")) {