diff --git a/ueforth/Makefile b/ueforth/Makefile index 77a4f04..753862b 100644 --- a/ueforth/Makefile +++ b/ueforth/Makefile @@ -1,4 +1,4 @@ -VERSION=7.0.6 +VERSION=7.0.6.1 REVISION=$(shell git rev-parse HEAD) REVSHORT=$(shell echo $(REVISION) | head -c 7) @@ -291,38 +291,49 @@ $(ESP32)/ESP32forth.zip: $(ESP32)/ESP32forth/ESP32forth.ino # ---- Publish to Archive ---- ARCHIVE=gs://eforth/releases +GSUTIL=CLOUDSDK_CORE_PROJECT=eforth gsutil +GSUTIL_CP=$(GSUTIL) \ + -h "Cache-Control:public, max-age=3600" \ + cp -a public-read publish-esp32: $(ESP32)/ESP32forth.zip - CLOUDSDK_CORE_PROJECT=eforth gsutil cp -a public-read \ + $(GSUTIL_CP) \ $(ESP32)/ESP32forth.zip \ $(ARCHIVE)/ESP32forth-$(VERSION)-$(REVSHORT).zip - CLOUDSDK_CORE_PROJECT=eforth gsutil cp -a public-read \ + $(GSUTIL_CP) \ $(ESP32)/ESP32forth.zip \ $(ARCHIVE)/ESP32forth-$(VERSION).zip publish-linux: $(POSIX)/ueforth - CLOUDSDK_CORE_PROJECT=eforth gsutil cp -a public-read \ + $(GSUTIL_CP) \ $(POSIX)/ueforth \ - $(ARCHIVE)/ueforth.$(VERSION)-$(REVSHORT).linux - CLOUDSDK_CORE_PROJECT=eforth gsutil cp -a public-read \ + $(ARCHIVE)/ueforth-$(VERSION)-$(REVSHORT).linux + $(GSUTIL_CP) \ $(POSIX)/ueforth \ - $(ARCHIVE)/ueforth.$(VERSION).linux + $(ARCHIVE)/ueforth-$(VERSION).linux publish-windows: $(WINDOWS)/uEf32.exe $(WINDOWS)/uEf64.exe - CLOUDSDK_CORE_PROJECT=eforth gsutil cp -a public-read \ + $(GSUTIL_CP) \ $(WINDOWS)/uEf32.exe \ - $(ARCHIVE)/uEf32.$(VERSION)-$(REVSHORT).exe - CLOUDSDK_CORE_PROJECT=eforth gsutil cp -a public-read \ + $(ARCHIVE)/uEf32-$(VERSION)-$(REVSHORT).exe + $(GSUTIL_CP) \ $(WINDOWS)/uEf32.exe \ - $(ARCHIVE)/uEf32.$(VERSION).exe - CLOUDSDK_CORE_PROJECT=eforth gsutil cp -a public-read \ + $(ARCHIVE)/uEf32-$(VERSION).exe + $(GSUTIL_CP) \ $(WINDOWS)/uEf64.exe \ - $(ARCHIVE)/uEf64.$(VERSION)-$(REVSHORT).exe - CLOUDSDK_CORE_PROJECT=eforth gsutil cp -a public-read \ + $(ARCHIVE)/uEf64-$(VERSION)-$(REVSHORT).exe + $(GSUTIL_CP) \ $(WINDOWS)/uEf64.exe \ - $(ARCHIVE)/uEf64.$(VERSION).exe + $(ARCHIVE)/uEf64-$(VERSION).exe -publish: publish-esp32 publish-linux publish-windows +publish-index: | $(GEN) + $(GSUTIL) ls gs://eforth/releases | tools/webindex.py >$(GEN)/archive.html + $(GSUTIL_CP) \ + $(GEN)/archive.html \ + gs://eforth/releases/index.html + $(GSUTIL) web set -m index.html -e 404.html gs://eforth + +publish: publish-esp32 publish-linux publish-windows publish-index # ---- DEPLOY ---- @@ -339,21 +350,18 @@ REPLACE = common/replace.js \ UE_REPLACE = $(REPLACE) FORTH=uEForth ESP_REPLACE = $(REPLACE) FORTH=ESP32forth -$(DEPLOY)/app.yaml: $(ESP32)/ESP32forth.zip \ +$(DEPLOY)/app.yaml: $(RES)/eforth.ico \ $(wildcard site/*.html) \ + site/static/eforth.css \ site/app.yaml \ site/eforth.go \ $(TARGETS) | $(DEPLOY) + rm -rf $(DEPLOY)/ mkdir -p $(DEPLOY) cp -r site/static $(DEPLOY)/static - cp -r site/downloads $(DEPLOY)/downloads + cp $(RES)/eforth.ico $(DEPLOY)/static/favicon.ico cp site/*.go $(DEPLOY)/ cp site/*.yaml $(DEPLOY)/ - cp -r $(ESP32)/ESP32forth.zip $(DEPLOY)/downloads - cp -r $(POSIX)/ueforth $(DEPLOY)/downloads/ueforth.linux - cp -r $(WINDOWS)/uEf32.exe $(DEPLOY)/downloads/uEf32.exe - cp -r $(WINDOWS)/uEf64.exe $(DEPLOY)/downloads/uEf64.exe - cp -r $(RES)/eforth.ico $(DEPLOY)/downloads/favicon.ico cp site/.gcloudignore $(DEPLOY) cat site/ESP32forth.html | $(ESP_REPLACE) >$(DEPLOY)/ESP32forth.html cat site/index.html | $(UE_REPLACE) >$(DEPLOY)/index.html diff --git a/ueforth/site/ESP32forth.html b/ueforth/site/ESP32forth.html index 514039f..77615b5 100644 --- a/ueforth/site/ESP32forth.html +++ b/ueforth/site/ESP32forth.html @@ -12,15 +12,29 @@
-ESP32forth.zip
+ESP32forth-7.0.5.1.zip
- Single .ino file ready for installation
- Version: {{VERSION}} Rev: {{REVISION}}
+ Version: 7.0.5.1
+ESP32forth-{{VERSION}}.zip
+ - Single .ino file ready for installation
+ Version: {{VERSION}}
+
+Release Archive + - Prior Releases +
http://github.com/flagxor/eforth - - Complete Source Code (under ueforth/) + - Complete Unprocessed Source Code (under ueforth/)
Requires v7.0.6+
+WIP Prototype - Not yet stablecamera-server vocabulary.
server ( port -- ) Start an image server at port, diff --git a/ueforth/site/app.yaml b/ueforth/site/app.yaml index 1623d4b..afed362 100644 --- a/ueforth/site/app.yaml +++ b/ueforth/site/app.yaml @@ -27,10 +27,6 @@ handlers: static_dir: static secure: always -- url: /downloads - static_dir: downloads - secure: always - - url: /.* script: auto secure: always diff --git a/ueforth/site/classic.html b/ueforth/site/classic.html index d23a061..dae946f 100644 --- a/ueforth/site/classic.html +++ b/ueforth/site/classic.html @@ -20,7 +20,7 @@ ESP32forth - Version 6.3 for NodeMCU ESP32S - Tweaked for the Web-ESP32forth-6.3.0.ino +ESP32forth-6.3.0.ino - This has Dr. Ting's v6.3 version with WebUI added in
diff --git a/ueforth/site/downloads/ESP32forth-6.3.0.ino b/ueforth/site/downloads/ESP32forth-6.3.0.ino deleted file mode 100644 index cbb1244..0000000 --- a/ueforth/site/downloads/ESP32forth-6.3.0.ino +++ /dev/null @@ -1,1746 +0,0 @@ -/******************************************************************************/ -/* esp32Forth, Version 6.3 : for NodeMCU ESP32S */ -/******************************************************************************/ -/* 16jun25cht _63 */ -/* web server */ -/* 16jun19cht _62 */ -/* structures */ -/* 14jun19cht _61 */ -/* macro assembler with labels */ -/* 10may19cht _54 */ -/* robot tests */ -/* 21jan19cht _51 */ -/* 8 channel electronic organ */ -/* 15jan19cht _50 */ -/* Clean up for AIR robot */ -/* 03jan19cht _47-49 */ -/* Move to ESP32 */ -/* 07jan19cht _46 */ -/* delete UDP */ -/* 03jan19cht _45 */ -/* Move to NodeMCU ESP32S Kit */ -/* 18jul17cht _44 */ -/* Byte code sequencer */ -/* 14jul17cht _43 */ -/* Stacks in circular buffers */ -/* 01jul17cht _42 */ -/* Compiled as an Arduino sketch */ -/* 20mar17cht _41 */ -/* Compiled as an Arduino sketch */ -/* Follow the ceForth model with 64 primitives */ -/* Serial Monitor at 115200 baud */ -/* Send and receive UDP packets in parallel with Serial Monitor */ -/* Case insensitive interpreter */ -/* data[] must be filled with rom42.h eForth dictionary */ -/* 22jun17cht */ -/* Stacks are 256 cell circular buffers, with byte pointers R and S */ -/* All references to R and S are forced to (unsigned char) */ -/* All multiply-divide words cleaned up */ -/******************************************************************************/ - -#include "SPIFFS.h" -#include-#include -#include "SPIFFS.h" - -const char* ssid = "SVFIG";//type your ssid -const char* pass = "12345678";//type your password -// static ip address -IPAddress ip(192,168,1,201); -IPAddress gateway(192,168,1,1); -IPAddress subnet(255,255,255,0); - -WebServer server(80); - -/******************************************************************************/ -/* esp32Forth_51 */ -/******************************************************************************/ - -# define FALSE 0 -# define TRUE -1 -# define LOGICAL ? TRUE : FALSE -# define LOWER(x,y) ((unsigned long)(x)<(unsigned long)(y)) -# define pop top = stack[(unsigned char)S--] -# define push stack[(unsigned char)++S] = top; top = -# define popR rack[(unsigned char)R--] -# define pushR rack[(unsigned char)++R] - -long rack_main[256] = {0}; -long stack_main[256] = {0}; -long rack_background[256] = {0}; -long stack_background[256] = {0}; -__thread long *rack; -__thread long *stack; -__thread unsigned char R, S, bytecode ; -__thread long* Pointer ; -__thread long P, IP, WP, top, links, len ; -uint8_t* cData ; -__thread long long int d, n, m ; -String HTTPin; -String HTTPout; -TaskHandle_t background_thread; - -int BRAN=0,QBRAN=0,DONXT=0,DOTQP=0,STRQP=0,TOR=0,ABORQP=0; - -//#include "rom_54.h" /* load dictionary */ -long data[16000] = {}; -int IMEDD=0x80; -int COMPO=0x40; - -void HEADER(int lex, char seq[]) { - P=IP>>2; - int i; - int len=lex&31; - data[P++]=links; - IP=P<<2; - Serial.println(); - Serial.print(links,HEX); - for (i=links>>2;i >2; - data[P++]=6; // dolist - va_list argList; - va_start(argList, len); - Serial.println(); - Serial.print(addr,HEX); - Serial.print(" "); - Serial.print(6,HEX); - for(; len;len--) { - int j=va_arg(argList, int); - data[P++]=j; - Serial.print(" "); - Serial.print(j,HEX); - } - IP=P<<2; - va_end(argList); - return addr; - } -int LABEL(int len, ... ) { - int addr=IP; - P=IP>>2; - va_list argList; - va_start(argList, len); - Serial.println(); - Serial.print(addr,HEX); - for(; len;len--) { - int j=va_arg(argList, int); - data[P++]=j; - Serial.print(" "); - Serial.print(j,HEX); - } - IP=P<<2; - va_end(argList); - return addr; - } -void BEGIN(int len, ... ) { - P=IP>>2; - Serial.println(); - Serial.print(IP,HEX); - Serial.print(" BEGIN "); - pushR=P; - va_list argList; - va_start(argList, len); - for(; len;len--) { - int j=va_arg(argList, int); - data[P++]=j; - Serial.print(" "); - Serial.print(j,HEX); - } - IP=P<<2; - va_end(argList); -} -void AGAIN(int len, ... ) { - P=IP>>2; - Serial.println(); - Serial.print(IP,HEX); - Serial.print(" AGAIN "); - data[P++]=BRAN; - data[P++]=popR<<2; - va_list argList; - va_start(argList, len); - for(; len;len--) { - int j=va_arg(argList, int); - data[P++]=j; - Serial.print(" "); - Serial.print(j,HEX); - } - IP=P<<2; - va_end(argList); - } -void UNTIL(int len, ... ) { - P=IP>>2; - Serial.println(); - Serial.print(IP,HEX); - Serial.print(" UNTIL "); - data[P++]=QBRAN; - data[P++]=popR<<2; - va_list argList; - va_start(argList, len); - for(; len;len--) { - int j=va_arg(argList, int); - data[P++]=j; - Serial.print(" "); - Serial.print(j,HEX); - } - IP=P<<2; - va_end(argList); - } -void WHILE(int len, ... ) { - P=IP>>2; - int k; - Serial.println(); - Serial.print(IP,HEX); - Serial.print(" WHILE "); - data[P++]=QBRAN; - data[P++]=0; - k=popR; - pushR=(P-1); - pushR=k; - va_list argList; - va_start(argList, len); - for(; len;len--) { - int j=va_arg(argList, int); - data[P++]=j; - Serial.print(" "); - Serial.print(j,HEX); - } - IP=P<<2; - va_end(argList); - } -void REPEAT(int len, ... ) { - P=IP>>2; - Serial.println(); - Serial.print(IP,HEX); - Serial.print(" REPEAT "); - data[P++]=BRAN; - data[P++]=popR<<2; - data[popR]=P<<2; - va_list argList; - va_start(argList, len); - for(; len;len--) { - int j=va_arg(argList, int); - data[P++]=j; - Serial.print(" "); - Serial.print(j,HEX); - } - IP=P<<2; - va_end(argList); - } -void IF(int len, ... ) { - P=IP>>2; - Serial.println(); - Serial.print(IP,HEX); - Serial.print(" IF "); - data[P++]=QBRAN; - pushR=P; - data[P++]=0; - va_list argList; - va_start(argList, len); - for(; len;len--) { - int j=va_arg(argList, int); - data[P++]=j; - Serial.print(" "); - Serial.print(j,HEX); - } - IP=P<<2; - va_end(argList); - } -void ELSE(int len, ... ) { - P=IP>>2; - Serial.println(); - Serial.print(IP,HEX); - Serial.print(" ELSE "); - data[P++]=BRAN; - data[P++]=0; - data[popR]=P<<2; - pushR=P-1; - va_list argList; - va_start(argList, len); - for(; len;len--) { - int j=va_arg(argList, int); - data[P++]=j; - Serial.print(" "); - Serial.print(j,HEX); - } - IP=P<<2; - va_end(argList); - } -void THEN(int len, ... ) { - P=IP>>2; - Serial.println(); - Serial.print(IP,HEX); - Serial.print(" THEN "); - data[popR]=P<<2; - va_list argList; - va_start(argList, len); - for(; len;len--) { - int j=va_arg(argList, int); - data[P++]=j; - Serial.print(" "); - Serial.print(j,HEX); - } - IP=P<<2; - va_end(argList); - } -void FOR(int len, ... ) { - P=IP>>2; - Serial.println(); - Serial.print(IP,HEX); - Serial.print(" FOR "); - data[P++]=TOR; - pushR=P; - va_list argList; - va_start(argList, len); - for(; len;len--) { - int j=va_arg(argList, int); - data[P++]=j; - Serial.print(" "); - Serial.print(j,HEX); - } - IP=P<<2; - va_end(argList); - } -void NEXT(int len, ... ) { - P=IP>>2; - Serial.println(); - Serial.print(IP,HEX); - Serial.print(" NEXT "); - data[P++]=DONXT; - data[P++]=popR<<2; - va_list argList; - va_start(argList, len); - for(; len;len--) { - int j=va_arg(argList, int); - data[P++]=j; - Serial.print(" "); - Serial.print(j,HEX); - } - IP=P<<2; - va_end(argList); - } -void AFT(int len, ... ) { - P=IP>>2; - int k; - Serial.println(); - Serial.print(IP,HEX); - Serial.print(" AFT "); - data[P++]=BRAN; - data[P++]=0; - k=popR; - pushR=P; - pushR=P-1; - va_list argList; - va_start(argList, len); - for(; len;len--) { - int j=va_arg(argList, int); - data[P++]=j; - Serial.print(" "); - Serial.print(j,HEX); - } - IP=P<<2; - va_end(argList); - } -void DOTQ(char seq[]) { - P=IP>>2; - int i; - int len=strlen(seq); - data[P++]=DOTQP; - IP=P<<2; - cData[IP++]=len; - for (i=0;i
>2; - int i; - int len=strlen(seq); - data[P++]=STRQP; - IP=P<<2; - cData[IP++]=len; - for (i=0;i >2; - int i; - int len=strlen(seq); - data[P++]=ABORQP; - IP=P<<2; - cData[IP++]=len; - for (i=0;i >2]; - IP += 4; - WP = P+4; } - -void accep() -/* WiFiClient */ -{ while (Serial.available()) { - len = Serial.readBytes(cData, top); } - Serial.write(cData, len); - top = len; -} -void qrx(void) - { while (Serial.available() == 0) {}; - push Serial.read(); - push -1; } - -void txsto(void) -{ Serial.write( (unsigned char) top); - char c=top; - HTTPout += c ; - pop; -} - -void docon(void) -{ push data[WP>>2]; } - -void dolit(void) -{ push data[IP>>2]; - IP += 4; - next(); } - -void dolist(void) -{ rack[(unsigned char)++R] = IP; - IP = WP; - next(); } - -void exitt(void) -{ IP = (long) rack[(unsigned char)R--]; - next(); } - -void execu(void) -{ P = top; - WP = P + 4; - pop; } - -void donext(void) -{ if(rack[(unsigned char)R]) { - rack[(unsigned char)R] -= 1 ; - IP = data[IP>>2]; - } else { IP += 4; (unsigned char)R-- ; } - next(); } - -void qbran(void) -{ if(top == 0) IP = data[IP>>2]; - else IP += 4; pop; - next(); } - -void bran(void) -{ IP = data[IP>>2]; - next(); } - -void store(void) -{ data[top>>2] = stack[(unsigned char)S--]; - pop; } - -void at(void) -{ top = data[top>>2]; } - -void cstor(void) -{ cData[top] = (unsigned char) stack[(unsigned char)S--]; - pop; } - -void cat(void) -{ top = (long) cData[top]; } - -void rpat(void) {} -void rpsto(void) {} - -void rfrom(void) -{ push rack[(unsigned char)R--]; } - -void rat(void) -{ push rack[(unsigned char)R]; } - -void tor(void) -{ rack[(unsigned char)++R] = top; pop; } - -void spat(void) {} -void spsto(void) {} - -void drop(void) -{ pop; } - -void dup(void) -{ stack[(unsigned char)++S] = top; } - -void swap(void) -{ WP = top; - top = stack[(unsigned char)S]; - stack[(unsigned char)S] = WP; } - -void over(void) -{ push stack[(unsigned char)(S-1)]; } - -void zless(void) -{ top = (top < 0) LOGICAL; } - -void andd(void) -{ top &= stack[(unsigned char)S--]; } - -void orr(void) -{ top |= stack[(unsigned char)S--]; } - -void xorr(void) -{ top ^= stack[(unsigned char)S--]; } - -void uplus(void) -{ stack[(unsigned char)S] += top; - top = LOWER(stack[(unsigned char)S], top); } - -void nop(void) -{ next(); } - -void qdup(void) -{ if(top) stack[(unsigned char)++S] = top ; } - -void rot(void) -{ WP = stack[(unsigned char)(S-1)]; - stack[(unsigned char)(S-1)] = stack[(unsigned char)S]; - stack[(unsigned char)S] = top; - top = WP; } - -void ddrop(void) -{ drop(); drop(); } - -void ddup(void) -{ over(); over(); } - -void plus(void) -{ top += stack[(unsigned char)S--]; } - -void inver(void) -{ top = -top-1; } - -void negat(void) -{ top = 0 - top; } - -void dnega(void) -{ inver(); - tor(); - inver(); - push 1; - uplus(); - rfrom(); - plus(); } - -void subb(void) -{ top = stack[(unsigned char)S--] - top; } - -void abss(void) -{ if(top < 0) - top = -top; } - -void great(void) -{ top = (stack[(unsigned char)S--] > top) LOGICAL; } - -void less(void) -{ top = (stack[(unsigned char)S--] < top) LOGICAL; } - -void equal(void) -{ top = (stack[(unsigned char)S--] == top) LOGICAL; } - -void uless(void) -{ top = LOWER(stack[(unsigned char)S], top) LOGICAL; S--; } - -void ummod(void) -{ d = (long long int)((unsigned long)top); - m = (long long int)((unsigned long)stack[(unsigned char) S]); - n = (long long int)((unsigned long)stack[(unsigned char) (S - 1)]); - n += m << 32; - pop; - top = (unsigned long)(n / d); - stack[(unsigned char) S] = (unsigned long)(n%d); } -void msmod(void) -{ d = (signed long long int)((signed long)top); - m = (signed long long int)((signed long)stack[(unsigned char) S]); - n = (signed long long int)((signed long)stack[(unsigned char) S - 1]); - n += m << 32; - pop; - top = (signed long)(n / d); - stack[(unsigned char) S] = (signed long)(n%d); } -void slmod(void) -{ if (top != 0) { - WP = stack[(unsigned char) S] / top; - stack[(unsigned char) S] %= top; - top = WP; - } } -void mod(void) -{ top = (top) ? stack[(unsigned char) S--] % top : stack[(unsigned char) S--]; } -void slash(void) -{ top = (top) ? stack[(unsigned char) S--] / top : (stack[(unsigned char) S--], 0); } -void umsta(void) -{ d = (unsigned long long int)top; - m = (unsigned long long int)stack[(unsigned char) S]; - m *= d; - top = (unsigned long)(m >> 32); - stack[(unsigned char) S] = (unsigned long)m; } -void star(void) -{ top *= stack[(unsigned char) S--]; } -void mstar(void) -{ d = (signed long long int)top; - m = (signed long long int)stack[(unsigned char) S]; - m *= d; - top = (signed long)(m >> 32); - stack[(unsigned char) S] = (signed long)m; } -void ssmod(void) -{ d = (signed long long int)top; - m = (signed long long int)stack[(unsigned char) S]; - n = (signed long long int)stack[(unsigned char) (S - 1)]; - n *= m; - pop; - top = (signed long)(n / d); - stack[(unsigned char) S] = (signed long)(n%d); } -void stasl(void) -{ d = (signed long long int)top; - m = (signed long long int)stack[(unsigned char) S]; - n = (signed long long int)stack[(unsigned char) (S - 1)]; - n *= m; - pop; pop; - top = (signed long)(n / d); } - -void pick(void) -{ top = stack[(unsigned char)(S-top)]; } - -void pstor(void) -{ data[top>>2] += stack[(unsigned char)S--], pop; } - -void dstor(void) -{ data[(top>>2)+1] = stack[(unsigned char)S--]; - data[top>>2] = stack[(unsigned char)S--]; - pop; } - -void dat(void) -{ push data[top>>2]; - top = data[(top>>2)+1]; } - -void count(void) -{ stack[(unsigned char)++S] = top + 1; - top = cData[top]; } - -void dovar(void) -{ push WP; } - -void maxx(void) -{ if (top < stack[(unsigned char)S]) pop; - else (unsigned char)S--; } - -void minn(void) -{ if (top < stack[(unsigned char)S]) (unsigned char)S--; - else pop; } - -void audio(void) -{ WP=top; pop; - ledcWriteTone(WP,top); - pop; -} - -void sendPacket(void) -{} - -void poke(void) -{ Pointer = (long*)top; *Pointer = stack[(unsigned char)S--]; - pop; } - -void peeek(void) -{ Pointer = (long*)top; top = *Pointer; } - -void adc(void) -{ top= (long) analogRead(top); } - -void pin(void) -{ WP=top; pop; - ledcAttachPin(top,WP); - pop; -} - -void duty(void) -{ WP=top; pop; - ledcAnalogWrite(WP,top,255); - pop; -} - -void freq(void) -{ WP=top; pop; - ledcSetup(WP,top,13); - pop; -} - -void (*primitives[72])(void) = { - /* case 0 */ nop, - /* case 1 */ accep, - /* case 2 */ qrx, - /* case 3 */ txsto, - /* case 4 */ docon, - /* case 5 */ dolit, - /* case 6 */ dolist, - /* case 7 */ exitt, - /* case 8 */ execu, - /* case 9 */ donext, - /* case 10 */ qbran, - /* case 11 */ bran, - /* case 12 */ store, - /* case 13 */ at, - /* case 14 */ cstor, - /* case 15 */ cat, - /* case 16 */ nop, - /* case 17 */ nop, - /* case 18 */ rfrom, - /* case 19 */ rat, - /* case 20 */ tor, - /* case 21 */ nop, - /* case 22 */ nop, - /* case 23 */ drop, - /* case 24 */ dup, - /* case 25 */ swap, - /* case 26 */ over, - /* case 27 */ zless, - /* case 28 */ andd, - /* case 29 */ orr, - /* case 30 */ xorr, - /* case 31 */ uplus, - /* case 32 */ next, - /* case 33 */ qdup, - /* case 34 */ rot, - /* case 35 */ ddrop, - /* case 36 */ ddup, - /* case 37 */ plus, - /* case 38 */ inver, - /* case 39 */ negat, - /* case 40 */ dnega, - /* case 41 */ subb, - /* case 42 */ abss, - /* case 43 */ equal, - /* case 44 */ uless, - /* case 45 */ less, - /* case 46 */ ummod, - /* case 47 */ msmod, - /* case 48 */ slmod, - /* case 49 */ mod, - /* case 50 */ slash, - /* case 51 */ umsta, - /* case 52 */ star, - /* case 53 */ mstar, - /* case 54 */ ssmod, - /* case 55 */ stasl, - /* case 56 */ pick, - /* case 57 */ pstor, - /* case 58 */ dstor, - /* case 59 */ dat, - /* case 60 */ count, - /* case 61 */ dovar, - /* case 62 */ maxx, - /* case 63 */ minn, - /* case 64 */ audio, - /* case 65 */ sendPacket, - /* case 66 */ poke, - /* case 67 */ peeek, - /* case 68 */ adc, - /* case 69 */ pin, - /* case 70 */ duty, - /* case 71 */ freq }; - -int as_nop=0; -int as_accept=1; -int as_qrx=2; -int as_txsto=3; -int as_docon=4; -int as_dolit=5; -int as_dolist=6; -int as_exit=7; -int as_execu=8; -int as_donext=9; -int as_qbran=10; -int as_bran=11; -int as_store=12; -int as_at=13; -int as_cstor=14; -int as_cat=15; -int as_rpat=16; -int as_rpsto=17; -int as_rfrom=18; -int as_rat=19; -int as_tor=20; -int as_spat=21; -int as_spsto=22; -int as_drop=23; -int as_dup=24; -int as_swap=25; -int as_over=26; -int as_zless=27; -int as_andd=28; -int as_orr=29; -int as_xorr=30; -int as_uplus=31; -int as_next=32; -int as_qdup=33; -int as_rot=34; -int as_ddrop=35; -int as_ddup=36; -int as_plus=37; -int as_inver=38; -int as_negat=39; -int as_dnega=40; -int as_subb=41; -int as_abss=42; -int as_equal=43; -int as_uless=44; -int as_less=45; -int as_ummod=46; -int as_msmod=47; -int as_slmod=48; -int as_mod=49; -int as_slash=50; -int as_umsta=51; -int as_star=52; -int as_mstar=53; -int as_ssmod=54; -int as_stasl=55; -int as_pick=56; -int as_pstor=57; -int as_dstor=58; -int as_dat=59; -int as_count=60; -int as_dovar=61; -int as_max=62; -int as_min=63; -int as_tone=64; -int as_sendPacket=65; -int as_poke=66; -int as_peek=67; -int as_adc=68; -int as_pin=69; -int as_duty=70; -int as_freq=71; - -//void evaluate() -//{ while (true){ -// bytecode=(unsigned char)cData[P++]; -// if (bytecode) {primitives[bytecode]();} -// else {break;} -// } // break on NOP -//} - -__thread int counter = 0; -void evaluate() -{ while (true){ - if (counter++ > 10000) { - delay(1); - counter = 0; - } - bytecode=(unsigned char)cData[P++]; - if (bytecode) {primitives[bytecode]();} - else {break;} - } // break on NOP -} - -static const char *index_html = -"\n" -"\n" -" esp32forth \n" -"\n" -"\n" -"esp32forth
\n" -"\n" -"\n" -"Upload File:
\n" -"\n" -"\n" -"\n" -"\n" -"\n" -"\n" -"\n" -"\n" -"\n" -"\n" -"\n" -"\n" -"\n" -"\n" -"
\n" -"\n" -"
\n" -"\n" -; - -static void returnFail(String msg) { - server.send(500, "text/plain", msg + "\r\n"); -} - -static void handleInput() { - if (!server.hasArg("cmd")) { - return returnFail("Missing Input"); - } - HTTPin = server.arg("cmd"); - HTTPout = ""; - Serial.println(HTTPin); // line cleaned up - len = HTTPin.length(); - HTTPin.getBytes(cData, len); - //Serial.println("Enter Forth."); - data[0x66] = 0; // >IN - data[0x67] = len; // #TIB - data[0x68] = 0; // 'TIB - if (len > 3 && memcmp(cData, "bg ", 3) == 0) { - if (background_thread) { - vTaskDelete(background_thread); - background_thread = 0; - } - data[0x66] = 3; // Skip "bg " - // Start background thread 1024 byte stack. - xTaskCreate(background, "background", 1024, &IP, tskIDLE_PRIORITY, &background_thread); - } else { - P = 0x180; // EVAL - WP = 0x184; - evaluate(); - } -// Serial.println(); -// Serial.println("Return from Forth."); // line cleaned up -// Serial.print("Returning "); - Serial.print(HTTPout.length()); -// Serial.println(" characters"); - server.setContentLength(HTTPout.length()); - server.send(200, "text/plain", HTTPout); -} - -void background(void *ipp) { - long *ipv = (long*) ipp; - rack = rack_background; - stack = stack_background; - Serial.println("background!!"); - IP = *ipv; - S = 0; - R = 0; - top = 0; - P = 0x180; // EVAL - WP = 0x184; - evaluate(); - for(;;) { - } -} -void setup() { - - rack = rack_main; - stack = stack_main; - P = 0x180; - WP = 0x184; - IP = 0; - S = 0; - R = 0; - top = 0; - cData = (uint8_t *) data; - Serial.begin(115200); - delay(100); -// WiFi.config(ip, gateway, subnet); - WiFi.mode(WIFI_STA); -// attempt to connect to Wifi network: - WiFi.begin(ssid, pass); - while (WiFi.status() != WL_CONNECTED) { - delay(500); - Serial.print("."); - } - Serial.println(""); - Serial.println("WiFi connected"); - Serial.print("IP Address: "); - Serial.println(WiFi.localIP()); - // if you get a connection, report back via serial: - server.begin(); - Serial.println("Booting esp32Forth v6.3 ..."); - -// Setup timer and attach timer to a led pin - ledcSetup(0, 100, LEDC_TIMER_13_BIT); - ledcAttachPin(5, 0); - ledcAnalogWrite(0, 250, brightness); - pinMode(2,OUTPUT); - digitalWrite(2, HIGH); // turn the LED2 on - pinMode(16,OUTPUT); - digitalWrite(16, LOW); // motor1 forward - pinMode(17,OUTPUT); - digitalWrite(17, LOW); // motor1 backward - pinMode(18,OUTPUT); - digitalWrite(18, LOW); // motor2 forward - pinMode(19,OUTPUT); - digitalWrite(19, LOW); // motor2 bacward - - IP=512; - R=0; - HEADER(3,"HLD"); - int HLD=CODE(8,as_docon,as_next,0,0,0X90,1,0,0); - HEADER(4,"SPAN"); - int SPAN=CODE(8,as_docon,as_next,0,0,0X94,1,0,0); - HEADER(3,">IN"); - int INN=CODE(8,as_docon,as_next,0,0,0X98,1,0,0); - HEADER(4,"#TIB"); - int NTIB=CODE(8,as_docon,as_next,0,0,0X9C,1,0,0); - HEADER(4,"'TIB"); - int TTIB=CODE(8,as_docon,as_next,0,0,0XA0,1,0,0); - HEADER(4,"BASE"); - int BASE=CODE(8,as_docon,as_next,0,0,0XA4,1,0,0); - HEADER(7,"CONTEXT"); - int CNTXT=CODE(8,as_docon,as_next,0,0,0XA8,1,0,0); - HEADER(2,"CP"); - int CP=CODE(8,as_docon,as_next,0,0,0XAC,1,0,0); - HEADER(4,"LAST"); - int LAST=CODE(8,as_docon,as_next,0,0,0XB0,1,0,0); - HEADER(5,"'EVAL"); - int TEVAL=CODE(8,as_docon,as_next,0,0,0XB4,1,0,0); - HEADER(6,"'ABORT"); - int TABRT=CODE(8,as_docon,as_next,0,0,0XB8,1,0,0); - HEADER(3,"tmp"); - int TEMP=CODE(8,as_docon,as_next,0,0,0XBC,1,0,0); - HEADER(1,"Z"); - int Z=CODE(8,as_docon,as_next,0,0,0,0,0,0); - HEADER(4,"ppqn"); - int PPQN=CODE(8,as_docon,as_next,0,0,0XC0,1,0,0); - HEADER(7,"channel"); - int CHANN=CODE(8,as_docon,as_next,0,0,0XC4,1,0,0); - - HEADER(3,"NOP"); - int NOP=CODE(4,as_nop,as_next,0,0); - HEADER(6,"ACCEPT"); - int ACCEP=CODE(4,as_accept,as_next,0,0); - HEADER(4,"?KEY"); - int QKEY=CODE(4,as_qrx,as_next,0,0); - HEADER(4,"EMIT"); - int EMIT=CODE(4,as_txsto,as_next,0,0); - HEADER(5,"DOLIT"); - int DOLIT=CODE(4,as_dolit,as_next,0,0); - HEADER(6,"DOLIST"); - int DOLST=CODE(4,as_dolist,as_next,0,0); - HEADER(4,"EXIT"); - int EXITT=CODE(4,as_exit,as_next,0,0); - HEADER(7,"EXECUTE"); - int EXECU=CODE(4,as_execu,as_next,0,0); - HEADER(6,"DONEXT"); - DONXT=CODE(4,as_donext,as_next,0,0); - HEADER(7,"QBRANCH"); - QBRAN=CODE(4,as_qbran,as_next,0,0); - HEADER(6,"BRANCH"); - BRAN=CODE(4,as_bran,as_next,0,0); - HEADER(1,"!"); - int STORE=CODE(4,as_store,as_next,0,0); - HEADER(1,"@"); - int AT=CODE(4,as_at,as_next,0,0); - HEADER(2,"C!"); - int CSTOR=CODE(4,as_cstor,as_next,0,0); - HEADER(2,"C@"); - int CAT=CODE(4,as_cat,as_next,0,0); - HEADER(2,"R>"); - int RFROM=CODE(4,as_rfrom,as_next,0,0); - HEADER(2,"R@"); - int RAT=CODE(4,as_rat,as_next,0,0); - HEADER(2,">R"); - TOR=CODE(4,as_tor,as_next,0,0); - HEADER(4,"DROP"); - int DROP=CODE(4,as_drop,as_next,0,0); - HEADER(3,"DUP"); - int DUPP=CODE(4,as_dup,as_next,0,0); - HEADER(4,"SWAP"); - int SWAP=CODE(4,as_swap,as_next,0,0); - HEADER(4,"OVER"); - int OVER=CODE(4,as_over,as_next,0,0); - HEADER(2,"0<"); - int ZLESS=CODE(4,as_zless,as_next,0,0); - HEADER(3,"AND"); - int ANDD=CODE(4,as_andd,as_next,0,0); - HEADER(2,"OR"); - int ORR=CODE(4,as_orr,as_next,0,0); - HEADER(3,"XOR"); - int XORR=CODE(4,as_xorr,as_next,0,0); - HEADER(3,"UM+"); - int UPLUS=CODE(4,as_uplus,as_next,0,0); - HEADER(4,"?DUP"); - int QDUP=CODE(4,as_qdup,as_next,0,0); - HEADER(3,"ROT"); - int ROT=CODE(4,as_rot,as_next,0,0); - HEADER(5,"2DROP"); - int DDROP=CODE(4,as_ddrop,as_next,0,0); - HEADER(4,"2DUP"); - int DDUP=CODE(4,as_ddup,as_next,0,0); - HEADER(1,"+"); - int PLUS=CODE(4,as_plus,as_next,0,0); - HEADER(3,"NOT"); - int INVER=CODE(4,as_inver,as_next,0,0); - HEADER(6,"NEGATE"); - int NEGAT=CODE(4,as_negat,as_next,0,0); - HEADER(7,"DNEGATE"); - int DNEGA=CODE(4,as_dnega,as_next,0,0); - HEADER(1,"-"); - int SUBBB=CODE(4,as_subb,as_next,0,0); - HEADER(3,"ABS"); - int ABSS=CODE(4,as_abss,as_next,0,0); - HEADER(1,"="); - int EQUAL=CODE(4,as_equal,as_next,0,0); - HEADER(2,"U<"); - int ULESS=CODE(4,as_uless,as_next,0,0); - HEADER(1,"<"); - int LESS=CODE(4,as_less,as_next,0,0); - HEADER(6,"UM/MOD"); - int UMMOD=CODE(4,as_ummod,as_next,0,0); - HEADER(5,"M/MOD"); - int MSMOD=CODE(4,as_msmod,as_next,0,0); - HEADER(4,"/MOD"); - int SLMOD=CODE(4,as_slmod,as_next,0,0); - HEADER(3,"MOD"); - int MODD=CODE(4,as_mod,as_next,0,0); - HEADER(1,"/"); - int SLASH=CODE(4,as_slash,as_next,0,0); - HEADER(3,"UM*"); - int UMSTA=CODE(4,as_umsta,as_next,0,0); - HEADER(1,"*"); - int STAR=CODE(4,as_star,as_next,0,0); - HEADER(2,"M*"); - int MSTAR=CODE(4,as_mstar,as_next,0,0); - HEADER(5,"*/MOD"); - int SSMOD=CODE(4,as_ssmod,as_next,0,0); - HEADER(2,"*/"); - int STASL=CODE(4,as_stasl,as_next,0,0); - HEADER(4,"PICK"); - int PICK=CODE(4,as_pick,as_next,0,0); - HEADER(2,"+!"); - int PSTOR=CODE(4,as_pstor,as_next,0,0); - HEADER(2,"2!"); - int DSTOR=CODE(4,as_dstor,as_next,0,0); - HEADER(2,"2@"); - int DAT=CODE(4,as_dat,as_next,0,0); - HEADER(5,"COUNT"); - int COUNT=CODE(4,as_count,as_next,0,0); - HEADER(3,"MAX"); - int MAX=CODE(4,as_max,as_next,0,0); - HEADER(3,"MIN"); - int MIN=CODE(4,as_min,as_next,0,0); - HEADER(2,"BL"); - int BLANK=CODE(8,as_docon,as_next,0,0,32,0,0,0); - HEADER(4,"CELL"); - int CELL=CODE(8,as_docon,as_next,0,0, 4,0,0,0); - HEADER(5,"CELL+"); - int CELLP=CODE(8,as_docon,as_plus,as_next,0, 4,0,0,0); - HEADER(5,"CELL-"); - int CELLM=CODE(8,as_docon,as_subb,as_next,0,4,0,0,0); - HEADER(5,"CELLS"); - int CELLS=CODE(8,as_docon,as_star,as_next,0,4,0,0,0); - HEADER(5,"CELL/"); - int CELLD=CODE(8,as_docon,as_slash,as_next,0,4,0,0,0); - HEADER(2,"1+"); - int ONEP=CODE(8,as_docon,as_plus,as_next,0,1,0,0,0); - HEADER(2,"1-"); - int ONEM=CODE(8,as_docon,as_subb,as_next,0,1,0,0,0); - HEADER(2,"2+"); - int TWOP=CODE(8,as_docon,as_plus,as_next,0,2,0,0,0); - HEADER(2,"2-"); - int TWOM=CODE(8,as_docon,as_subb,as_next,0,2,0,0,0); - HEADER(2,"2*"); - int TWOST=CODE(8,as_docon,as_star,as_next,0,2,0,0,0); - HEADER(2,"2/"); - int TWOS=CODE(8,as_docon,as_slash,as_next,0,2,0,0,0); - HEADER(10,"sendPacket"); - int SENDP=CODE(4,as_sendPacket,as_next,0,0); - HEADER(4,"POKE"); - int POKE=CODE(4,as_poke,as_next,0,0); - HEADER(4,"PEEK"); - int PEEK=CODE(4,as_peek,as_next,0,0); - HEADER(3,"ADC"); - int ADC=CODE(4,as_adc,as_next,0,0); - HEADER(3,"PIN"); - int PIN=CODE(4,as_pin,as_next,0,0); - HEADER(4,"TONE"); - int TONE=CODE(4,as_tone,as_next,0,0); - HEADER(4,"DUTY"); - int DUTY=CODE(4,as_duty,as_next,0,0); - HEADER(4,"FREQ"); - int FREQ=CODE(4,as_freq,as_next,0,0); - - HEADER(3,"KEY"); - int KEY=COLON(0); - BEGIN(1,QKEY); - UNTIL(1,EXITT); - HEADER(6,"WITHIN"); - int WITHI=COLON(7,OVER,SUBBB,TOR,SUBBB,RFROM,ULESS,EXITT); - HEADER(5,">CHAR"); - int TCHAR=COLON(8,DOLIT,0x7F,ANDD,DUPP,DOLIT,127,BLANK,WITHI); - IF(3,DROP,DOLIT,0X5F); - THEN(1,EXITT); - HEADER(7,"ALIGNED"); - int ALIGN=COLON(7,DOLIT,3,PLUS,DOLIT,0XFFFFFFFC,ANDD,EXITT); - HEADER(4,"HERE"); - int HERE=COLON(3,CP,AT,EXITT); - HEADER(3,"PAD"); - int PAD=COLON(5,HERE,DOLIT,80,PLUS,EXITT); - HEADER(3,"TIB"); - int TIB=COLON(3,TTIB,AT,EXITT); - HEADER(8,"@EXECUTE"); - int ATEXE=COLON(2,AT,QDUP); - IF(1,EXECU); - THEN(1,EXITT); - HEADER(5,"CMOVE"); - int CMOVEE=COLON(0); - FOR(0); - AFT(8,OVER,CAT,OVER,CSTOR,TOR,ONEP,RFROM,ONEP); - THEN(0); - NEXT(2,DDROP,EXITT); - HEADER(4,"MOVE"); - int MOVE=COLON(1,CELLD); - FOR(0); - AFT(8,OVER,AT,OVER,STORE,TOR,CELLP,RFROM,CELLP); - THEN(0); - NEXT(2,DDROP,EXITT); - HEADER(4,"FILL"); - int FILL=COLON(1,SWAP); - FOR(1,SWAP); - AFT(3,DDUP,CSTOR,ONEP); - THEN(0); - NEXT(2,DDROP,EXITT); - HEADER(5,"DIGIT"); - int DIGIT=COLON(12,DOLIT,9,OVER,LESS,DOLIT,7,ANDD,PLUS,DOLIT,0X30,PLUS,EXITT); - HEADER(7,"EXTRACT"); - int EXTRC=COLON(7,DOLIT,0,SWAP,UMMOD,SWAP,DIGIT,EXITT); - HEADER(2,"<#"); - int BDIGS=COLON(4,PAD,HLD,STORE,EXITT); - HEADER(4,"HOLD"); - int HOLD=COLON(8,HLD,AT,ONEM,DUPP,HLD,STORE,CSTOR,EXITT); - HEADER(1,"#"); - int DIG=COLON(5,BASE,AT,EXTRC,HOLD,EXITT); - HEADER(2,"#S"); - int DIGS=COLON(0); - BEGIN(2,DIG,DUPP); - WHILE(0); - REPEAT(1,EXITT); - HEADER(4,"SIGN"); - int SIGN=COLON(1,ZLESS); - IF(3,DOLIT,0X2D,HOLD); - THEN(1,EXITT); - HEADER(2,"#>"); - int EDIGS=COLON(7,DROP,HLD,AT,PAD,OVER,SUBBB,EXITT); - HEADER(3,"str"); - int STRR=COLON(9,DUPP,TOR,ABSS,BDIGS,DIGS,RFROM,SIGN,EDIGS,EXITT); - HEADER(3,"HEX"); - int HEXX=COLON(5,DOLIT,16,BASE,STORE,EXITT); - HEADER(7,"DECIMAL"); - int DECIM=COLON(5,DOLIT,10,BASE,STORE,EXITT); - HEADER(6,"wupper"); - int UPPER=COLON(4,DOLIT,0x5F5F5F5F,ANDD,EXITT); - HEADER(6,">upper"); - int TOUPP=COLON(6,DUPP,DOLIT,0x61,DOLIT,0x7B,WITHI); - IF(3,DOLIT,0x5F,ANDD); - THEN(1,EXITT); - HEADER(6,"DIGIT?"); - int DIGTQ=COLON(9,TOR,TOUPP,DOLIT,0X30,SUBBB,DOLIT,9,OVER,LESS); - IF(8,DOLIT,7,SUBBB,DUPP,DOLIT,10,LESS,ORR); - THEN(4,DUPP,RFROM,ULESS,EXITT); - HEADER(7,"NUMBER?"); - int NUMBQ=COLON(12,BASE,AT,TOR,DOLIT,0,OVER,COUNT,OVER,CAT,DOLIT,0X24,EQUAL); - IF(5,HEXX,SWAP,ONEP,SWAP,ONEM); - THEN(13,OVER,CAT,DOLIT,0X2D,EQUAL,TOR,SWAP,RAT,SUBBB,SWAP,RAT,PLUS,QDUP); - IF(1,ONEM); - FOR(6,DUPP,TOR,CAT,BASE,AT,DIGTQ); - WHILE(7,SWAP,BASE,AT,STAR,PLUS,RFROM,ONEP); - NEXT(2,DROP,RAT); - IF(1,NEGAT); - THEN(1,SWAP); - ELSE(6,RFROM,RFROM,DDROP,DDROP,DOLIT,0); - THEN(1,DUPP); - THEN(6,RFROM,DDROP,RFROM,BASE,STORE,EXITT); - HEADER(5,"SPACE"); - int SPACE=COLON(3,BLANK,EMIT,EXITT); - HEADER(5,"CHARS"); - int CHARS=COLON(4,SWAP,DOLIT,0,MAX); - FOR(0); - AFT(2,DUPP,EMIT); - THEN(0); - NEXT(2,DROP,EXITT); - HEADER(6,"SPACES"); - int SPACS=COLON(3,BLANK,CHARS,EXITT); - HEADER(4,"TYPE"); - int TYPES=COLON(0); - FOR(0); - AFT(5,DUPP,CAT,TCHAR,EMIT,ONEP); - THEN(0); - NEXT(2,DROP,EXITT); - HEADER(2,"CR"); - int CR=COLON(7,DOLIT,10,DOLIT,13,EMIT,EMIT,EXITT); - HEADER(3,"do$"); - int DOSTR=COLON(10,RFROM,RAT,RFROM,COUNT,PLUS,ALIGN,TOR,SWAP,TOR,EXITT); - HEADER(3,"$\"|"); - int STRQP=COLON(2,DOSTR,EXITT); - HEADER(3,".\"|"); - DOTQP=COLON(4,DOSTR,COUNT,TYPES,EXITT); - HEADER(2,".R"); - int DOTR=COLON(8,TOR,STRR,RFROM,OVER,SUBBB,SPACS,TYPES,EXITT); - HEADER(3,"U.R"); - int UDOTR=COLON(10,TOR,BDIGS,DIGS,EDIGS,RFROM,OVER,SUBBB,SPACS,TYPES,EXITT); - HEADER(2,"U."); - int UDOT=COLON(6,BDIGS,DIGS,EDIGS,SPACE,TYPES,EXITT); - HEADER(1,"."); - int DOT=COLON(5,BASE,AT,DOLIT,10,XORR); - IF(3,UDOT,EXITT); - THEN(4,STRR,SPACE,TYPES,EXITT); - HEADER(1,"?"); - int QUEST=COLON(3,AT,DOT,EXITT); - HEADER(7,"(parse)"); - int PARS=COLON(5,TEMP,CSTOR,OVER,TOR,DUPP); - IF(5,ONEM,TEMP,CAT,BLANK,EQUAL); - IF(0); - FOR(6,BLANK,OVER,CAT,SUBBB,ZLESS,INVER); - WHILE(1,ONEP); - NEXT(6,RFROM,DROP,DOLIT,0,DUPP,EXITT); - THEN(1,RFROM); - THEN(2,OVER,SWAP); - FOR(9,TEMP,CAT,OVER,CAT,SUBBB,TEMP,CAT,BLANK,EQUAL); - IF(1,ZLESS); - THEN(0); - WHILE(1,ONEP); - NEXT(2,DUPP,TOR); - ELSE(5,RFROM,DROP,DUPP,ONEP,TOR); - THEN(6,OVER,SUBBB,RFROM,RFROM,SUBBB,EXITT); - THEN(4,OVER,RFROM,SUBBB,EXITT); - HEADER(5,"PACK$"); - int PACKS=COLON(18,DUPP,TOR,DDUP,PLUS,DOLIT,0xFFFFFFFC,ANDD,DOLIT,0,SWAP,STORE,DDUP,CSTOR,ONEP,SWAP,CMOVEE,RFROM,EXITT); - HEADER(5,"PARSE"); - int PARSE=COLON(15,TOR,TIB,INN,AT,PLUS,NTIB,AT,INN,AT,SUBBB,RFROM,PARS,INN,PSTOR,EXITT); - HEADER(5,"TOKEN"); - int TOKEN=COLON(9,BLANK,PARSE,DOLIT,0x1F,MIN,HERE,CELLP,PACKS,EXITT); - HEADER(4,"WORD"); - int WORDD=COLON(5,PARSE,HERE,CELLP,PACKS,EXITT); - HEADER(5,"NAME>"); - int NAMET=COLON(7,COUNT,DOLIT,0x1F,ANDD,PLUS,ALIGN,EXITT); - HEADER(5,"SAME?"); - int SAMEQ=COLON(4,DOLIT,0x1F,ANDD,CELLD); - FOR(0); - AFT(18,OVER,RAT,DOLIT,4,STAR,PLUS,AT,UPPER,OVER,RAT,DOLIT,4,STAR,PLUS,AT,UPPER,SUBBB,QDUP); - IF(3,RFROM,DROP,EXITT); - THEN(0); - THEN(0); - NEXT(3,DOLIT,0,EXITT); - HEADER(4,"find"); - int FIND=COLON(10,SWAP,DUPP,AT,TEMP,STORE,DUPP,AT,TOR,CELLP,SWAP); - BEGIN(2,AT,DUPP); - IF(9,DUPP,AT,DOLIT,0xFFFFFF3F,ANDD,UPPER,RAT,UPPER,XORR); - IF(3,CELLP,DOLIT,0XFFFFFFFF); - ELSE(4,CELLP,TEMP,AT,SAMEQ); - THEN(0); - ELSE(6,RFROM,DROP,SWAP,CELLM,SWAP,EXITT); - THEN(0); - WHILE(2,CELLM,CELLM); - REPEAT(9,RFROM,DROP,SWAP,DROP,CELLM,DUPP,NAMET,SWAP,EXITT); - HEADER(5,"NAME?"); - int NAMEQ=COLON(3,CNTXT,FIND,EXITT); - HEADER(6,"EXPECT"); - int EXPEC=COLON(5,ACCEP,SPAN,STORE,DROP,EXITT); - HEADER(5,"QUERY"); - int QUERY=COLON(12,TIB,DOLIT,0X100,ACCEP,NTIB,STORE,DROP,DOLIT,0,INN,STORE,EXITT); - HEADER(5,"ABORT"); - int ABORT=COLON(4,NOP,TABRT,ATEXE,EXITT); - HEADER(6,"abort\""); - ABORQP=COLON(0); - IF(4,DOSTR,COUNT,TYPES,ABORT); - THEN(3,DOSTR,DROP,EXITT); - HEADER(5,"ERROR"); - int ERRORR=COLON(8,SPACE,COUNT,TYPES,DOLIT,0x3F,EMIT,CR,ABORT); - HEADER(10,"$INTERPRET"); - int INTER=COLON(2,NAMEQ,QDUP); - IF(4,CAT,DOLIT,COMPO,ANDD); - ABORQ(" compile only"); - int INTER0=LABEL(2,EXECU,EXITT); - THEN(1,NUMBQ); - IF(1,EXITT); - THEN(1,ERRORR); - HEADER(IMEDD+1,"["); - int LBRAC=COLON(5,DOLIT,INTER,TEVAL,STORE,EXITT); - HEADER(3,".OK"); - int DOTOK=COLON(6,CR,DOLIT,INTER,TEVAL,AT,EQUAL); - IF(14,TOR,TOR,TOR,DUPP,DOT,RFROM,DUPP,DOT,RFROM,DUPP,DOT,RFROM,DUPP,DOT); - DOTQ(" ok>"); - THEN(1,EXITT); - HEADER(4,"EVAL"); - int EVAL=COLON(1,LBRAC); - BEGIN(3,TOKEN,DUPP,AT); - WHILE(2,TEVAL,ATEXE); - REPEAT(4,DROP,DOTOK,NOP,EXITT); - HEADER(4,"QUIT"); - int QUITT=COLON(1,LBRAC); - BEGIN(2,QUERY,EVAL); - AGAIN(0); - HEADER(4,"LOAD"); - int LOAD=COLON(10,NTIB,STORE,TTIB,STORE,DOLIT,0,INN,STORE,EVAL,EXITT); - HEADER(1,","); - int COMMA=COLON(7,HERE,DUPP,CELLP,CP,STORE,STORE,EXITT); - HEADER(IMEDD+7,"LITERAL"); - int LITER=COLON(5,DOLIT,DOLIT,COMMA,COMMA,EXITT); - HEADER(5,"ALLOT"); - int ALLOT=COLON(4,ALIGN,CP,PSTOR,EXITT); - HEADER(3,"$,\""); - int STRCQ=COLON(9,DOLIT,0X22,WORDD,COUNT,PLUS,ALIGN,CP,STORE,EXITT); - HEADER(7,"?UNIQUE"); - int UNIQU=COLON(3,DUPP,NAMEQ,QDUP); - IF(6,COUNT,DOLIT,0x1F,ANDD,SPACE,TYPES); - DOTQ(" reDef"); - THEN(2,DROP,EXITT); - HEADER(3,"$,n"); - int SNAME=COLON(2,DUPP,AT); - IF(14,UNIQU,DUPP,NAMET,CP,STORE,DUPP,LAST,STORE,CELLM,CNTXT,AT,SWAP,STORE,EXITT); - THEN(1,ERRORR); - HEADER(1,"'"); - int TICK=COLON(2,TOKEN,NAMEQ); - IF(1,EXITT); - THEN(1,ERRORR); - HEADER(IMEDD+9,"[COMPILE]"); - int BCOMP=COLON(3,TICK,COMMA,EXITT); - HEADER(7,"COMPILE"); - int COMPI=COLON(7,RFROM,DUPP,AT,COMMA,CELLP,TOR,EXITT); - HEADER(8,"$COMPILE"); - int SCOMP=COLON(2,NAMEQ,QDUP); - IF(4,AT,DOLIT,IMEDD,ANDD); - IF(1,EXECU); - ELSE(1,COMMA); - THEN(1,EXITT); - THEN(1,NUMBQ); - IF(2,LITER,EXITT); - THEN(1,ERRORR); - HEADER(5,"OVERT"); - int OVERT=COLON(5,LAST,AT,CNTXT,STORE,EXITT); - HEADER(1,"]"); - int RBRAC=COLON(5,DOLIT,SCOMP,TEVAL,STORE,EXITT); - HEADER(1,":"); - int COLN=COLON(7,TOKEN,SNAME,RBRAC,DOLIT,0x6,COMMA,EXITT); - HEADER(IMEDD+1,";"); - int SEMIS=COLON(6,DOLIT,EXITT,COMMA,LBRAC,OVERT,EXITT); - HEADER(3,"dm+"); - int DMP=COLON(4,OVER,DOLIT,6,UDOTR); - FOR(0); - AFT(6,DUPP,AT,DOLIT,9,UDOTR,CELLP); - THEN(0); - NEXT(1,EXITT); - HEADER(4,"DUMP"); - int DUMP=COLON(10,BASE,AT,TOR,HEXX,DOLIT,0x1F,PLUS,DOLIT,0x20,SLASH); - FOR(0); - AFT(10,CR,DOLIT,8,DDUP,DMP,TOR,SPACE,CELLS,TYPES,RFROM); - THEN(0); - NEXT(5,DROP,RFROM,BASE,STORE,EXITT); - HEADER(5,">NAME"); - int TNAME=COLON(1,CNTXT); - BEGIN(2,AT,DUPP); - WHILE(3,DDUP,NAMET,XORR); - IF(1,ONEM); - ELSE(3,SWAP,DROP,EXITT); - THEN(0); - REPEAT(3,SWAP,DROP,EXITT); - HEADER(3,".ID"); - int DOTID=COLON(7,COUNT,DOLIT,0x1F,ANDD,TYPES,SPACE,EXITT); - HEADER(5,"WORDS"); - int WORDS=COLON(6,CR,CNTXT,DOLIT,0,TEMP,STORE); - BEGIN(2,AT,QDUP); - WHILE(9,DUPP,SPACE,DOTID,CELLM,TEMP,AT,DOLIT,0x10,LESS); - IF(4,DOLIT,1,TEMP,PSTOR); - ELSE(5,CR,DOLIT,0,TEMP,STORE); - THEN(0); - REPEAT(1,EXITT); - HEADER(6,"FORGET"); - int FORGT=COLON(3,TOKEN,NAMEQ,QDUP); - IF(12,CELLM,DUPP,CP,STORE,AT,DUPP,CNTXT,STORE,LAST,STORE,DROP,EXITT); - THEN(1,ERRORR); - HEADER(4,"COLD"); - int COLD=COLON(1,CR); - DOTQ("esp32forth V6.3, 2019 "); - int DOTQ1=LABEL(2,CR,EXITT); - HEADER(4,"LINE"); - int LINE=COLON(2,DOLIT,0x7); - FOR(6,DUPP,PEEK,DOLIT,0x9,UDOTR,CELLP); - NEXT(1,EXITT); - HEADER(2,"PP"); - int PP=COLON(0); - FOR(0); - AFT(7,CR,DUPP,DOLIT,0x9,UDOTR,SPACE,LINE); - THEN(0); - NEXT(1,EXITT); - HEADER(2,"P0"); - int P0=COLON(4,DOLIT,0x3FF44004,POKE,EXITT); - HEADER(3,"P0S"); - int P0S=COLON(4,DOLIT,0x3FF44008,POKE,EXITT); - HEADER(3,"P0C"); - int P0C=COLON(4,DOLIT,0x3FF4400C,POKE,EXITT); - HEADER(2,"P1"); - int P1=COLON(4,DOLIT,0x3FF44010,POKE,EXITT); - HEADER(3,"P1S"); - int P1S=COLON(4,DOLIT,0x3FF44014,POKE,EXITT); - HEADER(3,"P1C"); - int P1C=COLON(4,DOLIT,0x3FF44018,POKE,EXITT); - HEADER(4,"P0EN"); - int P0EN=COLON(4,DOLIT,0x3FF44020,POKE,EXITT); - HEADER(5,"P0ENS"); - int P0ENS=COLON(4,DOLIT,0x3FF44024,POKE,EXITT); - HEADER(5,"P0ENC"); - int P0ENC=COLON(4,DOLIT,0x3FF44028,POKE,EXITT); - HEADER(4,"P1EN"); - int P1EN=COLON(4,DOLIT,0x3FF4402C,POKE,EXITT); - HEADER(5,"P1ENS"); - int P1ENS=COLON(4,DOLIT,0x3FF44030,POKE,EXITT); - HEADER(5,"P1ENC"); - int P1ENC=COLON(4,DOLIT,0x3FF44034,POKE,EXITT); - HEADER(4,"P0IN"); - int P0IN=COLON(5,DOLIT,0x3FF4403C,PEEK,DOT,EXITT); - HEADER(4,"P1IN"); - int P1IN=COLON(5,DOLIT,0x3FF44040,PEEK,DOT,EXITT); - HEADER(3,"PPP"); - int PPP=COLON(7,DOLIT,0x3FF44000,DOLIT,3,PP,DROP,EXITT); - HEADER(5,"EMITT"); - int EMITT=COLON(2,DOLIT,0x3); - FOR(8,DOLIT,0,DOLIT,0x100,MSMOD,SWAP,TCHAR,EMIT); - NEXT(2,DROP,EXITT); - HEADER(5,"TYPEE"); - int TYPEE=COLON(3,SPACE,DOLIT,0x7); - FOR(4,DUPP,PEEK,EMITT,CELLP); - NEXT(2,DROP,EXITT); - HEADER(4,"PPPP"); - int PPPP=COLON(0); - FOR(0); - AFT(10,CR,DUPP,DUPP,DOLIT,0x9,UDOTR,SPACE,LINE,SWAP,TYPEE); - THEN(0); - NEXT(1,EXITT); - HEADER(3,"KKK"); - int KKK=COLON(7,DOLIT,0x3FF59000,DOLIT,0x10,PP,DROP,EXITT); - HEADER(IMEDD+4,"THEN"); - int THENN=COLON(4,HERE,SWAP,STORE,EXITT); - HEADER(IMEDD+3,"FOR"); - int FORR=COLON(4,COMPI,TOR,HERE,EXITT); - HEADER(IMEDD+5,"BEGIN"); - int BEGIN=COLON(2,HERE,EXITT); - HEADER(IMEDD+4,"NEXT"); - int NEXT=COLON(4,COMPI,DONXT,COMMA,EXITT); - HEADER(IMEDD+5,"UNTIL"); - int UNTIL=COLON(4,COMPI,QBRAN,COMMA,EXITT); - HEADER(IMEDD+5,"AGAIN"); - int AGAIN=COLON(4,COMPI,BRAN,COMMA,EXITT); - HEADER(IMEDD+2,"IF"); - int IFF=COLON(7,COMPI,QBRAN,HERE,DOLIT,0,COMMA,EXITT); - HEADER(IMEDD+5,"AHEAD"); - int AHEAD=COLON(7,COMPI,BRAN,HERE,DOLIT,0,COMMA,EXITT); - HEADER(IMEDD+6,"REPEAT"); - int REPEA=COLON(3,AGAIN,THENN,EXITT); - HEADER(IMEDD+3,"AFT"); - int AFT=COLON(5,DROP,AHEAD,HERE,SWAP,EXITT); - HEADER(IMEDD+4,"ELSE"); - int ELSEE=COLON(4,AHEAD,SWAP,THENN,EXITT); - HEADER(IMEDD+5,"WHILE"); - int WHILEE=COLON(3,IFF,SWAP,EXITT); - HEADER(IMEDD+6,"ABORT\""); - int ABRTQ=COLON(6,DOLIT,ABORQP,HERE,STORE,STRCQ,EXITT); - HEADER(IMEDD+2,"$\""); - int STRQ=COLON(6,DOLIT,STRQP,HERE,STORE,STRCQ,EXITT); - HEADER(IMEDD+2,".\""); - int DOTQQ=COLON(6,DOLIT,DOTQP,HERE,STORE,STRCQ,EXITT); - HEADER(4,"CODE"); - int CODE=COLON(5,TOKEN,SNAME,OVERT,ALIGN,EXITT); - HEADER(6,"CREATE"); - int CREAT=COLON(5,CODE,DOLIT,0x203D,COMMA,EXITT); - HEADER(8,"VARIABLE"); - int VARIA=COLON(5,CREAT,DOLIT,0,COMMA,EXITT); - HEADER(8,"CONSTANT"); - int CONST=COLON(6,CODE,DOLIT,0x2004,COMMA,COMMA,EXITT); - HEADER(IMEDD+2,".("); - int DOTPR=COLON(5,DOLIT,0X29,PARSE,TYPES,EXITT); - HEADER(IMEDD+1,"\\"); - int BKSLA=COLON(5,DOLIT,0xA,WORDD,DROP,EXITT); - HEADER(IMEDD+1,"("); - int PAREN=COLON(5,DOLIT,0X29,PARSE,DDROP,EXITT); - HEADER(12,"COMPILE-ONLY"); - int ONLY=COLON(6,DOLIT,0x40,LAST,AT,PSTOR,EXITT); - HEADER(9,"IMMEDIATE"); - int IMMED=COLON(6,DOLIT,0x80,LAST,AT,PSTOR,EXITT); - int ENDD=IP; - Serial.println(); - Serial.print("IP="); - Serial.print(IP); - Serial.print(" R-stack= "); - Serial.print(popR<<2,HEX); - IP=0x180; - int USER=LABEL(16,6,EVAL,0,0,0,0,0,0,0,0x10,IMMED-12,ENDD,IMMED-12,INTER,EVAL,0); - -// dump dictionary - IP=0; - for (len=0;len<0x120;len++){CheckSum();} - -// compile \data\load.txt - if(!SPIFFS.begin(true)){Serial.println("Error mounting SPIFFS"); } - File file = SPIFFS.open("/load.txt"); - if(file) { - Serial.print("Load file: "); - len = file.read(cData+0x8000,0x7000); - Serial.print(len); - Serial.println(" bytes."); - data[0x66] = 0; // >IN - data[0x67] = len; // #TIB - data[0x68] = 0x8000; // 'TIB - P = 0x180; // EVAL - WP = 0x184; - evaluate(); - Serial.println(" Done loading."); - file.close(); - SPIFFS.end(); - } - // Setup web server handlers - server.on("/", HTTP_GET, []() { - server.send(200, "text/html", index_html); - }); - server.on("/input", HTTP_POST, handleInput); - server.begin(); - Serial.println("HTTP server started"); -} - -void loop() { - server.handleClient(); -} diff --git a/ueforth/site/linux.html b/ueforth/site/linux.html index d0384ef..912040d 100644 --- a/ueforth/site/linux.html +++ b/ueforth/site/linux.html @@ -11,12 +11,26 @@Download
+STABLE RELEASE
-ueforth.linux +ueforth-7.0.5.1.linux - Linux 64-bit Executable µEforth
+
- Version: {{VERSION}} Rev: {{REVISION}} + Version: 7.0.5.1Beta Release
++ueforth-{{VERSION}}.linux + - Linux 64-bit Executable µEforth
+ +
+ Version: {{VERSION}} +
+ ++Release Archive + - Prior Releases +
http://github.com/flagxor/eforth - Complete Source Code (under ueforth) diff --git a/ueforth/site/posix_common.html b/ueforth/site/posix_common.html index eeb29f6..bf1b957 100644 --- a/ueforth/site/posix_common.html +++ b/ueforth/site/posix_common.html @@ -5,7 +5,8 @@ server ( port -- ) Start web UI on port (used to implement webui).
httpde vocabulary.
+Requires v7.0.6+
+These words are inside thehttpd vocabulary.
server ( port -- ) Start an httpd on port.
handleClient ( -- ) Get next request.
diff --git a/ueforth/site/static/eforth.css b/ueforth/site/static/eforth.css
index f7b0dc5..51cfbaf 100644
--- a/ueforth/site/static/eforth.css
+++ b/ueforth/site/static/eforth.css
@@ -19,8 +19,14 @@ h3 {
background-color: #eee;
padding: 10px;
}
+h4 {
+ border-bottom: 2px solid #777;
+ width: 30%;
+}
h5 {
+ border-bottom: 2px solid #777;
margin: 2px;
+ width: 30%;
}
a:link {
color: #00c;
diff --git a/ueforth/site/windows.html b/ueforth/site/windows.html
index 984b7d5..039aec3 100644
--- a/ueforth/site/windows.html
+++ b/ueforth/site/windows.html
@@ -11,18 +11,30 @@
Download
+STABLE RELEASE
-uEf32.exe
+uEf32-7.0.5.1.exe
- Window 32-bit EXE µEforth
- Version: {{VERSION}} Rev: {{REVISION}}
+uEf64-7.0.5.1.exe
+ - Window 64-bit EXE µEforth
+ Version: 7.0.5.1 (Stable)
+Beta Release
+
+uEf32-{{VERSION}}.exe
+ - Window 32-bit EXE µEforth
+uEf64-{{VERSION}}.exe
+ - Window 64-bit EXE µEforth
+ Version: {{VERSION}}
+
+
+
+
-uEf64.exe
- - Window 64-bit EXE µEforth
- - Version: {{VERSION}} Rev: {{REVISION}}
+Release Archive
+ - Prior Releases
-
http://github.com/flagxor/eforth
- Complete Source Code (under ueforth)
diff --git a/ueforth/tools/webindex.py b/ueforth/tools/webindex.py
new file mode 100644
index 0000000..862b2a9
--- /dev/null
+++ b/ueforth/tools/webindex.py
@@ -0,0 +1,16 @@
+#! /usr/bin/env python
+
+import sys
+
+sys.stdout.write("""
+
+Release Archive
+
+
+Release Archive
+""")
+
+for line in sys.stdin.read().splitlines():
+ url = line.replace('gs://eforth/', 'https://eforth.storage.googleapis.com/')
+ name = line.replace('gs://eforth/releases/', '')
+ sys.stdout.write('%s
\n' % (name, url))