From a4772c6096c28195ad7fffadf9c97f1813b1cab3 Mon Sep 17 00:00:00 2001 From: PQCraft <58464017+PQCraft@users.noreply.github.com> Date: Sat, 18 Sep 2021 23:20:18 -0400 Subject: [PATCH] 0.22 Added file i/o Improved CLS Fixed a compiler warning when using clang Improved program loader to prevent crashing when a virtual device is passed Stopped CLIBASIC from tainting the terminal and breaking sudo and su input (bug in kbhit() function) Updated dead links in README.md Added line number support Fixed a LABEL/GOTO bug Added a manpage Added local (non-root) install support to Makefile --- Makefile | 109 +++-- README.md | 27 +- build.sh | 3 +- clibasic.c | 805 +++++++++++++++++++++++++++---------- commands.c | 269 ++++++++++--- docs/clibasic.man | 74 ++++ docs/clibasic_tmp_cmds.txt | 2 + docs/manual.odt | Bin 21102 -> 24850 bytes docs/manual.pdf | Bin 102427 -> 119060 bytes examples/args.bas | 4 +- examples/bunkerbomb.bas | 24 +- examples/cat.bas | 7 + examples/clock.bas | 18 + examples/executable.bas | 4 +- examples/factorial.bas | 7 +- examples/info.bas | 1 - examples/linenumbers.bas | 3 + examples/speedtestfast.bas | 2 +- examples/test.bas | 14 +- functions.c | 377 ++++++++++++++++- logic.c | 69 +++- package.sh | 45 +-- 22 files changed, 1477 insertions(+), 387 deletions(-) create mode 100644 docs/clibasic.man create mode 100644 examples/cat.bas create mode 100644 examples/clock.bas create mode 100644 examples/linenumbers.bas diff --git a/Makefile b/Makefile index 216ce69..b8192b9 100644 --- a/Makefile +++ b/Makefile @@ -1,21 +1,28 @@ BASE_CFLAGS = --std=c99 -Wall -Wextra -Ofast -lm -lreadline -ifdef OS -ifeq ($(findstring :/, $(PATH)), :/) -IS_LINUX = true -else -IS_LINUX = false -endif -else -IS_LINUX = true -endif - -ifeq ($(IS_LINUX), true) +ifndef OS C = gcc CFLAGS = $(BASE_CFLAGS) ifeq ($(shell uname -s), Darwin) -CFLAGS += -I/usr/local/opt/readline/include -L/usr/local/opt/readline/lib +ifeq ($(shell [ -d ~/.brew/opt/readline/include ] && echo true), true) +CFLAGS += -I~/.brew/opt/readline/include +endif +ifeq ($(shell [ -d /opt/homebrew/opt/readline/include ] && echo true), true) +CFLAGS += -I/opt/homebrew/opt/readline/include +endif +ifeq ($(shell [ -d /usr/local/opt/readline/include ] && echo true), true) +CFLAGS += -I/usr/local/opt/readline/include +endif +ifeq ($(shell [ -d ~/.brew/opt/readline/lib ] && echo true), true) +CFLAGS += -L~/.brew/opt/readline/lib +endif +ifeq ($(shell [ -d /opt/homebrew/opt/readline/lib ] && echo true), true) +CFLAGS += -L/opt/homebrew/opt/readline/lib +endif +ifeq ($(shell [ -d /usr/local/opt/readline/lib ] && echo true), true) +CFLAGS += -L/usr/local/opt/readline/lib +endif else ifeq ($(shell uname -o), Android) CFLAGS += -s @@ -26,17 +33,33 @@ endif CBITS = $(shell getconf LONG_BIT) -BUILD_TO = "clibasic" -BUILD__ = $(C) clibasic.c $(CFLAGS) -DB$(CBITS) -o $(BUILD_TO) && chmod +x $(BUILD_TO) +BUILD_TO = clibasic BUILD32 = $(C) clibasic.c -m32 $(CFLAGS) -DB32 -o $(BUILD_TO) && chmod +x $(BUILD_TO) +ifeq (,$(CBITS)) +BUILD__ = $(BUILD32) +else +BUILD__ = $(C) clibasic.c $(CFLAGS) -DB$(CBITS) -o $(BUILD_TO) && chmod +x $(BUILD_TO) +endif + +MAN_PATH = docs/clibasic.man + +ifeq ($(shell id -u), 0) +MAN_INSTALL_PATH = /usr/share/man/man1/clibasic.1 +INSTALL_TO = /usr/bin/clibasic +else +MAN_INSTALL_PATH = ~/.local/share/man/man1/clibasic.1 +INSTALL_TO = ~/.local/bin/clibasic +endif +INSTALL = mkdir -p $(shell dirname -- $(INSTALL_TO)) $(shell dirname -- $(MAN_INSTALL_PATH)); cp $(BUILD_TO) $(INSTALL_TO); cp $(MAN_PATH) $(MAN_INSTALL_PATH); gzip -f $(MAN_INSTALL_PATH) -INSTALL_TO = "/usr/bin/clibasic" -INSTALL = if [ "$$(id -u)" -eq 0 ]; then cp $(BUILD_TO) $(INSTALL_TO); else echo "Root privileges are needed to install."; fi +UNINSTALL = rm -f $(INSTALL_TO) $(MAN_INSTALL_PATH).gz -RUN = ./clibasic +RUN = ./$(BUILD_TO) CLEAN = rm -f clibasic +.ONESHELL: + .PHONY: all all32 build build32 update install install32 run clean cross all: clean build run @@ -54,38 +77,58 @@ update: ([[ ! "$$I" =~ ^[^Yy]$$ ]] && sh -c 'git restore . && git pull' &> /dev/null && chmod +x *.sh) || exit 0 install: - if [ ! -f $(INSTALL_TO) ]; then $(BUILD__); fi + if [ ! -f $(BUILD_TO) ]; then $(BUILD__); fi $(INSTALL) install32: - if [ ! -f $(INSTALL_TO) ]; then $(BUILD32); fi + if [ ! -f $(BUILD_TO) ]; then $(BUILD32); fi $(INSTALL) +uninstall: + $(UNINSTALL) + run: +ifeq (32,$(CBITS)) + [ ! -f "$(BUILD_TO)" ] && ($(BUILD32)) +else + [ ! -f "$(BUILD_TO)" ] && ($(BUILD__)) +endif $(RUN) clean: $(CLEAN) -.ONESHELL: - cross: ifeq ($(MAKECMDGOALS), cross) @$(MAKE) cross all else @$(eval C = x86_64-w64-mingw32-gcc) @$(eval C32 = i686-w64-mingw32-gcc) - @$(eval CFLAGS = $(BASE_CFLAGS) -Ilib) - @$(eval BUILD_TO = "clibasic.exe") - @$(eval BUILD__ = cp -f lib/win64/*.dll . && $(C) clibasic.c $(CFLAGS) -Llib/win64 -DB$(CBITS) -o $(BUILD_TO) && chmod -x ./clibasic.exe) - @$(eval BUILD32 = cp -f lib/win32/*.dll . && $(C32) clibasic.c -m32 $(CFLAGS) -Llib/win32 -DB32 -o $(BUILD_TO) && chmod -x ./clibasic.exe) - @$(eval INSTALL_TO = "$$HOME/.wine/drive_c/windows/system32") + @$(eval CFLAGS = $(BASE_CFLAGS) -s -Ilib) + @$(eval BUILD_TO = clibasic.exe) + @$(eval INSTALL_TO = "$$HOME/.wine/drive_c/windows/system32/") @$(eval INSTALL = cp $(BUILD_TO) *.dll $(INSTALL_TO)) - @$(eval RUN = wineconsole clibasic.exe) + @$(eval BUILD32 = cp -f lib/win32/*.dll . && $(C32) clibasic.c -m32 $(CFLAGS) -Llib/win32 -DB32 -o $(BUILD_TO) && chmod -x $(BUILD_TO)) +ifeq (,$(CBITS)) + @$(eval BUILD__ = $(BUILD32)) +else + @$(eval BUILD__ = cp -f lib/win64/*.dll . && $(C) clibasic.c $(CFLAGS) -Llib/win64 -DB$(CBITS) -o $(BUILD_TO) && chmod -x $(BUILD_TO)) +endif + @$(eval RUN = wineconsole .\\$(BUILD_TO)) @$(eval CLEAN = rm -f clibasic.exe *.dll) endif @true +vt: + @$(eval CFLAGS = $(CFLAGS) -DFORCE_VT) + @$(eval BUILD32 = cp -f lib/win32/*.dll . && $(C32) clibasic.c -m32 $(CFLAGS) -Llib/win32 -DB32 -o $(BUILD_TO) && chmod -x $(BUILD_TO)) +ifeq (,$(CBITS)) + @$(eval BUILD__ = $(BUILD32)) +else + @$(eval BUILD__ = cp -f lib/win64/*.dll . && $(C) clibasic.c $(CFLAGS) -Llib/win64 -DB$(CBITS) -o $(BUILD_TO) && chmod -x $(BUILD_TO)) +endif + @true + else C = gcc @@ -96,9 +139,11 @@ BUILD_TO = clibasic.exe BUILD64 = xcopy lib\win64\*.dll . /Y && $(C) clibasic.c -m64 $(CFLAGS) -Llib\win64 -DB64 -o $(BUILD_TO) BUILD32 = xcopy lib\win32\*.dll . /Y && $(C) clibasic.c -m32 $(CFLAGS) -Llib\win32 -DB32 -o $(BUILD_TO) -INSTALL_TO = "C:\\windows\\system32" +INSTALL_TO = C:\windows\system32 INSTALL = xcopy *.dll $(INSTALL_TO) /Y && xcopy $(BUILD_TO) $(INSTALL_TO) /Y +UNINSTALL = del $(INSTALL_TO)\\$(BUILD_TO) + .PHONY: all all32 build build32 update run clean all: clean build run @@ -128,5 +173,13 @@ run: clean: del /q /f $(BUILD_TO) *.dll +vt: +ifeq ($(MAKECMDGOALS), vt) + @$(MAKE) vt all +else + @$(eval CFLAGS = $(CFLAGS) -DFORCE_VT) +endif + @echo > nul + endif diff --git a/README.md b/README.md index 7aea45e..a4c24dd 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Debian (`apt`): `build-essential`, `libreadline-dev`
Arch (`pacman`): `base-devel`, `readline`
Alpine (`apk`): `build-base`, `readline-dev`
#### Windows
-NT - 10 (download): [`MinGW`](http://mingw-w64.org/doku.php/download/mingw-builds), [`Make for Windows`](http://gnuwin32.sourceforge.net/packages/make.htm)
+NT - 10 (download): [`MinGW`](http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/installer/mingw-w64-install.exe/download), [`Make for Windows`](http://gnuwin32.sourceforge.net/packages/make.htm)
7 - 10 (`choco`): `mingw`, `make`
#### MacOS
Mojave - Big Sur (`brew`): `gcc`, `make`, `readline`
@@ -31,15 +31,36 @@ Mojave - Big Sur (`brew`): `git`
--- ### Building and Running
-#### Linux/Windows/MacOS
+#### Linux/MacOS
To build, use `make build`.
To run, use `make run` or `./clibasic`.
To build then run, use `make` (same as `make all`).
+#### Windows
+Make sure the bin of MinGW is in the %PATH%. +- Type `gcc` into CMD and if you received a "Can't recognize" message, MinGW is not in your %PATH%. +To add MinGW to the %PATH% if you used the downloaded installer: +1. Navigate to where you installed MinGW +2. Open the `mingw64` folder +3. Open the `bin` folder +4. Copy the location +5. Add the location you copied to the %PATH% environment variable + - For Windows 7 and older + 1. Open the Start Menu + 2. Right-click on Computer and click Properties + 3. Click Advanced system settings + 4. Click the Advanced tab + 5. Click Environment Variables + 6. Under System variables, find Path and click Edit + - For Windows 8 and newer + 1. Open the Start Menu + 2. Search for and run 'Edit the system environment variables' + 3. Click Environment Variables + 4. Under System variables, find Path and click Edit --- ### Notes
- On Arch Linux, you can install CLIBASIC by installing either the [`clibasic`](https://aur.archlinux.org/packages/clibasic/) or [`clibasic-bin`](https://aur.archlinux.org/packages/clibasic-bin/) AUR package. -- If CLIBASIC is not run in a terminal on unix-like OSs it will, unless GUI_CHECK is not defined, attempt to open in XTerm and skip reading arguments. +- On unix-like OSs, if CLIBASIC is not run in a terminal it will attempt to open in XTerm unless GUI_CHECK is undefined. - 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. diff --git a/build.sh b/build.sh index a50d35a..1b86126 100644 --- a/build.sh +++ b/build.sh @@ -1,5 +1,6 @@ -# tests if clibasic build on linux and windows successfully +# tests if clibasic builds on linux and windows successfully make build clean +make cross vt build clean make cross build clean diff --git a/clibasic.c b/clibasic.c index 83dab03..5878274 100644 --- a/clibasic.c +++ b/clibasic.c @@ -115,7 +115,7 @@ // Base defines -char VER[] = "0.21.1"; +char VER[] = "0.22"; #if defined(__linux__) char OSVER[] = "Linux"; @@ -143,13 +143,17 @@ char VER[] = "0.21.1"; char BVER[] = "?"; #endif +#if defined(FORCE_VT) && defined(_WIN_NO_VT) + #undef _WIN_NO_VT +#endif + // Global vars and functions int progindex = -1; char** progbuf = NULL; char** progfn = NULL; char* progfnstr = NULL; -int64_t* progcp = NULL; +int32_t* progcp = NULL; int* progcmdl = NULL; int* proglinebuf = NULL; @@ -204,7 +208,9 @@ bool itdcmd[CB_PROG_LOGIC_MAX]; int itstackp = -1; int* minitstackp = NULL; bool didelse = false; +bool didelseif = false; bool* olddidelse = NULL; +bool* olddidelseif = NULL; cb_jump fnstack[CB_PROG_LOGIC_MAX]; bool fndcmd[CB_PROG_LOGIC_MAX]; @@ -229,7 +235,7 @@ int curx = 0; int cury = 0; int concp = 0; -int64_t cp = 0; +int32_t cp = 0; bool cmdint = false; bool inprompt = false; @@ -276,6 +282,8 @@ char* startcmd = NULL; bool changedtitle = false; bool changedtitlecmd = false; +int retval = 0; + typedef struct { int pl; int32_t cp; @@ -291,37 +299,39 @@ cb_goto** proggotodata = NULL; int gotomaxct = 0; int* proggotomaxct = NULL; -#ifdef __unix__ +typedef struct { + FILE* fptr; + int32_t size; +} cb_file; + +cb_file* filedata = NULL; +int filemaxct = 0; +int fileerror = 0; + +#ifndef _WIN32 struct termios term, restore; +struct termios kbhterm, kbhterm2; void txtqunlock() {if (textlock || sneaktextlock) {tcsetattr(0, TCSANOW, &restore); textlock = false;}} int kbhit() { - static const int STDIN = 0; - static bool initialized = false; - if (!initialized) { - struct termios term; - tcgetattr(STDIN, &term); - term.c_lflag &= ~ICANON; - tcsetattr(STDIN, TCSANOW, &term); - setbuf(stdin, NULL); - initialized = true; - } - int bytesWaiting; - ioctl(STDIN, FIONREAD, &bytesWaiting); - return bytesWaiting; + int byteswaiting; + ioctl(0, FIONREAD, &byteswaiting); + return byteswaiting; } + +sigset_t intmask, oldmask; #endif static inline void* setsig(int sig, void* func) { - #ifdef __unix__ + #ifndef _WIN32 struct sigaction act, old; memset (&act, 0, sizeof(act)); memset (&old, 0, sizeof(old)); sigemptyset(&act.sa_mask); sigaddset(&act.sa_mask, sig); act.sa_handler = func; - act.sa_flags = SA_RESTART; + //act.sa_flags = SA_RESTART; sigaction(sig, &act, &old); return old.sa_handler; #else @@ -375,6 +385,9 @@ void txtqunlock() {} #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" @@ -415,11 +428,11 @@ uint64_t tval; void* oldsigh = NULL; -void nokill() { +static inline void nokill() { if (!oldsigh) oldsigh = setsig(SIGINT, nokill); } -void yeskill() { +static inline void yeskill() { setsig(SIGINT, oldsigh); oldsigh = NULL; } @@ -427,24 +440,24 @@ void yeskill() { void forceExit() { #ifndef _WIN32 txtqunlock(); + tcsetattr(0, TCSANOW, &kbhterm); #endif exit(0); } static inline void getCurPos(); - -char* gethome(); - -inline void initBaseMem(); -inline void freeBaseMem(); - -void printError(int); - +static inline char* gethome(); +static inline void initBaseMem(); +static inline void freeBaseMem(); +static inline void printError(int); static inline void seterrstr(char*); - void unloadAllProg(); - -char* basefilename(char*); +static inline char* basefilename(char*); +static inline char* pathfilename(char*); +int openFile(char*, char*); +bool closeFile(int); +static inline void upCase(char*); +uint8_t logictest(char*); void cleanExit() { txtqunlock(); @@ -457,11 +470,14 @@ void cleanExit() { putchar('\n'); rl_on_new_line(); rl_replace_line("", 0); - rl_redisplay(); + rl_pending_input = false; + rl_forced_update_display(); return; } setsig(SIGINT, forceExit); setsig(SIGTERM, forceExit); + fflush(stdout); + closeFile(-1); int ret = chdir(gethome()); (void)ret; if (autohist && !runfile) { @@ -478,14 +494,10 @@ void cleanExit() { #else if (!keep) SetConsoleTextAttribute(hConsole, ocAttrib); #endif - do {getCurPos();} while (!curx); - if (curx != 1) putchar('\n'); - #ifdef __unix__ + #ifndef _WIN32 int i = kbhit(); while (i > 0) {getchar(); i--;} - #endif - #ifndef _WIN_NO_VT - fputs("\e[2K", stdout); + tcsetattr(0, TCSANOW, &kbhterm); #endif freeBaseMem(); exit(err); @@ -507,18 +519,20 @@ void runcmd(); static inline void copyStr(char*, char*); static inline void copyStrApnd(char*, char*); #endif +static inline void copyStrApndNoEsc(char*, char*); +static inline void copyStrTo(char*, int32_t, char*); static inline void copyStrSnip(char*, int32_t, int32_t, char*); uint8_t getVal(char*, char*); static inline void resetTimer(); bool loadProg(char*); void unloadProg(); void updateTxtAttrib(); -static inline bool isFile(); +static inline int isFile(); static inline uint64_t usTime(); -char* gethome() { +static inline char* gethome() { if (!homepath) { - #ifdef __unix__ + #ifndef _WIN32 homepath = getenv("HOME"); #else char* str1 = getenv("HOMEDRIVE"); @@ -533,7 +547,7 @@ char* gethome() { char* bfnbuf = NULL; -char* basefilename(char* fn) { +static inline char* basefilename(char* fn) { int32_t fnlen = strlen(fn); int32_t i; for (i = fnlen; i > -1; --i) { @@ -546,7 +560,7 @@ char* basefilename(char* fn) { return bfnbuf; } -char* pathfilename(char* fn) { +static inline char* pathfilename(char* fn) { int32_t fnlen = strlen(fn); int32_t i; for (i = fnlen; i > -1; --i) { @@ -555,11 +569,11 @@ char* pathfilename(char* fn) { if (fn[i] == '\\') break; #endif } - copyStrSnip(fn, 0, i + 1, bfnbuf); + copyStrTo(fn, i + 1, bfnbuf); return bfnbuf; } -void ttycheck() { +static inline void ttycheck() { if (!isatty(STDERR_FILENO)) {exit(1);} if (!isatty(STDIN_FILENO)) {fputs("CLIBASIC does not support STDIN redirection.\n", stderr); exit(1);} if (!isatty(STDOUT_FILENO)) {fputs("CLIBASIC does not support STDOUT redirection.\n", stderr); exit(1);} @@ -569,8 +583,14 @@ 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 'echo -e -n \"\x1b[\x33 q\" && ", command); - copyStrApnd(argv[0], 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; + copyStrApndNoEsc(argv[i], gpbuf); + copyStrApndNoEsc(gpbuf, command); + copyStrApnd("\\'", command); + } strApndChar(command, '\''); int ret = system(command); free(command); @@ -602,17 +622,17 @@ int main(int argc, char** argv) { pexit = true; } else if (!strcmp(argv[i], "--help")) { if (argc > 2) {fputs("Incorrect number of options passed.\n", stderr); exit(1);} - printf("Usage: %s [options] {[[{-f|--file}] FILE] [options] [--args [ARG...]] | --exec FILE [ARG...]}\n", argv[0]); + printf("Usage: %s [OPTION]...\n", argv[0]); puts("Options:"); - puts(" --help Shows this help text."); - puts(" --version Shows the version and license information."); - puts(" --args [ARG...] Passes ARGs to the program."); - puts(" {-x|--exec} FILE [ARG...] Runs and passes ARGs to FILE."); - puts(" {-f|--file} FILE Runs FILE."); - puts(" {-c|--command} COMMAND Runs COMMAND and exits."); - puts(" {-k|--keep} Stops CLIBASIC from resetting text attributes."); - puts(" {-s|--skip} Skips searching for autorun programs."); - puts(" {-i|--info} Enables the info text."); + puts(" --help Displays this help text."); + puts(" --version Displays the version and license information."); + puts(" --args [ARG]... Passes ARGs to the program."); + puts(" -x, --exec FILE [ARG]... Runs and passes ARGs to FILE, then exits."); + puts(" -f, --file FILE Runs FILE and exits."); + puts(" -c, --command COMMAND Runs COMMAND and exits."); + puts(" -k, --keep Stops CLIBASIC from resetting text attributes before exiting."); + puts(" -s, --skip Skips searching for autorun programs."); + puts(" -i, --info Displays an info string when starting in shell mode."); pexit = true; } else if (!strcmp(argv[i], "--args")) { if (runc || !runfile) {fputs("Args can only be passed when running a program.\n", stderr); exit(1);} @@ -657,6 +677,21 @@ int main(int argc, char** argv) { runc = true; runfile = true; copyStr(argv[i], conbuf); + bool inStr = false; + bool inCmd = true; + for (int32_t i = 0; conbuf[i]; ++i) { + switch (conbuf[i]) { + case 'a' ... 'z': + if (!inStr || inCmd) conbuf[i] = conbuf[i] - 32; + break; + case '"': + if (!inCmd) inStr = !inStr; + break; + case ' ': + if (!inStr && inCmd) inCmd = false; + break; + } + } } else if (shortopt && (argv[i][shortopti] == 'c' || argv[i][shortopti] == 'f' || argv[i][shortopti] == 'x')) { fprintf(stderr, "Short option '%c' requires argument and cannot be grouped.\n", argv[i][shortopti]); exit(1); } else { @@ -681,6 +716,14 @@ int main(int argc, char** argv) { } if (pexit) exit(0); ttycheck(); + #ifndef _WIN32 + tcgetattr(0, &kbhterm); + kbhterm2 = kbhterm; + kbhterm2.c_lflag &= ~ICANON; + tcsetattr(0, TCSANOW, &kbhterm2); + sigemptyset(&intmask); + sigaddset(&intmask, SIGINT); + #endif rl_readline_name = "CLIBASIC"; char* rl_tmpptr = calloc(1, 1); rl_completion_entry_function = rl_get_tab; @@ -744,7 +787,7 @@ int main(int argc, char** argv) { #endif #else uint32_t tmpsize = CB_BUF_SIZE; - if (_NSGetExecutablePath(startcmd, &size)) { + if (_NSGetExecutablePath(startcmd, &tmpsize)) { goto scargv; } char* tmpstartcmd = realpath(startcmd, NULL); @@ -779,7 +822,7 @@ int main(int argc, char** argv) { if (info) printf("Command Line Interface BASIC version %s (%s %s-bit)\n", VER, OSVER, BVER); strcpy(prompt, "\"CLIBASIC> \""); #ifdef CHANGE_TITLE - #ifdef __unix__ + #ifndef _WIN32 fputs("\e[22;0t", stdout); changedtitle = true; printf("\e]2;CLIBASIC %s (%s-bit)%c", VER, BVER, 7); @@ -799,16 +842,16 @@ int main(int argc, char** argv) { srand(usTime()); if (!runfile) { if (!gethome()) { - #ifdef __unix__ - fputs("Could not find home folder! Please set the 'HOME' environment variable.", stderr); + #ifndef _WIN32 + fputs("Could not find home folder! Please set the 'HOME' environment variable.\n", stderr); #else - fputs("Could not find home folder!", stderr); + fputs("Could not find home folder!\n", stderr); #endif } else if (!skip) { char* tmpcwd = getcwd(NULL, 0); int ret = chdir(homepath); FILE* tmpfile = fopen(HIST_FILE, "r"); - if ((autohist = (bool)tmpfile)) {fclose(tmpfile); read_history(HIST_FILE);} + if ((autohist = (tmpfile != NULL))) {fclose(tmpfile); read_history(HIST_FILE);} inProg = true; if (!loadProg("AUTORUN.BAS")) if (!loadProg("autorun.bas")) inProg = false; ret = chdir(tmpcwd); @@ -845,7 +888,7 @@ int main(int argc, char** argv) { int tmpt = getVal(prompt, pstr); if (tmpt != 1) strcpy(pstr, "CLIBASIC> "); getCurPos(); - #ifdef __unix__ + #ifndef _WIN32 curx--; int32_t ptr = strlen(pstr); while (curx > 0) {pstr[ptr] = 22; ptr++; curx--;} @@ -859,14 +902,14 @@ int main(int argc, char** argv) { setsig(SIGINT, rl_sigh); #endif conbuf[0] = 0; - #ifdef __unix__ + #ifndef _WIN32 setsig(SIGINT, cleanExit); #endif txtqunlock(); tmpstr = readline(pstr); concp = 0; inprompt = false; - if (!tmpstr) cleanExit(); + if (!tmpstr) {err = 0; cleanExit();} int32_t tmpptr; if (tmpstr[0] == 0) {free(tmpstr); goto brkproccmd;} for (tmpptr = 0; tmpstr[tmpptr] == ' '; ++tmpptr) {} @@ -888,12 +931,28 @@ int main(int argc, char** argv) { if (!tmphist || strcmp(tmpstr, tmphist->line)) add_history(tmpstr); copyStr(tmpstr, conbuf); free(tmpstr); + bool inStr = false; + bool inCmd = true; + for (int32_t i = 0; conbuf[i]; ++i) { + switch (conbuf[i]) { + case 'a' ... 'z': + if (!inStr || inCmd) conbuf[i] = conbuf[i] - 32; + break; + case '"': + if (!inCmd) inStr = !inStr; + break; + case ' ': + if (!inStr && inCmd) inCmd = false; + break; + } + } cmdint = false; } if (runc) runc = false; cmdl = 0; didloop = false; didelse = false; + didelseif = false; bool inStr = false; if (!runfile) setsig(SIGINT, cmdIntHndl); progLine = 1; @@ -929,11 +988,12 @@ int main(int argc, char** argv) { copyStrSnip(progbuf[progindex], cp - cmdl, cp, cmd); cmdl = 0; runcmd(); - if (cmdint) {inProg = false; unloadAllProg(); cmdint = false; goto brkproccmd;} - if (cp == -1) {inProg = false; unloadAllProg(); goto brkproccmd;} + if (cmdint) {err = 0; inProg = false; unloadAllProg(); cmdint = false; goto brkproccmd;} + if (cp == -1) {err = 0; inProg = false; unloadAllProg(); goto brkproccmd;} if (cp > -1 && progbuf[progindex][cp] == 0) { unloadProg(); if (progindex < 0) { + err = 0; inProg = false; goto rechk; } else { @@ -966,7 +1026,7 @@ int main(int argc, char** argv) { } } brkproccmd:; - #ifdef __unix__ + #ifndef _WIN32 setsig(SIGINT, cleanExit); #endif txtqunlock(); @@ -990,27 +1050,41 @@ static inline void resetTimer() { } static inline void cb_wait(uint64_t d) { - #ifdef __unix__ + #ifndef _WIN32 struct timespec dts; dts.tv_sec = d / 1000000; dts.tv_nsec = (d % 1000000) * 1000; nanosleep(&dts, NULL); #else uint64_t t = d + usTime(); - while (t > usTime() && !cmdint) {} + 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; + } + } + fflush(stdout); + } + } #endif } -static inline bool isFile(char* path) { +static inline int isFile(char* path) { struct stat pathstat; - stat(path, &pathstat); + if (stat(path, &pathstat)) return -1; return !(S_ISDIR(pathstat.st_mode)); } #ifndef _WIN32 - int gcpret, gcpi; -__sighandler_t gcpoldsigh; +void (*gcpoldsigh)(int); bool gcpint = false; void gcpsigh() { @@ -1022,6 +1096,7 @@ void gcpsigh() { return; } +bool gcp_sig = true; #endif static inline void getCurPos() { @@ -1030,7 +1105,8 @@ static inline void getCurPos() { #ifndef _WIN32 char buf[16]; register int i; - nokill(); + //nokill(); + if (gcp_sig) pthread_sigmask(SIG_SETMASK, &intmask, &oldmask); i = kbhit(); while (i > 0) {getchar(); i--;} if (!textlock) { @@ -1042,16 +1118,22 @@ static inline void getCurPos() { } fputs("\e[6n", stdout); fflush(stdout); - while (!(gcpi += kbhit())) {} + i = 0; + gcpi = 0; + while (!gcpi) {gcpi = kbhit();} + while (i) {gcpi += i = kbhit();} gcpret = read(1, &buf, gcpi + 1); if (!textlock) { tcsetattr(0, TCSANOW, &restore); sneaktextlock = false; } - yeskill(); - if (!gcpret) return; - if (cmdint) {cmdint = false; return;} - sscanf(buf, "\e[%d;%dR", &cury, &curx); + i = kbhit(); + while (i > 0) {getchar(); i--;} + //yeskill(); + //if (cmdint) {cmdint = false; return;} + if (gcpret != gcpi) {gcp_sig = false; getCurPos(); gcp_sig = true;} + else {sscanf(buf, "\e[%d;%dR", &cury, &curx);} + if (gcp_sig) pthread_sigmask(SIG_SETMASK, &oldmask, NULL); #else CONSOLE_SCREEN_BUFFER_INFO con; GetConsoleScreenBufferInfo(hConsole, &con); @@ -1060,7 +1142,7 @@ static inline void getCurPos() { #endif } -void unloadProg() { +void unloadProg() { if (progindex > 0) progfnstr = progfn[progindex - 1]; free(progbuf[progindex]); free(progfn[progindex]); @@ -1074,16 +1156,18 @@ void unloadProg() { cmdl = progcmdl[progindex]; progLine = proglinebuf[progindex]; didelse = olddidelse[progindex]; + didelseif = olddidelseif[progindex]; dlstackp = mindlstackp[progindex]; itstackp = minitstackp[progindex]; fnstackp = minfnstackp[progindex]; - progcp = (int64_t*)realloc(progcp, progindex * sizeof(int64_t)); + progcp = (int32_t*)realloc(progcp, progindex * sizeof(int32_t)); progcmdl = (int*)realloc(progcmdl, progindex * sizeof(int)); proglinebuf = (int*)realloc(proglinebuf, progindex * sizeof(int)); mindlstackp = (int*)realloc(mindlstackp, progindex * sizeof(int)); minitstackp = (int*)realloc(minitstackp, progindex * sizeof(int)); minfnstackp = (int*)realloc(minfnstackp, progindex * sizeof(int)); olddidelse = (bool*)realloc(olddidelse, progindex * sizeof(bool)); + olddidelseif = (bool*)realloc(olddidelseif, progindex * sizeof(bool)); proggotodata = (cb_goto**)realloc(proggotodata, progindex * sizeof(cb_goto*)); proggotomaxct = (int*)realloc(proggotomaxct, progindex * sizeof(int)); progindex--; @@ -1097,6 +1181,7 @@ void unloadAllProg() { } bool loadProg(char* filename) { + retval = 0; fputs("Loading...", stdout); fflush(stdout); seterrstr(filename); @@ -1148,12 +1233,13 @@ bool loadProg(char* filename) { progfnstr = progfn[progindex]; ++progindex; progbuf = (char**)realloc(progbuf, progindex * sizeof(char*)); - progcp = (int64_t*)realloc(progcp, progindex * sizeof(int64_t)); + progcp = (int32_t*)realloc(progcp, progindex * sizeof(int32_t)); progcmdl = (int*)realloc(progcmdl, progindex * sizeof(int)); proglinebuf = (int*)realloc(proglinebuf, progindex * sizeof(int)); mindlstackp = (int*)realloc(mindlstackp, progindex * sizeof(int)); minitstackp = (int*)realloc(minitstackp, progindex * sizeof(int)); olddidelse = (bool*)realloc(olddidelse, progindex * sizeof(bool)); + olddidelseif = (bool*)realloc(olddidelseif, progindex * sizeof(bool)); minfnstackp = (int*)realloc(minfnstackp, progindex * sizeof(int)); proggotodata = (cb_goto**)realloc(proggotodata, progindex * sizeof(cb_goto*)); proggotomaxct = (int*)realloc(proggotomaxct, progindex * sizeof(int)); @@ -1173,9 +1259,10 @@ bool loadProg(char* filename) { cmdl = 0; progLine = 1; didelse = false; + didelseif = false; getCurPos(); int tmpx = curx, tmpy = cury; - uint32_t fsize = (uint32_t)ftell(prog); + int32_t fsize = (uint32_t)ftell(prog); uint64_t time2 = usTime(); fseek(prog, 0, SEEK_SET); #ifndef _WIN_NO_VT @@ -1186,7 +1273,7 @@ bool loadProg(char* filename) { printf("(%llu bytes)...", (long long unsigned)fsize); fflush(stdout); progbuf[progindex] = (char*)malloc(fsize + 1); - int64_t j = 0; + int32_t j = 0; bool comment = false; bool inStr = false; #ifndef _WIN_NO_VT @@ -1196,13 +1283,14 @@ bool loadProg(char* filename) { #endif printf("(0/%llu bytes)...", (long long unsigned)fsize); fflush(stdout); - while (!feof(prog)) { + while (j < fsize && !feof(prog)) { int tmpc = fgetc(prog); if (tmpc == '"') inStr = !inStr; if (!inStr && (tmpc == '\'' || tmpc == '#')) comment = true; if (tmpc == '\n') comment = false; if (tmpc == '\r' || tmpc == '\t') tmpc = ' '; - if (!comment) {progbuf[progindex][j] = (char)tmpc; j++;} + if (tmpc < 0) tmpc = 0; + if (!comment) {progbuf[progindex][j] = (char)((inStr) ? tmpc : ((tmpc >= 'a' && tmpc <= 'z') ? tmpc -= 32 : tmpc)); j++;} if (usTime() - time2 >= 250000) { time2 = usTime(); #ifndef _WIN_NO_VT @@ -1234,8 +1322,7 @@ bool loadProg(char* filename) { #endif putchar('\r'); fflush(stdout); - if (j < 1) j = 1; - progbuf[progindex][j - 1] = 0; + progbuf[progindex][j] = 0; fclose(prog); return true; } @@ -1293,6 +1380,25 @@ static inline bool isSpChar(char c) { } } +static inline bool isExSpChar(char c) { + switch (c) { + case '+': + case '-': + case '*': + case '/': + case '^': + case '=': + case '<': + case '>': + case ',': + return true; + break; + default: + return false; + break; + } +} + static inline bool isValidVarChar(char c) { switch (c) { case 'A' ... 'Z': @@ -1330,48 +1436,60 @@ static inline bool isValidHexChar(char c) { #ifndef BUILT_IN_STRING_FUNCS static inline void copyStr(char* str1, char* str2) { - int32_t i; - for (i = 0; str1[i]; ++i) {str2[i] = str1[i];} - str2[i] = 0; + for (; *str1; ++str1, ++str2) {*str2 = *str1;} + *str2 = 0; } static inline void copyStrApnd(char* str1, char* str2) { - int32_t j = 0, i = 0; - for (i = strlen(str2); str1[j]; ++i) {str2[i] = str1[j]; ++j;} - str2[i] = 0; + while (*str2) {++str2;} + for (; *str1; ++str1, ++str2) {*str2 = *str1;} + *str2 = 0; } #endif +static inline void copyStrApndNoEsc(char* str1, char* str2) { + while (*str2) {++str2;} + for (; *str1; ++str1, ++str2) { + if ((*str2 = *str1) == '\\') {*str2 = '\\';} + if (*str1 == '\'') {*str2 = '\\'; *++str2 = '\'';} + } + *str2 = 0; +} + static inline void copyStrSnip(char* str1, int32_t i, int32_t j, char* str2) { - int32_t i2 = 0; - for (; i < j && str1[i]; ++i) {str2[i2] = str1[i]; ++i2;} - str2[i2] = 0; + str1 += i; + for (; i < j && *str1; ++str1, ++str2, ++i) {*str2 = *str1;} + *str2 = 0; } static inline void copyStrTo(char* str1, int32_t i, char* str2) { int32_t i2 = 0; - int32_t i3; - for (i3 = i; str1[i]; ++i) {str2[i3] = str1[i2]; ++i2; ++i3;} - str2[i3] = 0; + for (; *str1 && i2 < i; ++str1, ++str2, ++i2) {*str2 = *str1;} + *str2 = 0; +} + +static inline void copyStrFrom(char* str1, int32_t i, char* str2) { + str1 += i; + for (; *str1; ++str1, ++str2) {*str2 = *str1;} + *str2 = 0; } static inline void strApndChar(char* str, char c) { - int32_t len = 0; - while (str[len]) {len++;} - str[len] = c; - len++; - str[len] = 0; + while (*str) {++str;} + *str = c; + ++str; + *str = 0; } static inline void upCase(char* str) { - for (int32_t i = 0; str[i]; ++i) { - if (str[i] >= 'a' && str[i] <= 'z') str[i] -= 32; + for (;*str; ++str) { + if (*str >= 'a' && *str <= 'z') *str -= 32; } } static inline void lowCase(char* str) { - for (int32_t i = 0; str[i]; ++i) { - if (str[i] >= 'A' && str[i] <= 'Z') str[i] += 32; + for (;*str; ++str) { + if (*str >= 'A' && *str <= 'Z') *str += 32; } } @@ -1435,7 +1553,7 @@ void updateTxtAttrib() { char buf[CB_BUF_SIZE]; -void getStr(char* str1, char* str2) { +static inline void getStr(char* str1, char* str2) { int32_t j = 0, i; for (i = 0; str1[i]; ++i) { char c = str1[i]; @@ -1474,17 +1592,61 @@ void getStr(char* str1, char* str2) { copyStr(buf, str2); } -uint8_t getType(char* str) { - if (str[0] == '"') {if (str[strlen(str) - 1] != '"') {return 0;} return 1;} +static inline uint8_t getType(char* str) { + if (*str == '"') {if (str[strlen(str) - 1] != '"') {return 0;} return 1;} bool p = false; - for (int32_t i = 0; str[i]; ++i) { - if (str[i] == '-') {} else - if ((str[i] < '0' || str[i] > '9') && str[i] != '.') {return 255;} else - if (str[i] == '.') {if (p) {return 0;} p = true;} + for (; *str; ++str) { + if (*str == '-') {} else + if ((*str < '0' || *str > '9') && *str != '.') {return 255;} else + if (*str == '.') {if (p) {return 0;} p = true;} } return 2; } +static inline bool isLineNumber(char* str) { + if (!*str || *str == '-') return false; + while (*str) { + if (*str == '.') return false; + if (*str < '0' || *str > '9') return false; + ++str; + } + return true; +} + +int cbrmIndex = 0; + +bool cbrm(char* path) { + fileerror = 0; + if (isFile(path)) { + if (remove(path)) {fileerror = errno; return false;} + return true; + } + char* odir = (cbrmIndex) ? NULL : getcwd(NULL, 0); + ++cbrmIndex; + if (chdir(path)) {fileerror = errno; goto cbrm_fail;} + DIR* cwd = opendir("."); + struct dirent* dir; + struct stat pathstat; + while ((dir = readdir(cwd))) { + if (strcmp(dir->d_name, ".") && strcmp(dir->d_name, "..")) { + stat(dir->d_name, &pathstat); + if (S_ISDIR(pathstat.st_mode)) {cbrm(dir->d_name);} + else {remove(dir->d_name);} + } + } + --cbrmIndex; + chdir((cbrmIndex) ? ".." : odir); + if (!cbrmIndex) free(odir); + if (rmdir(path)) {fileerror = errno; return false;} + return true; + cbrm_fail: + --cbrmIndex; + chdir((cbrmIndex) ? ".." : odir); + if (!cbrmIndex) free(odir); + if (rmdir(path)) fileerror = errno; + return false; +} + static inline int getArg(int, char*, char*); static inline int getArgCt(char*); @@ -1507,27 +1669,44 @@ uint8_t getFunc(char* inbuf, char* outbuf) { gftmp[1] = getFunc_gftmp[1]; } ++getFuncIndex; - int32_t i; - for (i = 0; inbuf[i] != '('; ++i) {if (inbuf[i] >= 'a' && inbuf[i] <= 'z') inbuf[i] = inbuf[i] - 32;} - copyStrSnip(inbuf, i + 1, strlen(inbuf) - 1, gftmp[0]); - fargct = getArgCt(gftmp[0]); - farg = malloc((fargct + 1) * sizeof(char*)); - flen = malloc((fargct + 1) * sizeof(int)); - fargt = malloc((fargct + 1) * sizeof(uint8_t)); - for (int j = 0; j <= fargct; ++j) { - if (j == 0) { - flen[0] = i; - farg[0] = (char*)malloc(flen[0] + 1); - copyStrSnip(inbuf, 0, i, farg[0]); - } else { - getArg(j - 1, gftmp[0], gftmp[1]); - fargt[j] = getVal(gftmp[1], gftmp[1]); - if (fargt[j] == 0) goto fnoerrscan; - if (fargt[j] == 255) fargt[j] = 0; - flen[j] = strlen(gftmp[1]); - farg[j] = (char*)malloc(flen[j] + 1); - copyStr(gftmp[1], farg[j]); - ftmpct++; + { + int32_t i; + for (i = 0; inbuf[i] != '('; ++i) {if (inbuf[i] >= 'a' && inbuf[i] <= 'z') inbuf[i] = inbuf[i] - 32;} + int32_t j = strlen(inbuf) - 1; + copyStrSnip(inbuf, i + 1, j, gftmp[0]); + fargct = getArgCt(gftmp[0]); + farg = malloc((fargct + 1) * sizeof(char*)); + flen = malloc((fargct + 1) * sizeof(int)); + fargt = malloc((fargct + 1) * sizeof(uint8_t)); + for (int j = 0; j <= fargct; ++j) { + farg[j] = NULL; + } + for (int j = 0; j <= fargct; ++j) { + if (j == 0) { + flen[0] = i; + farg[0] = (char*)malloc(flen[0] + 1); + copyStrTo(inbuf, i, farg[0]); + if (!strcmp(farg[0], "~") || !strcmp(farg[0], "_TEST")) { + ftype = 2; + if (fargct != 1) {cerr = 3; goto fexit;} + cerr = 0; + if (getArg(0, gftmp[0], gftmp[1]) == -1) {outbuf[0] = 0; goto fexit;} + int ret = logictest(gftmp[1]); + if (ret == -1) {outbuf[0] = 0; goto fexit;} + outbuf[0] = '0' + ret; + outbuf[1] = 0; + goto fexit; + } + } else { + if (getArg(j - 1, gftmp[0], gftmp[1]) == -1) {outbuf[0] = 0; goto fexit;} + fargt[j] = getVal(gftmp[1], gftmp[1]); + if (fargt[j] == 0) goto fnoerrscan; + if (fargt[j] == 255) fargt[j] = 0; + flen[j] = strlen(gftmp[1]); + farg[j] = (char*)malloc(flen[j] + 1); + copyStr(gftmp[1], farg[j]); + ftmpct++; + } } } outbuf[0] = 0; @@ -1556,7 +1735,6 @@ uint8_t getVar(char* vn, char* varout) { if (vn[vnlen - 1] == ')') { return getFunc(vn, varout); } - upCase(vn); if (!vn[0] || vn[0] == '[' || vn[0] == ']') { cerr = 4; seterrstr(vn); @@ -1632,11 +1810,8 @@ uint8_t getVar(char* vn, char* varout) { return 0; } -bool delVar(char*); - bool setVar(char* vn, char* val, uint8_t t, int32_t s) { int32_t vnlen = strlen(vn); - upCase(vn); if (!vn[0] || vn[0] == '[' || vn[0] == ']') { cerr = 4; seterrstr(vn); @@ -1705,11 +1880,6 @@ bool setVar(char* vn, char* val, uint8_t t, int32_t s) { vardata[v].data = (char**)malloc((s + 1) * sizeof(char*)); for (int32_t i = 0; i <= s; ++i) { vardata[v].data[i] = (char*)malloc(strlen(val) + 1); - if (!vardata[v].data[i]) { - delVar(vn); - cerr = 26; - return false; - } copyStr(val, vardata[v].data[i]); } } else { @@ -1728,7 +1898,6 @@ bool setVar(char* vn, char* val, uint8_t t, int32_t s) { } bool delVar(char* vn) { - upCase(vn); if (!vn[0] || vn[0] == '[' || vn[0] == ']') { cerr = 4; seterrstr(vn); @@ -1772,6 +1941,68 @@ bool delVar(char* vn) { return true; } +int openFile(char* path, char* mode) { + fileerror = 0; + int i = 0; + int j = -1; + for (; i < filemaxct; ++i) { + if (!filedata[i].fptr) {j = i; break;} + } + if (j == -1) { + j = filemaxct; + ++filemaxct; + filedata = (cb_file*)realloc(filedata, filemaxct * sizeof(cb_file)); + } + if (!(filedata[j].fptr = fopen(path, mode))) { + fileerror = errno; + --filemaxct; + filedata = (cb_file*)realloc(filedata, filemaxct * sizeof(cb_file)); + return -1; + } + fseek(filedata[j].fptr, 0, SEEK_END); + filedata[j].size = ftell(filedata[j].fptr); + fseek(filedata[j].fptr, 0, SEEK_SET); + return j; +} + +bool closeFile(int num) { + fileerror = 0; + if (num > -1 && num < filemaxct) { + if (filedata[num].fptr) { + if (fclose(filedata[num].fptr)) { + fileerror = errno; + filedata[num].fptr = NULL; + return false; + } + filedata[num].fptr = NULL; + for (int i = filemaxct - 1; i > -1; --i) { + if (!(filedata[i].fptr)) { + --filemaxct; + } else { + break; + } + } + filedata = (cb_file*)realloc(filedata, filemaxct * sizeof(cb_file)); + } else { + return false; + } + } else { + if (num == -1) { + for (int i = 0; i < filemaxct; ++i) { + if (filedata[i].fptr) { + fclose(filedata[i].fptr); + filedata[i].fptr = NULL; + } + } + filemaxct = 0; + } else { + fileerror = EINVAL; + return false; + } + } + return true; +} + static inline bool gvchkchar(char* tmp, int32_t i) { if (isSpChar(tmp[i + 1])) { if (tmp[i + 1] == '-') { @@ -1930,7 +2161,6 @@ uint8_t getVal(char* inbuf, char* outbuf) { pct = 0; bct = 0; while (1) { - //printf("-: [%d]: [%d] [%d %d %d] {%s} {%s} {%s} {%s}\n", getValIndex, numAct, p1, p2, p3, tmp[0], tmp[1], tmp[2], tmp[3]); numAct = 0; p1 = 0, p2 = 0, p3 = 0; for (register int32_t i = 0; tmp[0][i]; ++i) { @@ -2080,7 +2310,7 @@ uint8_t getVal(char* inbuf, char* outbuf) { if (dp) tmp[1][--i] = '-'; copyStrSnip(tmp[1], i, j + 1, tmp[2]); copyStrSnip(tmp[0], p3, strlen(tmp[0]), tmp[3]); - if (p1) copyStrSnip(tmp[0], 0, p1, tmp[1]); + if (p1) copyStrTo(tmp[0], p1, tmp[1]); else {tmp[1][0] = 0;} copyStrApnd(tmp[2], tmp[1]); copyStrApnd(tmp[3], tmp[1]); @@ -2103,6 +2333,7 @@ uint8_t getVal(char* inbuf, char* outbuf) { if (!tmp[1][i] || tmp[1][i] == '.') {--i;} if (dp) tmp[1][--i] = '-'; copyStrSnip(tmp[1], i, j + 1, outbuf); + if (outbuf[0] == '-' && outbuf[1] == '0' && outbuf[2] == 0) {outbuf[0] = '0'; outbuf[1] = 0;} } else { copyStr(tmp[1], outbuf); } @@ -2116,7 +2347,7 @@ uint8_t getVal(char* inbuf, char* outbuf) { char satmpbuf[CB_BUF_SIZE]; -bool solvearg(int i) { +static inline bool solvearg(int i) { if (i == 0) { argt[0] = 0; arg[0] = tmpargs[0]; @@ -2138,22 +2369,27 @@ static inline int getArgCt(char* inbuf) { int ct = 0; bool inStr = false; int pct = 0, bct = 0; - int32_t j = 0; - while (inbuf[j] == ' ') {--j;} - for (int32_t i = j; inbuf[i]; ++i) { + while (*inbuf == ' ') {++inbuf;} + for (; *inbuf; ++inbuf) { if (ct == 0) ct = 1; - if (inbuf[i] == '(' && !inStr) {pct++;} - if (inbuf[i] == ')' && !inStr) {pct--;} - if (inbuf[i] == '[' && !inStr) {bct++;} - if (inbuf[i] == ']' && !inStr) {bct--;} - if (inbuf[i] == '"') inStr = !inStr; - if (inbuf[i] == ',' && !inStr && pct == 0 && bct == 0) ct++; + if (*inbuf == '"') inStr = !inStr; + if (!inStr) { + switch (*inbuf) { + case '(': ++pct; break; + case ')': --pct; break; + case '[': ++bct; break; + case ']': --bct; break; + case ',': if (pct == 0 && bct == 0) {++ct;}; break; + } + } } return ct; } static inline int getArg(int num, char* inbuf, char* outbuf) { bool inStr = false; + bool lookingForSpChar = false; + bool sawSpChar = false; int pct = 0, bct = 0; int ct = 0; int32_t len = 0; @@ -2167,12 +2403,22 @@ static inline int getArg(int num, char* inbuf, char* outbuf) { } } if (inbuf[i] == '"') inStr = !inStr; - if (!inStr && pct == 0 && bct == 0 && inbuf[i] == ',') {++ct;} else - if (ct == num && (inStr || inbuf[i] != ' ')) {outbuf[len] = inbuf[i]; len++;} + if (!inStr && pct == 0 && bct == 0 && inbuf[i] == ',') {++ct;} + else if (ct == num) { + if (!inStr) { + if (inbuf[i] == ' ' && !sawSpChar && len > 0) {lookingForSpChar = true;} + if (isExSpChar(inbuf[i])) {lookingForSpChar = false; sawSpChar = true;} + } + if (inStr || inbuf[i] != ' ') { + if (!isExSpChar(inbuf[i])) sawSpChar = false; + if (lookingForSpChar) {outbuf[0] = 0; cerr = 1; return -1;} + outbuf[len] = inbuf[i]; + ++len; + } + } } if (pct || bct || inStr) {outbuf[0] = 0; cerr = 1; return -1;} outbuf[len] = 0; - //printf("arg outbuf: {%s}\n", outbuf); return len; } @@ -2180,12 +2426,12 @@ char tmpbuf[2][CB_BUF_SIZE]; void mkargs() { int32_t j = 0; - while (cmd[j] == ' ') {j++;} + while (cmd[j] == ' ') {++j;} int32_t h = j; - while (cmd[h] != ' ' && cmd[h] != '=' && cmd[h]) {h++;} + while (cmd[h] != ' ' && cmd[h] != '=' && cmd[h]) {++h;} copyStrSnip(cmd, h + 1, strlen(cmd), tmpbuf[0]); int32_t tmph = h; - while (cmd[tmph] == ' ' && cmd[tmph]) {tmph++;} + while (cmd[tmph] == ' ' && cmd[tmph]) {++tmph;} if (cmd[tmph] == '=') { strcpy(tmpbuf[1], "SET "); cmd[tmph] = ','; @@ -2200,16 +2446,19 @@ void mkargs() { argct = getArgCt(tmpbuf[0]); tmpargs = (char**)realloc(tmpargs, (argct + 1) * sizeof(char*)); argl = (int32_t*)realloc(argl, (argct + 1) * sizeof(int32_t)); + for (int i = 0; i <= argct; ++i) { + tmpargs[i] = NULL; + } for (int i = 0; i <= argct; ++i) { argl[i] = 0; if (i == 0) { copyStrSnip(cmd, j, h, tmpbuf[0]); - argl[i] = strlen(tmpbuf[0]); - tmpargs[i] = malloc(argl[i] + 1); - copyStr(tmpbuf[0], tmpargs[i]); + argl[0] = strlen(tmpbuf[0]); + tmpargs[0] = malloc(argl[0] + 1); + copyStr(tmpbuf[0], tmpargs[0]); copyStrSnip(cmd, h + 1, strlen(cmd), tmpbuf[0]); } else { - argl[i] = getArg(i - 1, tmpbuf[0], tmpbuf[1]); + if ((argl[i] = getArg(i - 1, tmpbuf[0], tmpbuf[1])) == -1) {cerr = 1; return;} tmpargs[i] = malloc(argl[i] + 1); copyStr(tmpbuf[1], tmpargs[i]); } @@ -2219,27 +2468,53 @@ void mkargs() { for (int i = 0; i <= argct; ++i) {tmpargs[i][argl[i]] = 0;} } -char lttmp[3][CB_BUF_SIZE]; +char* lttmp_tmp[3]; +int logictestexpr_index = 0; -uint8_t logictestexpr(char* inbuf) { +static inline uint8_t logictestexpr(char* inbuf) { int32_t tmpp = 0; uint8_t t1 = 0; uint8_t t2 = 0; int32_t p = 0; bool inStr = false; + bool lookingForSpChar = false; + bool sawSpChar = false; int pct = 0, bct = 0; + int ret = 255; + char* lttmp[3]; + if (!logictestexpr_index) { + lttmp[0] = lttmp_tmp[0]; + lttmp[1] = lttmp_tmp[1]; + lttmp[2] = lttmp_tmp[2]; + } else { + lttmp[0] = malloc(CB_BUF_SIZE); + lttmp[1] = malloc(CB_BUF_SIZE); + lttmp[2] = malloc(CB_BUF_SIZE); + } + ++logictestexpr_index; while (inbuf[p] == ' ') {++p;} if (p >= (int32_t)strlen(inbuf)) {cerr = 10; goto ltreturn;} - for (int32_t i = p; true; ++i) { - if (inbuf[i] == '(' && !inStr) {pct++;} - if (inbuf[i] == ')' && !inStr) {pct--;} - if (inbuf[i] == '[' && !inStr) {bct++;} - if (inbuf[i] == ']' && !inStr) {bct--;} + for (int32_t i = p; inbuf[i]; ++i) { + if (!inStr) { + switch (inbuf[i]) { + case '(': ++pct; break; + case ')': --pct; break; + case '[': ++bct; break; + case ']': --bct; break; + } + } if (inbuf[i] == '"') {inStr = !inStr;} if (inbuf[i] == 0) {cerr = 1; goto ltreturn;} if ((inbuf[i] == '<' || inbuf[i] == '=' || inbuf[i] == '>') && !inStr && pct == 0 && bct == 0) {p = i; break;} - if (inbuf[i] == ' ' && !inStr) {} else - {lttmp[0][tmpp] = inbuf[i]; tmpp++;} + if (!inStr && pct == 0 && bct == 0) { + if (inbuf[i] == ' ' && !sawSpChar) {lookingForSpChar = true;} + if (isExSpChar(inbuf[i])) {lookingForSpChar = false; sawSpChar = true;} + } + if (inStr || inbuf[i] != ' ') { + if (!isExSpChar(inbuf[i])) sawSpChar = false; + if (lookingForSpChar) {cerr = 1; goto ltreturn;} + lttmp[0][tmpp] = inbuf[i]; tmpp++; + } } lttmp[0][tmpp] = 0; tmpp = 0; @@ -2250,10 +2525,32 @@ uint8_t logictestexpr(char* inbuf) { } lttmp[1][tmpp] = 0; tmpp = 0; - for (int32_t i = p; true; ++i) { - if (inbuf[i] == 0) {break;} - if (inbuf[i] == ' ' && !inStr) {} else - {lttmp[2][tmpp] = inbuf[i]; tmpp++;} + inStr = false; + lookingForSpChar = false; + sawSpChar = false; + pct = 0; bct = 0; + while (inbuf[p] == ' ') {++p;} + for (int32_t i = p; inbuf[i]; ++i) { + if (!inStr) { + switch (inbuf[i]) { + case '(': ++pct; break; + case ')': --pct; break; + case '[': ++bct; break; + case ']': --bct; break; + } + } + if (inbuf[i] == '"') {inStr = !inStr;} + if (inbuf[i] == 0) {cerr = 1; goto ltreturn;} + if ((inbuf[i] == '<' || inbuf[i] == '=' || inbuf[i] == '>') && !inStr && pct == 0 && bct == 0) {p = i; break;} + if (!inStr && pct == 0 && bct == 0) { + if (inbuf[i] == ' ' && !sawSpChar) {lookingForSpChar = true;} + if (isExSpChar(inbuf[i])) {lookingForSpChar = false; sawSpChar = true;} + } + if (inStr || inbuf[i] != ' ') { + if (!isExSpChar(inbuf[i])) sawSpChar = false; + if (lookingForSpChar) {cerr = 1; goto ltreturn;} + lttmp[2][tmpp] = inbuf[i]; tmpp++; + } } lttmp[2][tmpp] = 0; t1 = getVal(lttmp[0], lttmp[0]); @@ -2262,89 +2559,116 @@ uint8_t logictestexpr(char* inbuf) { if (t2 == 0) goto ltreturn; if (t1 != t2) {cerr = 2; goto ltreturn;} if (!strcmp(lttmp[1], "=")) { - return (uint8_t)(bool)!strcmp(lttmp[0], lttmp[2]); + ret = (uint8_t)(bool)!strcmp(lttmp[0], lttmp[2]); + goto ltreturn; } else if (!strcmp(lttmp[1], "<>")) { - return (uint8_t)(bool)strcmp(lttmp[0], lttmp[2]); + ret = (uint8_t)(bool)strcmp(lttmp[0], lttmp[2]); + goto ltreturn; } else if (!strcmp(lttmp[1], ">")) { if (t1 == 1) {cerr = 2; goto ltreturn;} double num1, num2; sscanf(lttmp[0], "%lf", &num1); sscanf(lttmp[2], "%lf", &num2); - return num1 > num2; + ret = num1 > num2; + goto ltreturn; } else if (!strcmp(lttmp[1], "<")) { if (t1 == 1) {cerr = 2; goto ltreturn;} double num1, num2; sscanf(lttmp[0], "%lf", &num1); sscanf(lttmp[2], "%lf", &num2); - return num1 < num2; + ret = num1 < num2; + goto ltreturn; } else if (!strcmp(lttmp[1], ">=")) { if (t1 == 1) {cerr = 2; goto ltreturn;} double num1, num2; sscanf(lttmp[0], "%lf", &num1); sscanf(lttmp[2], "%lf", &num2); - return num1 >= num2; + ret = num1 >= num2; + goto ltreturn; } else if (!strcmp(lttmp[1], "<=")) { if (t1 == 1) {cerr = 2; goto ltreturn;} double num1, num2; sscanf(lttmp[0], "%lf", &num1); sscanf(lttmp[2], "%lf", &num2); - return num1 <= num2; + ret = num1 <= num2; + goto ltreturn; } else if (!strcmp(lttmp[1], "=>")) { if (t1 == 1) {cerr = 2; goto ltreturn;} double num1, num2; sscanf(lttmp[0], "%lf", &num1); sscanf(lttmp[2], "%lf", &num2); - return num1 >= num2; + ret = num1 >= num2; + goto ltreturn; } else if (!strcmp(lttmp[1], "=<")) { if (t1 == 1) {cerr = 2; goto ltreturn;} double num1, num2; sscanf(lttmp[0], "%lf", &num1); sscanf(lttmp[2], "%lf", &num2); - return num1 <= num2; + ret = num1 <= num2; + goto ltreturn; } cerr = 1; ltreturn:; - return 255; + --logictestexpr_index; + if (logictestexpr_index) { + free(lttmp[0]); + free(lttmp[1]); + free(lttmp[2]); + } + return ret; } -char ltbuf[CB_BUF_SIZE]; +char* ltbuf_tmp = NULL; +int logictest_index = 0; uint8_t logictest(char* inbuf) { bool inStr = false; int32_t i = 0, j = 0; + int pct = 0, bct = 0; uint8_t ret = 0, out = 0; uint8_t logicActOld = 0; + char* ltbuf; + if (!logictest_index) { + ltbuf = ltbuf_tmp; + } else { + ltbuf = malloc(CB_BUF_SIZE); + } + ++logictest_index; while (inbuf[i]) { uint8_t logicAct = 0; for (;inbuf[j] && !logicAct; ++j) { switch (inbuf[j]) { case '"': inStr = !inStr; break; - case '|': if (!inStr) {logicAct = 1; --j;} break; - case '&': if (!inStr) {logicAct = 2; --j;} break; + case '(': if (!inStr) ++pct; break; + case ')': if (!inStr) --pct; break; + case '[': if (!inStr) ++bct; break; + case ']': if (!inStr) --bct; break; + case '|': if (!inStr && !pct && !bct) {logicAct = 1; --j;} break; + case '&': if (!inStr && !pct && !bct) {logicAct = 2; --j;} break; } } copyStrSnip(inbuf, i, j, ltbuf); - //printf("{%s} {%s} [%d, %d] [%d, %d]\n", inbuf, ltbuf, i, j, logicAct, logicActOld); switch (logicActOld) { case 1: - //printf("OR: {%s}\n", ltbuf); - if ((ret = logictestexpr(ltbuf)) == 255) {return 255;} + if ((ret = logictestexpr(ltbuf)) == 255) {out = 255; goto ltexit;} out |= ret; break; case 2: - //printf("AND: {%s}\n", ltbuf); - if ((ret = logictestexpr(ltbuf)) == 255) {return 255;} + if ((ret = logictestexpr(ltbuf)) == 255) {out = 255; goto ltexit;} out &= ret; break; default: - //printf("NONE: {%s}\n", ltbuf); out = logictestexpr(ltbuf); break; } + if (!inbuf[j]) break; i = ++j; - if (!inbuf[i + 1]) break; + if (!inbuf[i]) {if (inbuf[j - 1] == '|' || inbuf[j - 1] == '&') {cerr = 10; out = 255;} break;} logicActOld = logicAct; } + ltexit:; + --logictest_index; + if (logictest_index) free(ltbuf); return out; } @@ -2353,21 +2677,53 @@ char ltmp[2][CB_BUF_SIZE]; bool runlogic() { ltmp[0][0] = 0; ltmp[1][0] = 0; int32_t i = 0; - while (cmd[i] == ' ') {i++;} + while (cmd[i] == ' ') {++i;} int32_t j = i; - while (cmd[j] != ' ' && cmd[j]) {j++;} + while (cmd[j] != ' ' && cmd[j]) {++j;} int32_t h = j; - while (cmd[h] == ' ') {h++;} + while (cmd[h] == ' ') {++h;} if (cmd[h] == '=') return false; copyStrSnip(cmd, i, j, ltmp[0]); - upCase(ltmp[0]); + if (isLineNumber(ltmp[0])) { + int tmp = -1; + for (int j = 0; j < gotomaxct; ++j) { + if (!gotodata[j].used) {tmp = j; break;} + else if (!strcmp(gotodata[j].name, ltmp[0])) { + if (gotodata[j].cp == cmdpos) {goto skiplbl;} + cerr = 28; return true; + } + } + if (tmp == -1) { + tmp = gotomaxct; + ++gotomaxct; + gotodata = realloc(gotodata, gotomaxct * sizeof(cb_goto)); + } + gotodata[tmp].name = malloc(strlen(ltmp[0]) + 1); + copyStr(ltmp[0], gotodata[tmp].name); + gotodata[tmp].cp = cmdpos; + gotodata[tmp].pl = progLine; + gotodata[tmp].used = true; + gotodata[tmp].dlsp = dlstackp; + gotodata[tmp].fnsp = fnstackp; + gotodata[tmp].itsp = itstackp; + skiplbl:; + while (cmd[i] != ' ' && cmd[i]) {++i;} + while (cmd[i] == ' ') {++i;} + j = i; + 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); + } cerr = 0; chkCmdPtr = ltmp[0]; #include "logic.c" return false; } -void initBaseMem() { +static inline void initBaseMem() { getVal_tmp[0] = malloc(CB_BUF_SIZE); getVal_tmp[1] = malloc(CB_BUF_SIZE); getVal_tmp[2] = malloc(CB_BUF_SIZE); @@ -2375,9 +2731,13 @@ void initBaseMem() { getFunc_gftmp[0] = malloc(CB_BUF_SIZE); getFunc_gftmp[1] = malloc(CB_BUF_SIZE); bfnbuf = malloc(CB_BUF_SIZE); + ltbuf_tmp = malloc(CB_BUF_SIZE); + lttmp_tmp[0] = malloc(CB_BUF_SIZE); + lttmp_tmp[1] = malloc(CB_BUF_SIZE); + lttmp_tmp[2] = malloc(CB_BUF_SIZE); } -void freeBaseMem() { +static inline void freeBaseMem() { nfree(getVal_tmp[0]); nfree(getVal_tmp[1]); nfree(getVal_tmp[2]); @@ -2385,9 +2745,13 @@ void freeBaseMem() { nfree(getFunc_gftmp[0]); nfree(getFunc_gftmp[1]); nfree(bfnbuf); + nfree(ltbuf_tmp); + nfree(lttmp_tmp[0]); + nfree(lttmp_tmp[1]); + nfree(lttmp_tmp[2]); } -void printError(int error) { +static inline void printError(int error) { getCurPos(); if (curx != 1) putchar('\n'); if (inProg) {printf("Error %d on line %d of '%s': '%s': ", error, progLine, basefilename(progfnstr), cmd);} @@ -2418,7 +2782,7 @@ void printError(int error) { fputs("ENDIF without IF", stdout); break; case 8: - fputs("ELSE without IF", stdout); + fputs("ELSE or ELSEIF without IF", stdout); break; case 9: fputs("NEXT without FOR", stdout); @@ -2439,7 +2803,7 @@ void printError(int error) { fputs("Reached FOR limit", stdout); break; case 15: - printf("File not found: '%s'", errstr); + printf("File or directory not found: '%s'", errstr); break; case 16: fputs("Invalid data or data range exceeded", stdout); @@ -2501,9 +2865,6 @@ void printError(int error) { case 255: printf("Not a command: '%s'", arg[0]); break; - case -1: - fputs("Internal error", stdout); - break; } putchar('\n'); } @@ -2513,20 +2874,24 @@ void runcmd() { cerr = 0; bool lgc = runlogic(); if (lgc) goto cmderr; + if (cmd[0] == 0) return; if (dlstackp > ((progindex > -1) ? mindlstackp[progindex] : -1)) {if (dldcmd[dlstackp]) return;} if (itstackp > ((progindex > -1) ? minitstackp[progindex] : -1)) {if (itdcmd[itstackp]) return;} if (fnstackp > ((progindex > -1) ? minfnstackp[progindex] : -1)) {if (fndcmd[fnstackp]) return;} + bool madeargs = false; mkargs(); + if (cerr) goto cmderr; + madeargs = true; argt = (uint8_t*)realloc(argt, argct + 1); arg = (char**)realloc(arg, (argct + 1) * sizeof(char*)); for (int i = 1; i <= argct; ++i) {arg[i] = NULL;} solvearg(0); - upCase(arg[0]); cerr = 255; chkCmdPtr = arg[0]; #include "commands.c" cmderr:; if (cerr) { + err = 0; if (runc || runfile) err = 1; printError(cerr); cp = -1; @@ -2538,8 +2903,10 @@ void runcmd() { for (int i = 0; i <= argct; ++i) { free(tmpargs[i]); } - for (int i = 1; i <= argct; ++i) { - free(arg[i]); + if (madeargs) { + for (int i = 1; i <= argct; ++i) { + free(arg[i]); + } } return; } diff --git a/commands.c b/commands.c index db7bea4..12e3cf1 100644 --- a/commands.c +++ b/commands.c @@ -2,9 +2,23 @@ if (chkCmdPtr[0] == '_') goto _cmd; if (chkCmd(2, "EXIT", "QUIT")) { if (argct > 1) {cerr = 3; goto cmderr;} cerr = 0; - if (argct == 1) {if (!solvearg(1)) goto cmderr; err = atoi(arg[1]);} - if (inProg) {inProg = false; goto cmderr;} - cleanExit(); + err = 0; + if (argct == 1) { + if (!solvearg(1)) goto cmderr; + if (runfile) { + err = retval = atoi(arg[1]); + } else { + err = atoi(arg[1]); + } + } + if (inProg) { + if (progindex > 0) unloadProg(); + else inProg = false; + retval = err; + } else { + cleanExit(); + } + goto cmderr; } if (chkCmd(1, "PUT")) { cerr = 0; @@ -19,13 +33,16 @@ if (chkCmd(2, "SET", "LET")) { if (!setVar(tmpargs[1], arg[2], argt[2], -1)) goto cmderr; goto noerr; } -if (chkCmd(2, "@", "LABEL")) { +if (chkCmd(3, "@", "LABEL", "LBL")) { if (argct != 1) {cerr = 3; goto cmderr;} cerr = 0; int i = -1; for (int j = 0; j < gotomaxct; ++j) { if (!gotodata[j].used) {i = j; break;} - else if (!strcmp(gotodata[j].name, tmpargs[1])) {cerr = 28; goto cmderr;} + else if (!strcmp(gotodata[j].name, tmpargs[1])) { + if (gotodata[j].cp == cmdpos) {goto noerr;} + cerr = 28; goto cmderr; + } } if (i == -1) { i = gotomaxct; @@ -40,8 +57,9 @@ if (chkCmd(2, "@", "LABEL")) { gotodata[i].dlsp = dlstackp; gotodata[i].fnsp = fnstackp; gotodata[i].itsp = itstackp; + goto noerr; } -if (chkCmd(2, "%", "GOTO")) { +if (chkCmd(3, "%", "GOTO", "GO")) { if (argct != 1) {cerr = 3; goto cmderr;} cerr = 0; int i = -1; @@ -62,10 +80,11 @@ if (chkCmd(2, "%", "GOTO")) { itstackp = gotodata[i].itsp; gotodata[i].used = false; bool r = false; - while (gotomaxct > 0 && !gotodata[gotomaxct].used) {--gotomaxct; r = true;} + while (gotomaxct > 0 && !gotodata[gotomaxct - 1].used) {--gotomaxct; r = true;} if (r) gotodata = realloc(gotodata, gotomaxct * sizeof(cb_goto)); didloop = true; lockpl = true; + goto noerr; } if (chkCmd(1, "DIM")) { if (argct != 3) {cerr = 3; goto cmderr;} @@ -136,12 +155,13 @@ if (chkCmd(1, "COLOR")) { goto noerr; } if (chkCmd(1, "LOCATE")) { + if (argct > 2 || argct < 1) {cerr = 3; goto cmderr;} cerr = 0; int tmp = 0; - if (argct > 2 || argct < 1) {cerr = 3; goto cmderr;} if (!solvearg(1)) goto cmderr; - if (argt[1] == 0) {} else - if (argt[1] != 2) {cerr = 2; goto cmderr;} + getCurPos(); + if (argt[1] == 0) {} + else if (argt[1] != 2) {cerr = 2; goto cmderr;} else { tmp = atoi(arg[1]); if (tmp < 1) {cerr = 16; goto cmderr;} @@ -149,8 +169,8 @@ if (chkCmd(1, "LOCATE")) { } if (argct > 1) { if (!solvearg(2)) goto cmderr; - if (argt[2] == 0) {} else - if (argt[2] != 2) {cerr = 2; goto cmderr;} + if (argt[2] == 0) {} + else if (argt[2] != 2) {cerr = 2; goto cmderr;} else { tmp = atoi(arg[2]); if (tmp < 1) {cerr = 16; goto cmderr;} @@ -166,18 +186,32 @@ if (chkCmd(1, "LOCATE")) { goto noerr; } if (chkCmd(1, "CLS")) { - cerr = 0; if (argct > 1) {cerr = 3; goto cmderr;} + cerr = 0; uint8_t tbgc = bgc; + #ifndef _WIN_NO_VT + uint32_t ttbgc = truebgc; + #endif if (argct) { if (!solvearg(1)) goto cmderr; if (argt[1] != 2) {cerr = 2; goto cmderr;} + #ifndef _WIN_NO_VT + if (txt_truecolor) { + ttbgc = (uint32_t)atoi(arg[1]); + } else { + tbgc = (uint8_t)atoi(arg[1]); + } + #else tbgc = (uint8_t)atoi(arg[1]); + #endif } #ifndef _WIN_NO_VT - if (argct) printf("\e[48;5;%um", tbgc); + if (argct) { + if (txt_truecolor) printf("\e[48;2;%u;%u;%um", (uint8_t)(ttbgc >> 16), (uint8_t)(ttbgc >> 8), (uint8_t)ttbgc); + else printf("\e[48;5;%um", tbgc); + } fputs("\e[H\e[2J\e[3J", stdout); - if (txt_bgc) printf("\e[48;5;%um", bgc); + updateTxtAttrib(); fflush(stdout); #else SetConsoleTextAttribute(hConsole, (fgc % 16) + (tbgc % 16) * 16); @@ -187,8 +221,8 @@ if (chkCmd(1, "CLS")) { goto noerr; } if (chkCmd(1, "WAITUS")) { - cerr = 0; if (argct != 1) {cerr = 3; goto cmderr;} + cerr = 0; if (!solvearg(1)) goto cmderr; if (argt[1] != 2) {cerr = 2; goto cmderr;} uint64_t d; @@ -197,34 +231,34 @@ if (chkCmd(1, "WAITUS")) { goto noerr; } if (chkCmd(1, "WAITMS")) { - cerr = 0; if (argct != 1) {cerr = 3; goto cmderr;} + cerr = 0; if (!solvearg(1)) goto cmderr; if (argt[1] != 2) {cerr = 2; goto cmderr;} - uint64_t d; - sscanf(arg[1], "%llu", (long long unsigned *)&d); + double d; + sscanf(arg[1], "%lf", &d); cb_wait(d * 1000); goto noerr; } if (chkCmd(1, "WAIT")) { - cerr = 0; if (argct != 1) {cerr = 3; goto cmderr;} + cerr = 0; if (!solvearg(1)) goto cmderr; if (argt[1] != 2) {cerr = 2; goto cmderr;} - uint64_t d; - sscanf(arg[1], "%llu", (long long unsigned *)&d); + double d; + sscanf(arg[1], "%lf", &d); cb_wait(d * 1000000); goto noerr; } if (chkCmd(1, "RESETTIMER")) { - cerr = 0; if (argct) {cerr = 3; goto cmderr;} + cerr = 0; resetTimer(); goto noerr; } if (chkCmd(2, "SRAND", "SRND")) { - cerr = 0; if (argct != 1) {cerr = 3; goto cmderr;} + cerr = 0; if (!solvearg(1)) goto cmderr; if (argt[1] != 2) {cerr = 2; goto cmderr;} double rs; @@ -233,8 +267,8 @@ if (chkCmd(2, "SRAND", "SRND")) { goto noerr; } if (chkCmd(1, "CALL")) { - cerr = 0; if (argct != 1) {cerr = 3; goto cmderr;} + cerr = 0; if (!solvearg(1)) goto cmderr; if (argt[1] != 1) {cerr = 2; goto cmderr;} inprompt = !runfile; @@ -246,8 +280,8 @@ if (chkCmd(1, "CALL")) { goto noerr; } if (chkCmd(1, "RUN")) { - cerr = 0; if (argct < 1) {cerr = 3; goto cmderr;} + cerr = 0; if (!solvearg(1)) goto cmderr; if (argt[1] != 1) {cerr = 2; goto cmderr;} #ifndef _WIN32 @@ -270,7 +304,8 @@ if (chkCmd(1, "RUN")) { exit(0); } else if (pid > 0) { - while (wait(NULL) != pid) {} + while (wait(&retval) != pid) {} + retval = WEXITSTATUS(retval); } free(runargs); #else @@ -297,8 +332,8 @@ if (chkCmd(1, "RUN")) { goto noerr; } if (chkCmd(2, "$", "SH")) { - cerr = 0; if (argct != 1) {cerr = 3; goto cmderr;} + cerr = 0; if (!solvearg(1)) goto cmderr; if (argt[1] != 1) {cerr = 2; goto cmderr;} #ifndef _WIN_NO_VT @@ -317,7 +352,7 @@ if (chkCmd(2, "$", "SH")) { int duperr; duperr = dup(2); close(2); - cerr = system(arg[1]); + retval = WEXITSTATUS(system(arg[1])); dup2(duperr, 2); close(duperr); if (sh_restoreAttrib) updateTxtAttrib(); @@ -325,8 +360,8 @@ if (chkCmd(2, "$", "SH")) { goto noerr; } if (chkCmd(1, "EXEC")) { - cerr = 0; if (argct < 1) {cerr = 3; goto cmderr;} + cerr = 0; if (!solvearg(1)) goto cmderr; if (argt[1] != 1) {cerr = 2; goto cmderr;} #ifndef _WIN_NO_VT @@ -356,10 +391,11 @@ if (chkCmd(1, "EXEC")) { if (pid < 0) cerr = -1; if (pid == 0) { execvp(runargs[0], runargs); - exit(0); + exit(127); } else if (pid > 0) { - while (wait(NULL) != pid) {} + while (wait(&retval) != pid) {} + retval = ((retval >> 8) & 0xFF); } else if (sh_silent) { dup2(stdout_dup, 1); @@ -391,8 +427,7 @@ if (chkCmd(1, "EXEC")) { dup2(fd, 1); dup2(fd, 2); } - int ret = system(tmpcmd); - (void)ret; + retval = WEXITSTATUS(system(tmpcmd)); if (sh_silent) { dup2(stdout_dup, 1); dup2(stderr_dup, 2); @@ -410,6 +445,12 @@ if (chkCmd(1, "FILES")) { if (argct) { if (!solvearg(1)) goto cmderr; if (argt[1] != 1) {cerr = 2; goto cmderr;} + int tmpret = isFile(arg[1]); + if (tmpret) { + if (tmpret == -1) {cerr = 15; seterrstr(arg[1]);} + else {cerr = 19;} + goto cmderr; + } olddn = malloc(CB_BUF_SIZE); getcwd(olddn, CB_BUF_SIZE); if (chdir(arg[1])) { @@ -420,8 +461,7 @@ if (chkCmd(1, "FILES")) { } } DIR* cwd = opendir("."); - if (!cwd) {if (argct) {free(olddn);} cerr = 20; goto cmderr;} - DIR* tmpdir; + if (!cwd) {if (argct) {chdir(olddn); free(olddn);} goto noerr;} struct dirent* dir; #ifdef _WIN32 #define DIRPFS "%s\\\n" @@ -431,14 +471,15 @@ if (chkCmd(1, "FILES")) { puts("./\n../"); #endif long dbegin = telldir(cwd); + struct stat pathstat; while ((dir = readdir(cwd))) { - if ((tmpdir = opendir(dir->d_name)) && strcmp(dir->d_name, ".") && strcmp(dir->d_name, "..")) printf(DIRPFS, dir->d_name); - if (tmpdir) closedir(tmpdir); + stat(dir->d_name, &pathstat); + if (S_ISDIR(pathstat.st_mode) && strcmp(dir->d_name, ".") && strcmp(dir->d_name, "..")) printf(DIRPFS, dir->d_name); } seekdir(cwd, dbegin); while ((dir = readdir(cwd))) { - if (!(tmpdir = opendir(dir->d_name))) puts(dir->d_name); - if (tmpdir) closedir(tmpdir); + stat(dir->d_name, &pathstat); + if (!(S_ISDIR(pathstat.st_mode))) puts(dir->d_name); } if (argct) { chdir(olddn); @@ -448,8 +489,8 @@ if (chkCmd(1, "FILES")) { goto noerr; } if (chkCmd(2, "CHDIR", "CD")) { - cerr = 0; if (argct != 1) {cerr = 3; goto cmderr;} + cerr = 0; if (!solvearg(1)) goto cmderr; if (argt[1] != 1) {cerr = 2; goto cmderr;} if (chdir(arg[1])) { @@ -459,12 +500,114 @@ if (chkCmd(2, "CHDIR", "CD")) { } goto noerr; } +if (chkCmd(1, "FCLOSE")) { + cerr = 0; + fileerror = 0; + if (argct != 1) {cerr = 3; goto cmderr;} + if (!solvearg(1)) {goto cmderr;} + if (argt[1] != 2) {cerr = 3; goto cmderr;} + if (!closeFile(atoi(arg[1]))) {cerr = 16; goto cmderr;} + goto noerr; +} +if (chkCmd(1, "FWRITE")) { + cerr = 0; + fileerror = 0; + if (argct != 2) {cerr = 3; goto cmderr;} + if (!solvearg(1)) {goto cmderr;} + if (!solvearg(2)) {goto cmderr;} + if (argt[1] != 2 || argt[2] != 1) {cerr = 2; goto cmderr;} + int fnum = atoi(arg[1]); + if (fnum < 0 || fnum >= filemaxct) { + cerr = 16; + goto cmderr; + } else { + errno = 0; + fputs(arg[2], filedata[fnum].fptr); + fileerror = errno; + } + goto noerr; +} +if (chkCmd(1, "FSEEK")) { + cerr = 0; + fileerror = 0; + if (argct != 2) {cerr = 3; goto cmderr;} + if (!solvearg(1)) {goto cmderr;} + if (!solvearg(2)) {goto cmderr;} + if (argt[1] != 2 || argt[2] != 2) {cerr = 2; goto cmderr;} + int fnum = atoi(arg[1]); + if (fnum < 0 || fnum >= filemaxct) { + cerr = 16; + goto cmderr; + } else { + errno = 0; + int32_t pos = atoi(arg[2]); + if (pos < 0) { + cerr = 16; + } else { + fseek(filedata[fnum].fptr, (pos > filedata[fnum].size) ? filedata[fnum].size : pos, SEEK_SET); + fileerror = errno; + } + } + goto noerr; +} +if (chkCmd(1, "FLUSH")) { + cerr = 0; + fileerror = 0; + if (argct != 1) {cerr = 3; goto cmderr;} + if (!solvearg(1)) {goto cmderr;} + if (argt[1] != 2) {cerr = 2; goto cmderr;} + int fnum = atoi(arg[1]); + if (fnum < 0 || fnum >= filemaxct) { + cerr = 16; + goto cmderr; + } + errno = 0; + fflush(filedata[fnum].fptr); + fileerror = errno; + goto noerr; +} +if (chkCmd(2, "MD", "MKDIR")) { + cerr = 0; + fileerror = 0; + if (argct != 1) {cerr = 3; goto cmderr;} + if (!solvearg(1)) {goto cmderr;} + if (argt[1] != 1) {cerr = 2; goto cmderr;} + errno = 0; + #ifndef _WIN32 + mkdir(arg[1], S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + #else + mkdir(arg[1]); + #endif + fileerror = errno; + goto noerr; +} +if (chkCmd(2, "RM", "REMOVE")) { + cerr = 0; + fileerror = 0; + if (argct != 1) {cerr = 3; goto cmderr;} + if (!solvearg(1)) {goto cmderr;} + if (argt[1] != 1) {cerr = 2; goto cmderr;} + cbrm(arg[1]); + goto noerr; +} +if (chkCmd(4, "MV", "MOVE", "REN", "RENAME")) { + cerr = 0; + fileerror = 0; + if (argct != 2) {cerr = 3; goto cmderr;} + if (!solvearg(1)) {goto cmderr;} + if (!solvearg(2)) {goto cmderr;} + if (argt[1] != 1 || argt[2] != 1) {cerr = 2; goto cmderr;} + errno = 0; + rename(arg[1], arg[2]); + fileerror = errno; + goto noerr; +} goto cmderr; _cmd: if (chkCmd(1, "_RESETTITLE")) { if (inProg) {cerr = 254; goto cmderr;} + if (argct) {cerr = 3; goto cmderr;} cerr = 0; - if (argct != 0) {cerr = 3; goto cmderr;} #ifndef _WIN_NO_VT if (!changedtitle) { if (changedtitlecmd) fputs("\e[23;0t", stdout); @@ -482,8 +625,8 @@ if (chkCmd(1, "_RESETTITLE")) { } if (chkCmd(1, "_TITLE")) { if (inProg) {cerr = 254; goto cmderr;} - cerr = 0; if (argct != 1) {cerr = 3; goto cmderr;} + cerr = 0; if (!solvearg(1)) goto cmderr; if (argt[1] != 1) {cerr = 2; goto cmderr;} #ifndef _WIN_NO_VT @@ -499,10 +642,35 @@ if (chkCmd(1, "_TITLE")) { #endif goto noerr; } +if (chkCmd(1, "_SETENV")) { + if (argct != 2) {cerr = 3; goto cmderr;} + cerr = 0; + if (!solvearg(1)) goto cmderr; + if (!solvearg(2)) goto cmderr; + if (argt[1] != 1 || argt[2] != 1) {cerr = 2; goto cmderr;} + #ifndef _WIN32 + setenv(arg[1], arg[2], 1); + #else + SetEnvironmentVariable(arg[1], arg[2]); + #endif + goto noerr; +} +if (chkCmd(1, "_UNSETENV")) { + if (argct != 1) {cerr = 3; goto cmderr;} + cerr = 0; + if (!solvearg(1)) goto cmderr; + if (argt[1] != 1) {cerr = 2; goto cmderr;} + #ifndef _WIN32 + unsetenv(arg[1]); + #else + SetEnvironmentVariable(arg[1], ""); + #endif + goto noerr; +} if (chkCmd(1, "_PROMPT")) { if (inProg) {cerr = 254; goto cmderr;} - cerr = 0; if (argct != 1) {cerr = 3; goto cmderr;} + cerr = 0; if (!solvearg(1)) goto cmderr; if (argt[1] != 1) {cerr = 2; goto cmderr;} copyStr(tmpargs[1], prompt); @@ -510,23 +678,23 @@ if (chkCmd(1, "_PROMPT")) { } if (chkCmd(1, "_PROMPTTAB")) { if (inProg) {cerr = 254; goto cmderr;} - cerr = 0; 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]); } if (chkCmd(1, "_AUTOCMDHIST")) { if (inProg) {cerr = 254; goto cmderr;} + if (argct) {cerr = 3; goto cmderr;} cerr = 0; - if (argct != 0) {cerr = 3; goto cmderr;} autohist = true; goto noerr; } if (chkCmd(1, "_SAVECMDHIST")) { if (inProg) {cerr = 254; goto cmderr;} - cerr = 0; if (argct > 1) {cerr = 3; goto cmderr;} + cerr = 0; if (argct) { if (!solvearg(1)) goto cmderr; if (argt[1] != 1) {cerr = 2; goto cmderr;} @@ -545,8 +713,8 @@ if (chkCmd(1, "_SAVECMDHIST")) { } if (chkCmd(1, "_LOADCMDHIST")) { if (inProg) {cerr = 254; goto cmderr;} - cerr = 0; if (argct > 1) {cerr = 3; goto cmderr;} + cerr = 0; clear_history(); if (argct) { if (!solvearg(1)) goto cmderr; @@ -610,7 +778,7 @@ if (chkCmd(1, "_TXTATTRIB")) { if (!strcmp(arg[1], "UNDERLINE_COLOR")) attrib = 12; else if (!strcmp(arg[1], "FGC")) attrib = 13; else if (!strcmp(arg[1], "BGC")) attrib = 14; else - if (!strcmp(arg[1], "TRUECOLOR") || !strcmp(arg[1], "TRUE_COLOR") || !strcmp(arg[1], "24BIT_COLOR")) attrib = 15; else + if (!strcmp(arg[1], "TRUECOLOR") || !strcmp(arg[1], "TRUE_COLOR") || !strcmp(arg[1], "24BITCOLOR") || !strcmp(arg[1], "24BIT_COLOR")) attrib = 15; else {cerr = 16; goto cmderr;} } else { attrib = atoi(arg[1]); @@ -666,7 +834,8 @@ if (chkCmd(1, "_TXTATTRIB")) { case 6: txt_strike = (bool)val; break; case 7: txt_overln = (bool)val; break; case 8: txt_dim = (bool)val; break; - case 9: txt_hidden = (bool)val; break; + case 9: txt_blink = (bool)val; break; + case 10: txt_hidden = (bool)val; break; case 11: txt_reverse = (bool)val; break; case 12: txt_underlncolor = val; break; case 13: txt_fgc = (bool)val; break; diff --git a/docs/clibasic.man b/docs/clibasic.man new file mode 100644 index 0000000..08f3444 --- /dev/null +++ b/docs/clibasic.man @@ -0,0 +1,74 @@ +.TH CLIBASIC 1 "2021-09-09" "0.22" +.SH NAME +CLIBASIC \- Command Line Interface BASIC +.SH SYNOPSIS +\fBclibasic\fR [\fIOPTION\fR]... +.SH DESCRIPTION +A BASIC interpreter for the terminal (or console), written in C +.SH OPTIONS +.PP +.TP 7 +\fB\-\-help\fR +Shows the usage and option information. +.TP +\fB\-\-version\fR +Shows the version and license information. +.TP +\fB\-\-args\fR [\fI\,ARG\/\fR]... +Passes ARGs to the program. +.TP +\fB\-x\fR, \fB\-\-exec\fR \fI\,FILE\/\fR [\fI\,ARG\/\fR]... +Runs and passes ARGs to FILE. +.TP +\fB\-f\fR, \fB\-\-file\fR \fI\,FILE\/\fR +Runs FILE. +.TP +\fB\-c\fR, \fB\-\-command\fR \fI\,COMMAND\/\fR +Runs COMMAND and exits. +.TP +\fB\-k\fR, \fB\-\-keep\fR +Stops CLIBASIC from resetting text attributes. +.TP +\fB\-s\fR, \fB\-\-skip\fR +Skips searching for autorun programs. +.TP +\fB\-i\fR, \fB\-\-info\fR +Enables the info text. +.SH EXAMPLES +.TP +\fBclibasic\fR +Runs CLIBASIC in shell mode. +.TP +\fBclibasic\fR \-i +Runs CLIBASIC in shell mode and displays the info header like earlier versions of CLIBASIC. +.TP +\fBclibasic\fR examples/info.bas +Looks for ./examples/info.bas and if successful, loads and runs the file. CLIBASIC will exit once an error has occurred or execution completes successfully. +.TP +\fBclibasic\fR \-f \-bar\-.bas +In the case you want to run a file that starts with a hyphen, use the \-file or \-f option which will cause the next argument to be evaluated as a file name. +.TP +\fBclibasic\fR \-c 'PRINT "FOO"; "BAR"' +If you want to run a single command, use the \-\-command or \-c option which will interpret the next argument as if it were typed in during shell mode. +.SH EXIT STATUS +.TP +\fB0\fR +Success. +.TP +\fB1\fR +Error occurred. +.TP +\fBNOTE:\fR +Any exit status (0\-255) can be returned by the program or command via the 'EXIT' command. +.SH FILES +.TP +\fB\fI~/.clibasic_history\fR +History file for storing previously entered commands from shell mode. +.SH AUTHOR +.TP +PQCraft <0456523@gmail.com> +.SH COPYRIGHT +Copyright (C) 2021 PQCraft +.br +Licensed under the GNU General Public License version 3.0 + diff --git a/docs/clibasic_tmp_cmds.txt b/docs/clibasic_tmp_cmds.txt index 6188c1b..de19a0d 100644 --- a/docs/clibasic_tmp_cmds.txt +++ b/docs/clibasic_tmp_cmds.txt @@ -60,3 +60,5 @@ $txtlock:do:k$=inkey$():if asc(k$)<>0:print k$,"\n":endif:loop for i, 0, i < 4, 1: print "bruh": next for i, 0, i < 4, 1: print "bruh": for j, 0, j < 4, 1: print "__bruh__": next: next for i, 0, i < 4, 1: print "i", i: for j, 0, j < 4, 1: print "j", j: next: next +do: i = fread(0): if i <> -1: print chr$(i);: loop: endif: print +if i=0: print "zero": elseif i=1: print "one": else: print "other": endif diff --git a/docs/manual.odt b/docs/manual.odt index 41e6990b52b98e91295c9f711c0eb09470ee8499..c45700428aa7b5e58d5df0667dcc600d1c0bb48c 100644 GIT binary patch delta 22026 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

{Iod;3A6ee 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≧p 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˙JVwn8*HU9=$0RWO^jbcZYPl7WAS$dP@hm%Q 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

mx5V7ORx9a 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�FP_bAwD5(Ot^h65GgdTtZ5& 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 MFqoKR)#Nb#ACtDQ2><{9 diff --git a/examples/args.bas b/examples/args.bas index 34b3be1..ce94a06 100644 --- a/examples/args.bas +++ b/examples/args.bas @@ -1,6 +1,8 @@ PRINT "clibasic: {" + _STARTCMD$() + "}" +PRINT "file: {" + _ARG$(I) + "}" PRINT "cmdline: {" + _ARG$() + "}" -FOR I, 0, I < _ARGC(), 1 +PRINT "count: ["; _ARGC(); "]" +FOR I, 1, I <= _ARGC(), 1 print "arg [" + STR$(I) + "]" + ": {" + _ARG$(I) + "}" NEXT diff --git a/examples/bunkerbomb.bas b/examples/bunkerbomb.bas index 06e1ed9..f541ec8 100644 --- a/examples/bunkerbomb.bas +++ b/examples/bunkerbomb.bas @@ -1,20 +1,14 @@ -set e, 0 -dowhile e = 0 - set i$, input$("Bomb le bunker? [Y/n]: ") - if i$ = "": set e, 1: endif - set c, asc(i$) - set c$, chr$(c) - if c$ = "y": set e, 1: endif - if c$ = "Y": set e, 1: endif - if c$ = "n": set e, 2: endif - if c$ = "N": set e, 2: endif -loop +@ again +set i$, input$("Bomb le bunker? 💣 [Y/n]: ") +i$=ucase$(snip$(i$, 1)) +if i$ <> "" & i$ <> "Y" & i$ <> "N" + goto again +endif print "You have chosen..." -if e = 1 - print "Sending nukes..."; +if i$ <> "N" + print "☢️ Sending nukes..."; wait 3 - print "\nDone." + print "\nDone. 💥" else print "Le buker lives another day." endif -exit \ No newline at end of file diff --git a/examples/cat.bas b/examples/cat.bas new file mode 100644 index 0000000..1d6b17a --- /dev/null +++ b/examples/cat.bas @@ -0,0 +1,7 @@ +_txtattrib "fgc", "off" +if _argc() <> 1: print "Expected 1 argument, recieved "; _argc(); " arguments instead": exit 1: endif +del file +file = fopen(_arg$(1), "r") +if file = -1: print "Could not open '"; _arg$(1); "': "; _errnostr$(_fileerror()): endif +dowhile eof(file) = 0: put fread$(file): loop +file = fclose(file) diff --git a/examples/clock.bas b/examples/clock.bas new file mode 100644 index 0000000..ea98f9f --- /dev/null +++ b/examples/clock.bas @@ -0,0 +1,18 @@ +do + locate 1 + h = date("hr") + if h > 12 + h = h - 12 + m$ = "PM" + elseif h = 0 + h = 12 + m$ = "AM" + else + m$ = "AM" + endif + print pad$(h, 2); ":"; pad$(date("min"), 2); ":"; pad$(date("sec"), 2); m$; " "; pad$(date("year"), 4); "-"; pad$(date("mon"), 2); "-"; pad$(date("day"), 2) + s = date(0) + waitms 900 + while date(0) = s: loop + locate , cury() - 1 +loop diff --git a/examples/executable.bas b/examples/executable.bas index 634d57c..836c1e9 100644 --- a/examples/executable.bas +++ b/examples/executable.bas @@ -4,4 +4,6 @@ PRINT "args: " + _ARG$() FOR I, 1, I < _ARGC(), 1 print "arg #" + STR$(I) + ": " + _ARG$(I) NEXT - +PRINT "Press [ENTER] to continue..."; +DOWHILE INKEY$() <> "\n": LOOP + diff --git a/examples/factorial.bas b/examples/factorial.bas index fc0d4f1..2b0e62e 100644 --- a/examples/factorial.bas +++ b/examples/factorial.bas @@ -1,4 +1,9 @@ -str=INPUT$("Enter a factorial number: ") +IF _arg$() = "" + str=INPUT$("Enter a factorial number: ") +ELSE + str=_arg$() +ENDIF + num=CINT(VAL(str)) fact=1 diff --git a/examples/info.bas b/examples/info.bas index 583b09b..4620fa5 100644 --- a/examples/info.bas +++ b/examples/info.bas @@ -1,4 +1,3 @@ print "You are running CLIBASIC "; _VER$(); " on "; _OS$(); " "; _BITS$(); "-bit." call dirname$(_arg$(0)) + "color.bas" -'goto te diff --git a/examples/linenumbers.bas b/examples/linenumbers.bas new file mode 100644 index 0000000..f0bb491 --- /dev/null +++ b/examples/linenumbers.bas @@ -0,0 +1,3 @@ +10 PRINT "Hello World!" +20 GOTO 10 + diff --git a/examples/speedtestfast.bas b/examples/speedtestfast.bas index 4099b96..54a8aa9 100644 --- a/examples/speedtestfast.bas +++ b/examples/speedtestfast.bas @@ -1 +1 @@ -SCORE=0:RESETTIMER:DOWHILE TIMER()<5:SCORE=SCORE+1:LOOP:PRINT "Score: ";SCORE \ No newline at end of file +SCORE=0:RESETTIMER:DOWHILE TIMER()<5:SCORE=SCORE+1:LOOP:PRINT "Score: ";SCORE diff --git a/examples/test.bas b/examples/test.bas index 9ca5f6e..cac8617 100644 --- a/examples/test.bas +++ b/examples/test.bas @@ -1,12 +1,18 @@ 'clibasic test program print "test" -color 21 +if _vt() = 1 + color 21 +else + color 12 +endif print "blue" _txtattrib 1, 1 set E, 0 do -set E, E+1 -print E, ""; -loopwhile e < 256 \ No newline at end of file + set E, E+1 + print E, ""; +loopwhile e < 256 + +print diff --git a/functions.c b/functions.c index c1cf040..88e0cc4 100644 --- a/functions.c +++ b/functions.c @@ -115,7 +115,7 @@ if (chkCmd(1, "SH")) { int duperr; duperr = dup(2); close(2); - sprintf(outbuf, "%d", system(farg[1])); + sprintf(outbuf, "%d", (retval = system(farg[1]))); dup2(duperr, 2); close(duperr); if (sh_restoreAttrib) updateTxtAttrib(); @@ -156,7 +156,7 @@ if (chkCmd(1, "EXEC")) { } else if (pid > 0) { while (wait(&status) != pid) {} - sprintf(outbuf, "%d", (status >> 8) & 0xFF); + sprintf(outbuf, "%d", (retval = WEXITSTATUS(status))); } else if (sh_silent) { dup2(stdout_dup, 1); @@ -186,8 +186,7 @@ if (chkCmd(1, "EXEC")) { dup2(fd, 1); dup2(fd, 2); } - int ret = system(tmpcmd); - (void)ret; + retval = WEXITSTATUS(system(tmpcmd)); if (sh_silent) { dup2(stdout_dup, 1); dup2(stderr_dup, 2); @@ -210,7 +209,7 @@ if (chkCmd(1, "SH$")) { FILE* p = popen(farg[1], "r"); if (p) { outbuf[fread(outbuf, 1, CB_BUF_SIZE - 1, p)] = 0; - pclose(p); + retval = WEXITSTATUS(pclose(p)); } dup2(duperr, 2); close(duperr); @@ -243,7 +242,8 @@ if (chkCmd(1, "EXEC$")) { exit(127); } else if (pid > 0) { - while (wait(NULL) != pid) {} + while (wait(&retval) != pid) {} + retval = WEXITSTATUS(retval); outbuf[read(fd[0], outbuf, CB_BUF_SIZE - 1)] = 0; } dup2(stdout_dup, 1); @@ -272,7 +272,7 @@ if (chkCmd(1, "EXEC$")) { FILE* p = popen(tmpcmd, "r"); if (p) { outbuf[fread(outbuf, 1, CB_BUF_SIZE, p)] = 0; - pclose(p); + retval = WEXITSTATUS(pclose(p)); } dup2(duperr, 2); close(duperr); @@ -795,6 +795,64 @@ if (chkCmd(1, "LINE$")) { if (outbuf[strlen(outbuf) - 1] == '\r') outbuf[strlen(outbuf) - 1] = 0; goto fexit; } +if (chkCmd(1, "DATE")) { + cerr = 0; + ftype = 2; + if (fargct != 1 || fargt[1] == 0) {cerr = 3; goto fexit;} + int element = -1; + if (fargt[1] == 2) { + element = atoi(farg[1]); + } else { + upCase(farg[1]); + chkCmdPtr = farg[1]; + if (chkCmd(2, "SEC", "SECOND")) {element = 0;} + else if (chkCmd(2, "MIN", "MINUTE")) {element = 1;} + else if (chkCmd(2, "HR", "HOUR")) {element = 2;} + else if (chkCmd(1, "DAY")) {element = 3;} + else if (chkCmd(2, "MON", "MONTH")) {element = 4;} + else if (chkCmd(1, "YEAR")) {element = 5;} + else if (chkCmd(2, "WDAY", "WEEKDAY")) {element = 6;} + else if (chkCmd(2, "YDAY", "YEARDAY")) {element = 7;} + else if (chkCmd(3, "DST", "DAYLIGHT", "DAYLIGHTSAVING")) {element = 8;} + } + if (element > 8 || element < 0) {cerr = 16; goto fexit;} + time_t rawtime; + time(&rawtime); + struct tm* timeinfo; + timeinfo = localtime(&rawtime); + int edata = -1; + switch (element) { + case 0: + edata = timeinfo->tm_sec; + break; + case 1: + edata = timeinfo->tm_min; + break; + case 2: + edata = timeinfo->tm_hour; + break; + case 3: + edata = timeinfo->tm_mday; + break; + case 4: + edata = timeinfo->tm_mon; + break; + case 5: + edata = 1900 + timeinfo->tm_year; + break; + case 6: + edata = timeinfo->tm_wday; + break; + case 7: + edata = timeinfo->tm_yday; + break; + case 8: + edata = timeinfo->tm_isdst; + break; + } + sprintf(outbuf, "%d", edata); + goto fexit; +} if (chkCmd(1, "CWD$")) { cerr = 0; ftype = 1; @@ -804,6 +862,7 @@ if (chkCmd(1, "CWD$")) { } if (chkCmd(1, "FILES$")) { cerr = 0; + fileerror = 0; ftype = 1; if (fargct > 1) {cerr = 3; goto fexit;} char* olddn = NULL; @@ -812,15 +871,14 @@ if (chkCmd(1, "FILES$")) { olddn = malloc(CB_BUF_SIZE); getcwd(olddn, CB_BUF_SIZE); if (chdir(farg[1])) { + fileerror = errno; free(olddn); - seterrstr(farg[1]); - cerr = 17; + outbuf[0] = 0; goto fexit; } } DIR* cwd = opendir("."); - if (!cwd) {if (fargct) {free(olddn);} cerr = 20; goto fexit;} - DIR* tmpdir; + if (!cwd) {if (fargct) {chdir(olddn); free(olddn);} outbuf[0] = 0; goto fexit;} struct dirent* dir; #ifdef _WIN32 #define FSC '\\' @@ -829,22 +887,23 @@ if (chkCmd(1, "FILES$")) { #define FSC '/' strcpy(outbuf, "./\n../"); #endif + struct stat pathstat; while ((dir = readdir(cwd))) { - if ((tmpdir = opendir(dir->d_name)) && strcmp(dir->d_name, ".") && strcmp(dir->d_name, "..")) { + stat(dir->d_name, &pathstat); + if (S_ISDIR(pathstat.st_mode) && strcmp(dir->d_name, ".") && strcmp(dir->d_name, "..")) { strApndChar(outbuf, '\n'); copyStrApnd(dir->d_name, outbuf); strApndChar(outbuf, FSC); } - if (tmpdir) closedir(tmpdir); } closedir(cwd); cwd = opendir("."); while ((dir = readdir(cwd))) { - if (!(tmpdir = opendir(dir->d_name))) { + stat(dir->d_name, &pathstat); + if (!(S_ISDIR(pathstat.st_mode))) { strApndChar(outbuf, '\n'); copyStrApnd(dir->d_name, outbuf); } - if (tmpdir) closedir(tmpdir); } if (fargct) { chdir(olddn); @@ -853,15 +912,259 @@ if (chkCmd(1, "FILES$")) { closedir(cwd); goto fexit; } -if (chkCmd(2, "CHDIR", "CD")) { +if (chkCmd(2, "CD", "CHDIR")) { + cerr = 0; + fileerror = 0; + ftype = 2; + if (fargct != 1) {cerr = 3; goto fexit;} + if (fargt[1] != 1) {cerr = 2; goto fexit;} + outbuf[0] = '0' + !chdir(farg[1]); + outbuf[1] = 0; + goto fexit; +} +if (chkCmd(1, "FOPEN")) { cerr = 0; + fileerror = 0; + ftype = 2; + if (fargct != 2) {cerr = 3; goto fexit;} + if (fargt[1] != 1 || fargt[2] != 1) {cerr = 2; goto fexit;} + if (!isFile(farg[1])) { + outbuf[0] = '-'; + outbuf[1] = '1'; + outbuf[2] = 0; + fileerror = EINVAL; + goto fexit; + } + sprintf(outbuf, "%d", openFile(farg[1], farg[2])); + goto fexit; +} +if (chkCmd(1, "FCLOSE")) { + cerr = 0; + fileerror = 0; + ftype = 2; + if (fargct != 1) {cerr = 3; goto fexit;} + if (fargt[1] != 2) {cerr = 2; goto fexit;} + outbuf[0] = '0' + closeFile(atoi(farg[1])); + outbuf[1] = 0; + goto fexit; +} +if (chkCmd(1, "FSIZE")) { + cerr = 0; + fileerror = 0; + ftype = 2; + if (fargct != 1) {cerr = 3; goto fexit;} + if (fargt[1] != 2) {cerr = 2; goto fexit;} + int fnum = atoi(farg[1]); + if (fnum < 0 || fnum >= filemaxct) { + outbuf[0] = '-'; + outbuf[1] = '1'; + outbuf[2] = 0; + fileerror = EINVAL; + goto fexit; + } + sprintf(outbuf, "%d", filedata[fnum].size); + goto fexit; +} +if (chkCmd(1, "EOF")) { + cerr = 0; + fileerror = 0; + ftype = 2; + if (fargct != 1) {cerr = 3; goto fexit;} + if (fargt[1] != 2) {cerr = 2; goto fexit;} + int fnum = atoi(farg[1]); + if (fnum < 0 || fnum >= filemaxct) { + outbuf[0] = '-'; + outbuf[1] = '1'; + outbuf[2] = 0; + fileerror = EINVAL; + goto fexit; + } + int32_t prev = ftell(filedata[fnum].fptr); + fgetc(filedata[fnum].fptr); + errno = 0; + outbuf[0] = '0' + (feof(filedata[fnum].fptr) != 0); + fileerror = errno; + fseek(filedata[fnum].fptr, prev, SEEK_SET); + outbuf[1] = 0; + goto fexit; +} +if (chkCmd(1, "EOFD")) { + cerr = 0; + fileerror = 0; + ftype = 2; + if (fargct != 1) {cerr = 3; goto fexit;} + if (fargt[1] != 2) {cerr = 2; goto fexit;} + int fnum = atoi(farg[1]); + if (fnum < 0 || fnum >= filemaxct) { + outbuf[0] = '-'; + outbuf[1] = '1'; + outbuf[2] = 0; + fileerror = EINVAL; + goto fexit; + } + errno = 0; + outbuf[0] = '0' + (ftell(filedata[fnum].fptr) >= filedata[fnum].size); + outbuf[1] = 0; + fileerror = errno; + goto fexit; +} +if (chkCmd(1, "FREAD$")) { + cerr = 0; + fileerror = 0; ftype = 1; if (fargct != 1) {cerr = 3; goto fexit;} + if (fargt[1] != 2) {cerr = 2; goto fexit;} + int fnum = atoi(farg[1]); + outbuf[1] = 0; + if (fnum < 0 || fnum >= filemaxct) { + outbuf[0] = 0; + fileerror = EINVAL; + goto fexit; + } + if (feof(filedata[fnum].fptr)) { + outbuf[0] = 0; + } else { + errno = 0; + int c = fgetc(filedata[fnum].fptr); + outbuf[0] = (c < 0) ? 0 : c; + fileerror = errno; + } + goto fexit; +} +if (chkCmd(1, "FREAD")) { + cerr = 0; + fileerror = 0; + ftype = 2; + if (fargct != 1) {cerr = 3; goto fexit;} + if (fargt[1] != 2) {cerr = 2; goto fexit;} + int fnum = atoi(farg[1]); + int fc = -1; + if (fnum < 0 || fnum >= filemaxct) { + fileerror = EINVAL; + } else if (!feof(filedata[fnum].fptr)) { + errno = 0; + fc = fgetc(filedata[fnum].fptr); + if (fc < 0) fc = -1; + fileerror = errno; + } + sprintf(outbuf, "%d", fc); + goto fexit; +} +if (chkCmd(1, "FWRITE")) { + cerr = 0; + fileerror = 0; + ftype = 2; + if (fargct != 2) {cerr = 3; goto fexit;} + if (fargt[1] != 2 || fargt[2] != 1) {cerr = 2; goto fexit;} + int fnum = atoi(farg[1]); + int32_t ret = -1; + if (fnum < 0 || fnum >= filemaxct) { + fileerror = EINVAL; + } else { + errno = 0; + ret = (fputs(farg[2], filedata[fnum].fptr) != EOF); + fileerror = errno; + } + sprintf(outbuf, "%d", ret); + goto fexit; +} +if (chkCmd(1, "FSEEK")) { + cerr = 0; + fileerror = 0; + ftype = 2; + if (fargct != 2) {cerr = 3; goto fexit;} + if (fargt[1] != 2 || fargt[2] != 2) {cerr = 2; goto fexit;} + int fnum = atoi(farg[1]); + int32_t ret = 2; + if (fnum < 0 || fnum >= filemaxct) { + fileerror = EINVAL; + } else { + errno = 0; + int32_t pos = atoi(farg[2]); + if (pos < 0) { + fileerror = EINVAL; + } else { + ret = !fseek(filedata[fnum].fptr, (pos > filedata[fnum].size) ? filedata[fnum].size : pos, SEEK_SET); + fileerror = errno; + } + } + sprintf(outbuf, "%d", ret); + goto fexit; +} +if (chkCmd(1, "FLUSH")) { + cerr = 0; + fileerror = 0; + ftype = 2; + if (fargct != 1) {cerr = 3; goto fexit;} + if (fargt[1] != 2) {cerr = 2; goto fexit;} + int fnum = atoi(farg[1]); + if (fnum < 0 || fnum >= filemaxct) { + outbuf[0] = '-'; + outbuf[1] = '1'; + outbuf[2] = 0; + fileerror = EINVAL; + goto fexit; + } + errno = 0; + outbuf[0] = (fflush(filedata[fnum].fptr) != EOF); + outbuf[1] = 0; + fileerror = errno; + goto fexit; +} +if (chkCmd(2, "MD", "MKDIR")) { + cerr = 0; + fileerror = 0; + ftype = 2; + if (fargct != 1) {cerr = 3; goto fexit;} + if (fargt[1] != 1) {cerr = 2; goto fexit;} + errno = 0; + #ifndef _WIN32 + outbuf[0] = '0' + !mkdir(farg[1], S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + #else + outbuf[0] = '0' + !mkdir(farg[1]); + #endif + outbuf[1] = 0; + fileerror = errno; + goto fexit; +} +if (chkCmd(2, "RM", "REMOVE")) { + cerr = 0; + fileerror = 0; + ftype = 2; + if (fargct != 1) {cerr = 3; goto fexit;} if (fargt[1] != 1) {cerr = 2; goto fexit;} + outbuf[0] = '0' + cbrm(farg[1]); + outbuf[1] = 0; + goto fexit; +} +if (chkCmd(4, "MV", "MOVE", "REN", "RENAME")) { + cerr = 0; + fileerror = 0; + ftype = 2; + if (fargct != 2) {cerr = 3; goto fexit;} + if (fargt[1] != 1 || fargt[2] != 1) {cerr = 2; goto fexit;} errno = 0; - int ret = chdir(farg[1]); - (void)ret; - sprintf(outbuf, "%d", errno); + outbuf[0] = '0' + !rename(farg[1], farg[2]); + outbuf[1] = 0; + fileerror = errno; + goto fexit; +} +if (chkCmd(1, "ISFILE")) { + cerr = 0; + fileerror = 0; + ftype = 2; + if (fargct != 1) {cerr = 3; goto fexit;} + if (fargt[1] != 1) {cerr = 2; goto fexit;} + struct stat pathstat; + if (stat(farg[1], &pathstat)) { + outbuf[0] = '-'; + outbuf[1] = '1'; + outbuf[2] = 0; + fileerror = errno; + goto fexit; + } + outbuf[0] = '0' + !(S_ISDIR(pathstat.st_mode)); + outbuf[1] = 0; goto fexit; } goto fexit; @@ -894,6 +1197,28 @@ if (chkCmd(1, "_ENVSET")) { outbuf[1] = 0; goto fexit; } +if (chkCmd(1, "_RET")) { + cerr = 0; + ftype = 2; + if (fargct) {cerr = 3; goto fexit;} + sprintf(outbuf, "%d", retval); + goto fexit; +} +if (chkCmd(1, "_ERRNOSTR$")) { + cerr = 0; + ftype = 1; + if (fargct != 1) {cerr = 3; goto fexit;} + if (fargt[1] != 2) {cerr = 2; goto fexit;} + copyStr(strerror(atoi(farg[1])), outbuf); + goto fexit; +} +if (chkCmd(1, "_FILEERROR")) { + cerr = 0; + ftype = 2; + if (fargct) {cerr = 3; goto fexit;} + sprintf(outbuf, "%d", fileerror); + goto fexit; +} if (chkCmd(1, "_PROMPT$")) { cerr = 0; ftype = 1; @@ -930,6 +1255,18 @@ if (chkCmd(1, "_OS$")) { copyStr(OSVER, outbuf); goto fexit; } +if (chkCmd(1, "_VT")) { + cerr = 0; + ftype = 2; + if (fargct) {cerr = 3; goto fexit;} + #ifdef _WIN_NO_VT + outbuf[0] = '0'; + #else + outbuf[0] = '1'; + #endif + outbuf[1] = 0; + goto fexit; +} if (chkCmd(1, "_STARTCMD$")) { cerr = 0; ftype = 1; @@ -962,6 +1299,6 @@ if (chkCmd(1, "_ARGC")) { cerr = 0; ftype = 2; if (fargct) {cerr = 3; goto fexit;} - sprintf(outbuf, "%d", progargc); + sprintf(outbuf, "%d", (progargc > 0) ? progargc - 1 : progargc); goto fexit; } diff --git a/logic.c b/logic.c index 7317da3..3a73ad1 100644 --- a/logic.c +++ b/logic.c @@ -13,31 +13,49 @@ if (chkCmd(2, "?", "PRINT")) { if (cmd[j] == 0) {putchar('\n'); return true;} else {j--;} bool inStr = false; + bool lookingForSpChar = false; + bool sawSpChar = false; int pct = 0, bct = 0; int32_t ptr = 0; int32_t i = j; while (cmd[i]) { i++; if (cmd[i] == '"') {inStr = !inStr;} - if (cmd[i] == '(' && !inStr) {pct++;} - if (cmd[i] == ')' && !inStr) {pct--;} - if (cmd[i] == '[' && !inStr) {bct++;} - if (cmd[i] == ']' && !inStr) {bct--;} - if (cmd[i] == ' ' && !inStr) {} else + if (!inStr) { + switch (cmd[i]) { + case '(': ++pct; break; + case ')': --pct; break; + case '[': ++bct; break; + case ']': --bct; break; + } + } if ((cmd[i] == ',' || cmd[i] == ';' || cmd[i] == 0) && !inStr && pct == 0 && bct == 0) { - ltmp[1][ptr] = 0; ptr = 0; + ltmp[1][ptr] = 0; + ptr = 0; int32_t len = strlen(ltmp[1]); int tmpt; if (!(tmpt = getVal(ltmp[1], ltmp[1]))) return true; if (cmd[j] == ',') { - if (tmpt != 255) {putchar('\t');} - else {putchar('\n');} + if (tmpt == 255) {putchar('\n');} + else {putchar('\t');} } fputs(ltmp[1], stdout); if (cmd[i] == 0 && len > 0) putchar('\n'); j = i; - } else - {ltmp[1][ptr] = cmd[i]; ptr++;} + lookingForSpChar = false; + sawSpChar = false; + } else { + if (!inStr) { + if (cmd[i] == ' ' && !sawSpChar && ptr > 0) {lookingForSpChar = true;} + if (isExSpChar(cmd[i])) {lookingForSpChar = false; sawSpChar = true;} + } + if (inStr || cmd[i] != ' ') { + if (!isExSpChar(cmd[i])) sawSpChar = false; + if (lookingForSpChar) {cerr = 1; return true;} + ltmp[1][ptr] = cmd[i]; + ptr++; + } + } } if (pct || bct || inStr) {cerr = 1; return true;} fflush(stdout); @@ -64,7 +82,7 @@ if (chkCmd(1, "DO")) { dlstack[dlstackp].itsp = itstackp; return true; } -if (chkCmd(1, "DOWHILE")) { +if (chkCmd(2, "WHILE", "DOWHILE")) { if (dlstackp >= CB_PROG_LOGIC_MAX - 1) {cerr = 12; return true;} dlstackp++; if (itstackp > ((progindex > -1) ? minitstackp[progindex] : -1)) { @@ -78,7 +96,7 @@ if (chkCmd(1, "DOWHILE")) { } copyStrSnip(cmd, j + 1, strlen(cmd), ltmp[1]); uint8_t testval = logictest(ltmp[1]); - if (testval != 1 && testval) return true; + if (testval == 255) return true; if (testval == 1) { dlstack[dlstackp].pl = progLine; dlstack[dlstackp].cp = cmdpos; @@ -129,7 +147,7 @@ if (chkCmd(1, "LOOPWHILE")) { } copyStrSnip(cmd, j + 1, strlen(cmd), ltmp[1]); uint8_t testval = logictest(ltmp[1]); - if (testval != 1 && testval) return true; + if (testval == 255) return true; if (testval == 1) { if (inProg) { cp = dlstack[dlstackp].cp; @@ -160,8 +178,9 @@ if (chkCmd(1, "IF")) { } copyStrSnip(cmd, j + 1, strlen(cmd), ltmp[1]); uint8_t testval = logictest(ltmp[1]); - if (testval != 1 && testval) return true; + if (testval == 255) return true; itdcmd[itstackp] = (bool)!testval; + didelseif = !itdcmd[itstackp]; return true; } if (chkCmd(1, "ELSE")) { @@ -176,10 +195,29 @@ if (chkCmd(1, "ELSE")) { if (fndcmd[fnstackp]) return true; } if (didelse) {cerr = 11; return true;} + if (didelseif) {itdcmd[itstackp] = true; return true;} didelse = true; itdcmd[itstackp] = !itdcmd[itstackp]; return true; } +if (chkCmd(1, "ELSEIF")) { + if (itstackp <= -1) {cerr = 8; return true;} + if (itstackp > ((progindex > -1) ? minitstackp[progindex] + 1 : 0)) { + if (itdcmd[itstackp - 1]) return true; + } + if (dlstackp > ((progindex > -1) ? mindlstackp[progindex] : -1)) { + if (dldcmd[dlstackp]) return true; + } + if (fnstackp > ((progindex > -1) ? minfnstackp[progindex] : -1)) { + if (fndcmd[fnstackp]) return true; + } + copyStrSnip(cmd, j + 1, strlen(cmd), ltmp[1]); + uint8_t testval = logictest(ltmp[1]); + if (testval == 255) return true; + itdcmd[itstackp] = (bool)(!testval); + if (!didelseif) didelseif = !itdcmd[itstackp]; + return true; +} if (chkCmd(1, "ENDIF")) { if (itstackp <= -1) {cerr = 7; return true;} itstackp--; @@ -191,6 +229,7 @@ if (chkCmd(1, "ENDIF")) { } itdcmd[itstackp + 1] = false; didelse = false; + didelseif = false; return true; } if (chkCmd(1, "FOR")) { @@ -224,7 +263,7 @@ if (chkCmd(1, "FOR")) { setVar(fnvar, forbuf[0], 2, -1); } int testval = logictest(forbuf[2]); - if (testval == -1) return true; + if (testval == 255) return true; fndcmd[fnstackp] = !(bool)testval; if (!(fninfor[fnstackp] = (bool)testval)) {cerr = 0; return true;} if (!fninfor[fnstackp] && fnstack[fnstackp].cp == -1) { diff --git a/package.sh b/package.sh index 770c1ae..95213a2 100644 --- a/package.sh +++ b/package.sh @@ -1,39 +1,30 @@ -# makes clibasic release files +# clibasic release packager -# erase old versions -rm -f clibasic-linux-x64.zip -rm -f clibasic-linux-x86.zip -rm -f clibasic-windows-x64.zip -rm -f clibasic-windows-x86.zip -rm -f examples.zip +# mkrel function to reduce sloc +mkrel() { + echo "Making $1..." + rm -f "$1" + make $3 1> /dev/null || exit 1 + zip "$1" $2 1> /dev/null || exit 1 + make $4 1> /dev/null +} # backup built executables mv clibasic clibasic.tmp 2> /dev/null mv clibasic.exe clibasic.exe.tmp 2> /dev/null # package the examples -zip -r examples.zip examples +echo "Packaging examples..." +rm -f examples.zip +zip -r examples.zip examples 1> /dev/null || exit 1 # build -rm -f clibasic -make build 1> /dev/null -zip clibasic-linux-x64.zip clibasic -make clean 1> /dev/null - -rm -f clibasic -make build32 1> /dev/null -zip clibasic-linux-x86.zip clibasic -make clean 1> /dev/null - -rm -f clibasic.exe -make cross build 1> /dev/null -zip clibasic-windows-x64.zip clibasic.exe *.dll -make cross clean 1> /dev/null - -rm -f clibasic.exe -make cross build32 1> /dev/null -zip clibasic-windows-x86.zip clibasic.exe *.dll -make cross clean 1> /dev/null +mkrel "clibasic-linux-x64.zip" "clibasic" "clean build" "clean" +mkrel "clibasic-linux-x86.zip" "clibasic" "clean build32" "clean" +mkrel "clibasic-windows-vt-x64.zip" "clibasic.exe *.dll" "cross clean vt build" "cross clean" +mkrel "clibasic-windows-vt-x86.zip" "clibasic.exe *.dll" "cross clean vt build32" "cross clean" +mkrel "clibasic-windows-x64.zip" "clibasic.exe *.dll" "cross clean build" "cross clean" +mkrel "clibasic-windows-x86.zip" "clibasic.exe *.dll" "cross clean build32" "cross clean" # clean up mv clibasic.tmp clibasic 2> /dev/null