= = = MEGALITER SOURCE = = = Megaliter is a language to be compiled into bytecode for the DUO Mega. = SYNTAX = A variable may have one of the following types: BYTE (8 bit unsigned) INT (16 bit signed) FLOAT (32 bit) ADDR BYTEARRAY INTARRAY FLOATARRAY ADDRARRAY To declare a primitive variable, place the variable name after a variable type. Comments are preceded by a number sign: # Declare a single byte variable. BYTE MYCHAR # Declare a signed integer variable. INT MYNUM To declare an array variable, place the maximum size after the variable type and variable name: BYTEARRAY MYTEXT 30 A function invocation consists of a function name followed by arguments: SET MYNUM 15 MUL MYRESULT MYNUM 2 Certain functions introduce code blocks. The keyword END finishes a code block: IF MYCOND DECS MYNUM 9 END Array literals are enclosed by parentheses and are preceded by a variable type. String literals are enclosed by quotation marks: SET MYLIST BYTEARRAY(77 4 18) SET MYTEXT "HELLO WORLD" To refer to the address of a variable, place an ampersand before the variable name. To dereference the value at an address, place a variable type and an asterisk before the variable name. BYTE MYSRC BYTE MYDEST ADDR MYPTR SET MYSRC 6 SET MYPTR &MYSRC SET MYDEST BYTE*MYPTR Use a close curly brace to specify whether a number literal is an INT or BYTE. INT MYNUM ADD MYNUM INT{8 BYTE{9 Custom functions may be declared with the FUNC keyword and a code block. Each argument variable must be declared in order before other variables. To store the result of a function invocation, place a greater than symbol and a variable name after the function arguments. INT MYNUM SQUARE 5 > MYNUM QUIT FUNC SQUARE INT INPUT INT OUTPUT POW OUTPUT INPUT 2 RETVAL OUTPUT END = FUNCTIONS = SET [dest] [value] ADD [dest] [num] [num] SUB [dest] [num] [num] MUL [dest] [num] [num] DIV [dest] [num] [num] MOD [dest] [num] [num] EQU [dest] [value] [value] NOTEQU [dest] [value] [value] GRE [dest] [num] [num] LESS [dest] [num] [num] AND [dest] [num] [num] OR [dest] [num] [num] NOT [dest] [num] BOOLNOT [dest] [num] INCR [dest]: Add 1 to a number. DECR [dest]: Subtract 1 from a number. INCS [dest] [num]: Add the given amount to a number. DECS [dest] [num]: Subtract the given amount from a number. ABS [dest] [num] POW [dest] [num] [num] SQRT [dest] [num] SIN [dest] [num] COS [dest] [num] TAN [dest] [num] RAND [dest] [minimum] [maximum] IF [num] IFNOT [num] WHILE [num] WHILENOT [num] RET RETVAL [value] QUIT: Abort the program. LOCTOGLOB [dest] [address]: Convert a local address to a global address. GETLEN [dest] [array] SETLEN [dest] [num] GETELT [dest] [array] [index] SETELT [dest] [index] [value] FINDELT [dest] [array] [value] PUSHELT [dest] [value] CONCAT [dest] [array]: Append the elements of one array onto another. GETSUB [dest] [array] [index] [index] FINDSUB [dest] [array] [array] TEXTTONUM [dest] [text] NUMTOTEXT [dest] [num] ALLOCHEAP [dest] [size]: Reserve memory in the heap and stores a single byte handle in dest. DEALLOCHEAP [heapHandle] GETHEAPADDR [dest] [heapHandle] GETHEAPSIZE [dest] [heapHandle] SETHEAPSIZE [heapHandle] [num] SENDDEBUG [value] PROMPTDEBUG [dest] DRAWTEXT [posX] [posY] [text] DRAWBAR [posX] [posY] [width] [color] DRAWIMG [posX] [posY] [width] [data] CLRWIN GETKEY [dest]: Store value of last pressed key. Store 0 if no key was pressed. PROMPTVAL [dest] GETTIME [dest] SLEEP [num] READSHAR [dest] [index] WRTSHAR [index] [value] GETNUMCORES [dest] GETCOREPOS [dest] GETNUMFILES [dest] GETFILENAME [which] CRTFILE [dest] [name] [size] [type]: Store a single int handle in dest. OPENFILE [dest] [name]: The handle will be -1 if the file was not found. READFILE [dest] [fileHandle] [index] [amount] ERSFILE [fileHandle]: Necessary if the mass storage device is flash memory. WRTFILE [fileHandle] [index] [value] GETFILESIZE [dest] [fileHandle] GETFILETYPE [dest] [fileHandle] DELFILE [fileHandle] RUNFILE [coreAmount] [fileHandle] INCLFILE [fileHandle]: Dynamically load executable code and store address of resource in dest. EXCLFILE [fileHandle]: Deallocate space reserved for code resource. INVOKE [fileHandle] [address] [arg?] [arg?]... [> dest?]: Call an included function. = TEST CODE = BYTE MYNUM SET MYNUM 5 IF MYNUM SET MYNUM 6 END SET MYNUM 7 BYTE MYNUM BYTE MYCOND SET MYNUM 3 SET MYCOND 0 IF MYCOND SET MYNUM 99 END BYTE COUNT BYTE NUM SET COUNT 5 SET NUM 0 WHILE COUNT DECR COUNT INCS NUM 3 END SET COUNT 99 BYTEARRAY MYLIST 10 SET MYLIST BYTEARRAY(1 2 3) BYTE MYDEST ADDR MYPTR SET MYPTR &MYDEST SET BYTE*MYPTR 6 BYTE NUM DOUBLE 17 > NUM QUIT FUNC DOUBLE BYTE INPUT BYTE OUTPUT MUL OUTPUT INPUT 2 RETVAL OUTPUT END BYTE NUM SETNUM QUIT FUNC SETNUM SET NUM 9 END BYTE NUM BYTE RESULT SET NUM 2 ACT 5 > RESULT QUIT FUNC ACT BYTE INPUT BYTE NUM ADD NUM INPUT 3 RETVAL NUM END BYTEARRAY MYTEXT 20 SET MYTEXT "HELLO WORLD" SENDDEBUG MYTEXT BYTEARRAY BUF 10 BYTE NUM SENDDEBUG "NUM PLEASE" PROMPTDEBUG BUF TEXTTONUM NUM BUF MUL NUM NUM 2 NUMTOTEXT BUF NUM SENDDEBUG BUF CLRWIN DRAWTEXT 0 0 "GRASS IS GREEN" DRAWBAR 0 1 14 42 DRAWIMG 20 1 8 BYTEARRAY(41 41 40 40 40 40 41 41) DRAWIMG 20 3 8 BYTEARRAY(41 41 40 40 40 40 41 41) DRAWBAR 22 4 4 41 QUIT CLRWIN DRAWTEXT 0 0 "WELCOME TO THE DUO MEGA" DRAWBAR 0 1 23 46 WHILE 1 DRAWIMG 30 1 4 BYTEARRAY(41 40 40 41 40 41 41 40 41 40 40 41) DRAWIMG 30 1 4 BYTEARRAY(41 41 41 41 41 40 40 41 41 41 41 41) DRAWIMG 30 1 4 BYTEARRAY(40 42 42 40 42 40 40 42 40 42 42 40) END CLRWIN DRAWTEXT 0 0 "PRESS A KEY" WHILE 1 BYTE DATA GETKEY DATA IF DATA BYTEARRAY BUF 10 NUMTOTEXT BUF DATA CONCAT BUF BYTEARRAY(32 32 32) DRAWTEXT 0 1 BUF END END CLRWIN BYTEARRAY TEXT 20 PROMPTVAL TEXT DRAWTEXT 2 1 TEXT CLRWIN WHILE 1 INTARRAY TIME 2 GETTIME TIME INT SECS GETELT SECS TIME 1 BYTEARRAY BUF 10 NUMTOTEXT BUF SECS DRAWTEXT 2 1 BUF END CLRWIN BYTE POSX SET POSX 0 WHILE 1 DRAWBAR POSX 1 1 41 INCR POSX SLEEP 1000 END CLRWIN DRAWTEXT 2 3 "ENTER SOME TEXT:" BYTEARRAY TEXT 10 PROMPTVAL TEXT CLRWIN BYTE POSX BYTE POSY SET POSX 0 SET POSY 0 DRAWTEXT POSX POSY TEXT WHILE 1 BYTE LASTPOSX BYTE LASTPOSY SET LASTPOSX POSX SET LASTPOSY POSY BYTE KEY GETKEY KEY BYTE RESULT EQU RESULT KEY 65 IF RESULT DECS POSX 5 END EQU RESULT KEY 68 IF RESULT INCS POSX 5 END EQU RESULT KEY 87 IF RESULT DECS POSY 2 END EQU RESULT KEY 83 IF RESULT INCS POSY 2 END BYTE RESULT2 NOTEQU RESULT LASTPOSX POSX NOTEQU RESULT2 LASTPOSY POSY OR RESULT RESULT RESULT2 IF RESULT DRAWBAR LASTPOSX LASTPOSY 10 40 DRAWTEXT POSX POSY TEXT END END CLRWIN WRTSHAR 7 "BREAD" BYTEARRAY TEXT 10 READSHAR TEXT 7 DRAWTEXT 0 0 TEXT QUIT CLRWIN WRTSHAR 7 83 BYTE NUM READSHAR NUM 7 BYTEARRAY TEXT 10 NUMTOTEXT TEXT NUM DRAWTEXT 0 0 TEXT QUIT BYTE COREPOS GETCOREPOS COREPOS IFNOT COREPOS CLRWIN END BYTE POSX MUL POSX COREPOS 20 BYTEARRAY TEXT 10 SET TEXT "CORE " BYTE NUM ADD NUM COREPOS 48 PUSHELT TEXT NUM DRAWTEXT POSX 0 TEXT BYTE STATE SET STATE 0 WHILE 1 IFNOT COREPOS BYTE KEY GETKEY KEY IF KEY INCR STATE END WRTSHAR 9 STATE END IF COREPOS READSHAR STATE 9 END NUMTOTEXT TEXT STATE CONCAT TEXT " " DRAWTEXT POSX 2 TEXT END CLRWIN INT SUM ADD SUM 500 700 BYTEARRAY TEXT 10 NUMTOTEXT TEXT SUM DRAWTEXT 0 0 TEXT SLEEP 1000 DRAWTEXT 0 1 "THAT IS THE SUM" QUIT CLRWIN DRAWTEXT 0 0 "TEST" QUIT BYTE COREPOS GETCOREPOS COREPOS IFNOT COREPOS CLRWIN END BYTE POSX MUL POSX COREPOS 20 DRAWBAR POSX 0 10 41 QUIT CLRWIN INT HANDLE CRTFILE HANDLE "BREAD" 100 "TEXT" BYTEARRAY TEXT 10 NUMTOTEXT TEXT HANDLE DRAWTEXT 0 0 TEXT INT NUM GETNUMFILES NUM NUMTOTEXT TEXT NUM DRAWTEXT 0 1 TEXT GETFILENAME TEXT 0 DRAWTEXT 0 2 TEXT ERSFILE HANDLE WRTFILE HANDLE 7 "HELLO" READFILE TEXT HANDLE 7 5 DRAWTEXT 0 3 TEXT QUIT CLRWIN DRAWTEXT 0 0 "STARTING" INT HANDLE CRTFILE HANDLE "BREAD" 100 "TEXT" BYTEARRAY TEXT 10 GETFILESIZE NUM HANDLE NUMTOTEXT TEXT NUM DRAWTEXT 0 1 TEXT GETFILETYPE TEXT HANDLE DRAWTEXT 0 2 TEXT DRAWTEXT 0 3 "DONE" QUIT CLRWIN DRAWTEXT 0 0 "STARTING" INT HANDLE CRTFILE HANDLE "BREAD" 100 "TEXT" BYTEARRAY TEXT 10 INT NUM GETNUMFILES NUM NUMTOTEXT TEXT NUM DRAWTEXT 0 1 TEXT DELFILE HANDLE GETNUMFILES NUM NUMTOTEXT TEXT NUM DRAWTEXT 0 2 TEXT DRAWTEXT 0 3 "DONE" QUIT CLRWIN DRAWTEXT 0 1 "PILOT" DRAWTEXT 0 3 "ENTER HELP FOR COMMANDS" WHILE 1 BYTE COND INT NUM INT INDEX BYTEARRAY COMMAND 20 BYTEARRAY TEXT 20 BYTEARRAY NAME 20 PROMPTVAL COMMAND BYTE COND EQU COND COMMAND "HELP" IF COND CLRWIN DRAWTEXT 0 1 "COMMANDS:" DRAWTEXT 0 3 "HELP VIEW RUN CREATE INFO DELETE" END EQU COND COMMAND "VIEW" IF COND CLRWIN BYTE POSX BYTE POSY SET POSX 0 SET POSY 0 GETNUMFILES NUM SET INDEX 0 LESS COND INDEX NUM WHILE COND GETFILENAME TEXT INDEX DRAWTEXT POSX POSY TEXT INCS POSX 16 GRE COND POSX 75 IF COND SET POSX 0 INCR POSY END INCR INDEX LESS COND INDEX NUM END END EQU COND COMMAND "RUN" IF COND CLRWIN DRAWTEXT 0 1 "NAME?" PROMPTVAL NAME OPENFILE INDEX NAME CLRWIN DRAWTEXT 0 1 "CORE AMOUNT?" PROMPTVAL TEXT TEXTTONUM NUM TEXT CLRWIN RUNFILE NUM INDEX DRAWTEXT 0 1 "RUNNING" END EQU COND COMMAND "CREATE" IF COND CLRWIN DRAWTEXT 0 1 "NAME?" PROMPTVAL NAME CLRWIN DRAWTEXT 0 1 "SIZE?" PROMPTVAL TEXT TEXTTONUM NUM TEXT CLRWIN DRAWTEXT 0 1 "TYPE?" PROMPTVAL TEXT CRTFILE INDEX NAME NUM TEXT CLRWIN DRAWTEXT 0 1 "CREATED" END EQU COND COMMAND "INFO" IF COND CLRWIN DRAWTEXT 0 1 "NAME?" PROMPTVAL NAME CLRWIN DRAWTEXT 0 1 NAME OPENFILE INDEX NAME GETFILESIZE NUM INDEX NUMTOTEXT TEXT NUM DRAWTEXT 0 2 TEXT GETFILETYPE TEXT INDEX DRAWTEXT 0 3 TEXT END EQU COND COMMAND "DELETE" IF COND CLRWIN DRAWTEXT 0 1 "NAME?" PROMPTVAL NAME OPENFILE INDEX NAME DELFILE INDEX CLRWIN DRAWTEXT 0 1 "DELETED" END END CLRWIN BYTEARRAY TEXT1 30 FLOAT NUM BYTEARRAY TEXT2 30 SET TEXT1 "3.95" DRAWTEXT 0 0 TEXT1 TEXTTONUM NUM TEXT1 NUMTOTEXT TEXT2 NUM DRAWTEXT 0 1 TEXT2 QUIT BYTEARRAY OPERATION 5 INT LENGTH BYTE COND BYTEARRAY TEXT1 15 BYTEARRAY TEXT2 15 BYTEARRAY TEXT3 15 FLOAT NUM1 FLOAT NUM2 FLOAT NUM3 WHILE 1 CLRWIN DRAWTEXT 0 1 "ENTER AN OPERATION" DRAWTEXT 0 3 "+ - * / SQRT SIN COS TAN" PROMPTVAL OPERATION CLRWIN DRAWTEXT 0 1 "ENTER NUMBER" PROMPTVAL TEXT1 TEXTTONUM NUM1 TEXT1 CLRWIN GETLEN LENGTH OPERATION EQU COND LENGTH 1 IF COND DRAWTEXT 0 1 "ENTER ANOTHER NUMBER" PROMPTVAL TEXT2 TEXTTONUM NUM2 TEXT2 CLRWIN DRAWTEXT 0 2 TEXT2 END DRAWTEXT 0 1 TEXT1 DRAWTEXT 0 0 OPERATION EQU COND OPERATION "+" IF COND ADD NUM3 NUM1 NUM2 END EQU COND OPERATION "-" IF COND SUB NUM3 NUM1 NUM2 END EQU COND OPERATION BYTEARRAY(42) IF COND MUL NUM3 NUM1 NUM2 END EQU COND OPERATION "/" IF COND DIV NUM3 NUM1 NUM2 END EQU COND OPERATION "SQRT" IF COND SQRT NUM3 NUM1 END EQU COND OPERATION "SIN" IF COND SIN NUM3 NUM1 END EQU COND OPERATION "COS" IF COND COS NUM3 NUM1 END EQU COND OPERATION "TAN" IF COND TAN NUM3 NUM1 END NUMTOTEXT TEXT3 NUM3 DRAWTEXT 0 4 TEXT3 PROMPTVAL TEXT1 END BYTE COREPOS GETCOREPOS COREPOS IFNOT COREPOS CLRWIN END BYTE POSX MUL POSX COREPOS 2 WHILE 1 DRAWBAR POSX 0 1 41 SLEEP 1000 DRAWBAR POSX 0 1 42 SLEEP 1000 END CLRWIN DRAWTEXT 0 0 "HELLO" QUIT CLRWIN BYTE POSY SET POSY 2 DRAWTEXT 0 POSY "HELLO" QUIT BYTE COREPOS GETCOREPOS COREPOS IFNOT COREPOS CLRWIN END BYTE POSX BYTE POSY MOD POSX COREPOS 8 MUL POSX POSX 10 DIV POSY COREPOS 8 MUL POSY POSY 2 INT CANDIDATE MUL CANDIDATE COREPOS 400 INCS CANDIDATE 11 WHILE 1 BYTE ISPRIME SET ISPRIME 1 INT FACTOR SET FACTOR 3 BYTE COND SET COND 1 WHILE COND INT REMAINDER MOD REMAINDER CANDIDATE FACTOR IFNOT REMAINDER SET ISPRIME 0 END INCR FACTOR INT SQUARE MUL SQUARE FACTOR FACTOR GRE COND SQUARE CANDIDATE BOOLNOT COND COND AND COND COND ISPRIME END IF ISPRIME BYTEARRAY TEXT 10 NUMTOTEXT TEXT CANDIDATE DRAWTEXT POSX POSY TEXT END INCS CANDIDATE 2 END WRTSHAR 0 0 BYTE ITERAMOUNT SET ITERAMOUNT 25 BYTE COREPOS BYTE NUMCORES GETCOREPOS COREPOS GETNUMCORES NUMCORES BYTE COL BYTE ROW IFNOT COREPOS SET ROW 0 BYTE COND SET COND 1 WHILE COND DRAWBAR 0 ROW 80 44 INCR ROW LESS COND ROW 18 END WRTSHAR 0 1 END BYTE ROWHEIGHT BYTE ENDROW DIV ROWHEIGHT 18 NUMCORES FLOAT STARTPOSX FLOAT POSX FLOAT POSY FLOAT NUM DIV STARTPOSX 12 10 SUB STARTPOSX 0 STARTPOSX SET POSX STARTPOSX DIV POSY 18 100 DIV POSY POSY NUMCORES MUL POSY POSY COREPOS SUB POSY 0 POSY DIV NUM 34 100 INCS POSY NUM SET COL 0 MUL ROW ROWHEIGHT COREPOS ADD ENDROW ROW ROWHEIGHT FLOAT OFFSETX FLOAT OFFSETY DIV OFFSETX 5 1000 DIV OFFSETY 1 100 SET COND 0 WHILENOT COND READSHAR COND 0 END SET COND 1 WHILE COND FLOAT REAL FLOAT IMAGINARY BYTE COUNT SET REAL POSX SET IMAGINARY POSY SET COUNT 0 SET COND 1 WHILE COND FLOAT TEMPR FLOAT TEMPI MUL TEMPR REAL REAL MUL NUM IMAGINARY IMAGINARY DECS TEMPR NUM MUL TEMPI REAL IMAGINARY MUL TEMPI TEMPI 2 ADD REAL TEMPR POSX ADD IMAGINARY TEMPI POSY INCR COUNT LESS COND COUNT ITERAMOUNT BYTE COND2 LESS COND2 REAL 2 AND COND COND COND2 LESS COND2 IMAGINARY 2 AND COND COND COND2 END BYTE COLOR SET COLOR 40 LESS COND COUNT ITERAMOUNT IF COND SET COLOR 47 END LESS COND COUNT 15 IF COND SET COLOR 43 END LESS COND COUNT 11 IF COND SET COLOR 42 END DRAWBAR COL ROW 1 COLOR INCR COL INCS POSX OFFSETX GRE COND COL 79 IF COND SET COL 0 SET POSX STARTPOSX INCR ROW DECS POSY OFFSETY END LESS COND ROW ENDROW END QUIT CLRWIN FLOAT NUM SET NUM 1.2 BYTEARRAY TEXT 20 NUMTOTEXT TEXT NUM DRAWTEXT 0 2 TEXT QUIT WRTSHAR 0 0 BYTE COREPOS GETCOREPOS COREPOS BYTE POSX BYTE POSY BYTEARRAY BUF1 100 BYTEARRAY BUF2 100 BYTE COUNT BYTE COLOR BYTE INDEX BYTE COND BYTE COND2 BYTE LASTSHAR SETLEN BUF1 100 SETLEN BUF2 100 IFNOT COREPOS SET POSY 0 SET COND 1 WHILE COND DRAWBAR 0 POSY 80 44 INCR POSY LESS COND POSY 10 END WRTSHAR 0 1 END SET COND 0 WHILENOT COND READSHAR COND 0 END SET LASTSHAR COND RANDOMIZE WHILE 1 MUL POSX COREPOS 11 DRAWIMG POSX 0 10 BUF1 SET POSX 0 SET POSY 0 SET INDEX 0 SET COND 1 WHILE COND SET COUNT 0 COUNTNBR -1 -1 COUNTNBR INT{0 -1 COUNTNBR INT{1 -1 COUNTNBR -1 INT{0 COUNTNBR INT{1 INT{0 COUNTNBR -1 INT{1 COUNTNBR INT{0 INT{1 COUNTNBR INT{1 INT{1 GETELT COLOR BUF1 INDEX EQU COND COLOR 47 IF COND LESS COND2 COUNT 2 IF COND2 SET COLOR 41 END GRE COND2 COUNT 3 IF COND2 SET COLOR 41 END END IFNOT COND EQU COND2 COUNT 3 IF COND2 SET COLOR 47 END END SETELT BUF2 INDEX COLOR INCR POSX GRE COND POSX 9 IF COND SET POSX 0 INCR POSY END INCR INDEX LESS COND INDEX 100 END SET BUF1 BUF2 IFNOT COREPOS GETKEY COND IF COND SUB COLOR 1 LASTSHAR WRTSHAR 0 COLOR END END READSHAR COLOR 0 NOTEQU COND COLOR LASTSHAR IF COND SET LASTSHAR COLOR RANDOMIZE END END FUNC COUNTNBR INT OFFSETX INT OFFSETY INT TEMPX INT TEMPY ADD TEMPX POSX OFFSETX ADD TEMPY POSY OFFSETY LESS COND2 TEMPY 0 GRE COND TEMPY 9 OR COND2 COND2 COND IF COND2 RET END LESS COND2 TEMPX 0 GRE COND TEMPX 9 OR COND2 COND2 COND IF COND2 RET END BYTE TEMPI MUL TEMPI TEMPY 10 INCS TEMPI TEMPX GETELT COLOR BUF1 TEMPI EQU COND COLOR 47 IF COND INCR COUNT END END FUNC RANDOMIZE SET INDEX 0 SET COND 1 WHILE COND RAND COLOR 0 1 MUL COLOR COLOR 6 INCS COLOR 41 SETELT BUF1 INDEX COLOR INCR INDEX LESS COND INDEX 100 END END BYTE POSX BYTE POSY BYTE COND BYTEARRAY BUF 80 INT INDEX BYTE COLOR1 BYTE COLOR2 BYTE ISDRAWING SETLEN BUF 80 SET INDEX 80 WHILE INDEX DECR INDEX SETELT BUF INDEX 40 END CLEARALL WHILE 1 DRAWBAR POSX POSY 1 COLOR1 SLEEP 10 DRAWBAR POSX POSY 1 COLOR2 SLEEP 10 BYTE LASTINDEX BYTE KEY SET LASTINDEX INDEX GETKEY KEY EQU COND KEY 65 IF COND DECR POSX DECR INDEX END EQU COND KEY 68 IF COND INCR POSX INCR INDEX END EQU COND KEY 87 IF COND DECR POSY DECS INDEX 82 END EQU COND KEY 83 IF COND INCR POSY INCS INDEX 82 END EQU COND KEY 67 IF COND INCR COLOR1 GRE COND COLOR1 47 IF COND SET COLOR1 40 END END EQU COND KEY 69 IF COND BOOLNOT ISDRAWING ISDRAWING END EQU COND KEY 78 IF COND CLEARALL END IF KEY IF ISDRAWING WRTSHAR INDEX COLOR1 SET COLOR2 COLOR1 END END NOTEQU COND LASTINDEX INDEX IF COND READSHAR COLOR2 INDEX END END FUNC CLEARALL SET POSY 0 SET COND 1 WHILE COND DRAWBAR 0 POSY 80 40 MUL INDEX POSY 82 WRTSHAR INDEX BUF INCR POSY LESS COND POSY 18 END SET POSX 0 SET POSY 0 SET INDEX 2 SET COLOR1 41 SET COLOR2 40 SET ISDRAWING 0 END CLRWIN BYTE POSX BYTE POSY BYTE SCREENX BYTE TEMPX BYTE COLOR BYTE TEMPC BYTE WIDTH BYTE ISWIDE BYTEARRAY MAP 32 INT INDEX INT TEMPI INT SCORE BYTEARRAY TEXT 10 BYTE NUM BYTE COND BYTE COND2 SETLEN MAP 32 SET SCORE 0 DRAWTEXT 20 1 "BREAD: 0" SET INDEX 32 WHILE INDEX DECR INDEX SETELT MAP INDEX 0 END CHOOSEBLOK WHILE 1 BYTE LASTX BYTE KEY SET LASTX POSX GETKEY KEY EQU COND KEY 65 IF COND GRE COND POSX 0 IF COND DECR POSX END END EQU COND KEY 68 IF COND ADD TEMPX POSX ISWIDE LESS COND TEMPX 7 IF COND INCR POSX END END NOTEQU COND POSX LASTX IF COND DRAWBAR SCREENX 0 WIDTH 40 MUL SCREENX POSX 2 DRAWBAR SCREENX 0 WIDTH COLOR END EQU COND KEY 83 IF COND DRAWBAR SCREENX 0 WIDTH 40 SET POSY 0 SET INDEX POSX WHILE COND GETELT TEMPC MAP INDEX IF TEMPC SET COND 0 END IF ISWIDE ADD TEMPI INDEX 1 GETELT TEMPC MAP TEMPI IF TEMPC SET COND 0 END END IF COND INCR POSY INCS INDEX 8 LESS COND POSY 4 END END IFNOT POSY DRAWTEXT 20 3 "BLOK OVERFLOW!" QUIT END DECS INDEX 8 SETELT MAP INDEX COLOR IF ISWIDE ADD TEMPI INDEX 1 SETELT MAP TEMPI COLOR END DRAWBAR SCREENX POSY WIDTH COLOR SET POSX 8 MUL INDEX POSY 8 SET TEMPX 8 SET TEMPI INDEX SET NUM 0 WHILE POSX DECR POSX DECR INDEX GETELT TEMPC MAP INDEX EQU COND TEMPC COLOR IF COND INCR NUM END IFNOT COND IF NUM PROCSTREAK END SET TEMPX POSX SET TEMPI INDEX SET NUM 0 END END DECR POSX DECR INDEX PROCSTREAK CHOOSEBLOK END END FUNC CHOOSEBLOK RAND COLOR 41 44 RAND ISWIDE 0 1 MUL WIDTH ISWIDE 2 INCS WIDTH 2 SET POSX 3 SET SCREENX 6 DRAWBAR 6 0 WIDTH COLOR END FUNC PROCSTREAK GRE COND NUM 2 IF COND DECR TEMPI WHILE COND SETELT MAP TEMPI 0 DECR TEMPI GRE COND TEMPI INDEX END MUL SCREENX POSX 2 INCS SCREENX 2 SUB WIDTH TEMPX POSX MUL WIDTH WIDTH 2 DECS WIDTH 2 DRAWBAR SCREENX POSY WIDTH 40 INCS SCORE NUM NUMTOTEXT TEXT SCORE DRAWTEXT 27 1 TEXT END END CLRWIN INT HANDLE INT INDEX BYTE LEN BYTE POSY BYTE CHAR BYTEARRAY BUF 80 BYTE COND SET HANDLE -1 DRAWTEXT 0 1 "MEMO PROGRAM" DRAWTEXT 0 3 "ENTER HELP FOR COMMANDS" WHILE 1 PROMPTVAL BUF EQU COND BUF "HELP" IF COND CLRWIN DRAWTEXT 0 1 "COMMANDS:" DRAWTEXT 0 3 "HELP OPEN ERASE WRITE READ" END EQU COND BUF "OPEN" IF COND CLRWIN DRAWTEXT 0 1 "NAME?" PROMPTVAL BUF OPENFILE HANDLE BUF CLRWIN DRAWTEXT 0 1 "OPENED" END EQU COND BUF "ERASE" IF COND ERSFILE HANDLE CLRWIN DRAWTEXT 0 1 "FINISHED ERASING" END EQU COND BUF "WRITE" IF COND CLRWIN DRAWTEXT 0 1 "TEXT?" SET INDEX 0 WHILE COND READFILE BUF HANDLE INDEX 1 GETELT CHAR BUF 0 NOTEQU COND CHAR 255 IF COND INCS INDEX 80 END END SET LEN 1 WHILE LEN PROMPTVAL BUF GETLEN LEN BUF IF LEN CLRWIN DRAWTEXT 0 1 BUF WRTFILE HANDLE INDEX BUF INCS INDEX 80 END END CLRWIN DRAWTEXT 0 1 "FINISHED WRITING" END EQU COND BUF "READ" IF COND SET INDEX 0 SET LEN 0 WHILENOT LEN CLRWIN SET POSY 0 SET COND 1 WHILE COND READFILE BUF HANDLE INDEX 80 FINDELT LEN BUF 255 SETLEN BUF LEN DRAWTEXT 0 POSY BUF INCS INDEX 80 INCR POSY LESS COND POSY 5 END PROMPTVAL BUF GETLEN LEN BUF END CLRWIN DRAWTEXT 0 1 "FINISHED READING" END END