'=========================================================================== ' Subject: EXPERIMENTAL PROG LANGUAGE V.01 Date: 10-18-98 (15:12) ' Author: L. Jones Code: QB, QBasic, PDS ' Origin: ljones@lineone.net Packet: MISC.ABC '=========================================================================== ' Prog language ' Experimental!!! ' v0.01 ' (c) L Jones,1998 ljones@lineone.net ' ' This is an experimental programming langauge that I may write. This ' version is an experimental version, not even a "pre-release". Just like ' an "artist's" preliminary sketch, if you like! ' ' "A","X","Y" (i.e. from LDA,TXA,TAY, etc) are internal and not variables. ' So a variable called "A" and the "A" in STA are different. Careful! ' Do not use "A","X" or "Y" as your variable names!! ' ' Commands are little like 6502, although this is *not* an attempt to ' emulate or simulate a 6502. All commands are 3 letters with either 2,1 ' or no extra parameters. Only use ONE space between a parameter and its ' command (do not miss it out or use 2 spaces, for example:) ' INC 4 (correct) ' INC 4 (invalid, won't work at all!) ' INC4 (also invalid!) ' In the VAR command there should be no spaces around the "," for example: ' VAR Message,"Hello" (correct) ' VAR Message , "Hello" (invalid!) ' ' Work to do: ' The "language" may or may not look like the commands I've used (probably ' yes). One problem that I know of is going to be the subject of arrays - ' how??? ' ' Listed below is a test program. To use, cut it out, remove the "'" (REM) ' statements and save in a file called "TEST.PRG". ' '; Test program ' 'VAR FirstMessage,"Enter first number?" 'VAR SecondMessage,"Enter second number?" 'VAR LastMessage,"The result is " 'VAR Num1,0 'VAR Num2,0 'VAR Total,0 ' 'WDS FirstMessage 'INP Num1 ' 'WDS SecondMessage 'INP Num2 ' 'WDS LastMessage 'LDA Num1 'ADA Num2 'STA Total 'WDS Total 'LDA 0 'RTS ' ' Commands so far: ' ' VAR [name] Setup variable [name] ' VAR [name], Setup variable [name] with ata ("string" or numeric) ' LAB [name] Label ' RTS End program ' JMP [label] Go to [label] ' LDA [num] A=[number] ' LDA ".." A=".." (string) ' LDA [var] A=[var] ' STA [var] [var]=A ' INC [var] Add 1 to [var] ' INC [num] Add [num] to A ' TAX Transfer A to X ' TAY Transfer A to Y ' TXA Transfer X to A ' TYA Transfer Y to A ' INP [var] Read input from keyboard, store in [var] ' ADA Add to A - either a [variable] or umber ' WRA Write value in A to screen ' WDS Writes text, numbers or var's onto screen (not int.A,X,Y) ' Setup: CLS maxlab% = 16 maxlines% = 25 maxvar% = 8 DIM label$(maxlab%), labpos%(maxlab%) DIM var$(maxvar%), vardat$(maxvar%) DIM prg$(maxlines%) varx$ = "": REM "x" vary$ = "": REM "y" vara$ = "": REM "a" Readfile: ' Get rid of any spaces before commands OPEN "test.prg" FOR INPUT AS 1 WHILE EOF(1) = 0 LINE INPUT #1, in$ prg$(ln%) = LTRIM$(in$) ln% = ln% + 1 WEND CLOSE 1 ' Read labels OPEN "test.prg" FOR INPUT AS 1 WHILE EOF(1) = 0 LINE INPUT #1, in$ ln2% = ln2% + 1 cmd$ = UCASE$(MID$(in$, 1, 3)) IF cmd$ = "LAB" THEN label$(lb%) = MID$(in$, 5, LEN(in$)) labpos%(lb%) = ln2% lb% = lb% + 1 END IF WEND CLOSE 1 'Variables OPEN "test.prg" FOR INPUT AS 1 WHILE EOF(1) = 0 LINE INPUT #1, in$ ln3% = ln3% + 1 cmd$ = UCASE$(MID$(in$, 1, 3)) ' this bit below finds out if there's any data to store in var.. IF cmd$ = "VAR" THEN tmp$ = in$ scan% = INSTR(1, tmp$, ",") IF scan% = 0 THEN scan% = LEN(tmp$) + 1 var$(lv%) = MID$(in$, 5, scan% - 5) ' clear out variable anyway ready for use... ' neatly solves the problem if there is NO "," ! vardat$(lv%) = "" dat$ = MID$(in$, scan% + 1, LEN(in$)) IF dat$ = "0" THEN vardat$(lv%) = "0": lv% = lv% + 1 IF MID$(dat$, 1, 1) = CHR$(34) THEN tmp$ = dat$ size% = LEN(tmp$) - 1 vardat$(lv%) = MID$(tmp$, 2, size% - 1) lv% = lv% + 1 END IF END IF WEND CLOSE 1 Runit: FOR count% = 0 TO ln% Start2: in$ = prg$(count%) cmd$ = UCASE$(MID$(in$, 1, 3)) IF cmd$ = "RTS" THEN END END IF IF cmd$ = "JMP" THEN o1$ = MID$(in$, 5, LEN(in$)) FOR scan% = 0 TO lb% IF label$(scan%) = o1$ THEN count% = labpos%(scan%) GOTO Start2 END IF NEXT END IF IF cmd$ = "INP" THEN o1$ = MID$(in$, 5, LEN(in$)) FOR scan% = 0 TO lv% IF var$(scan%) = o1$ THEN LINE INPUT "", tmp$ vardat$(scan%) = tmp$ END IF NEXT END IF IF cmd$ = "LDA" THEN value = VAL(MID$(in$, 5, LEN(in$))) IF value = 0 AND MID$(in$, 5, 1) <> "0" THEN o1$ = MID$(in$, 5, LEN(in$)) FOR scan% = 0 TO lv% IF var$(scan%) = o1$ THEN vara$ = vardat$(scan%) END IF NEXT END IF IF MID$(in$, 5, 1) = CHR$(34) THEN tmp$ = MID$(in$, 6, LEN(in$) - 6) vara$ = tmp$ END IF IF value > 0 THEN vara$ = STR$(value) IF value = 0 AND MID$(in$, 5, 1) = "0" THEN vara$ = "0" END IF IF cmd$ = "WDS" THEN o1$ = MID$(in$, 5, LEN(in$)) FOR scan% = 0 TO lv% IF var$(scan%) = o1$ THEN PRINT vardat$(scan%); END IF NEXT IF MID$(in$, 5, 1) = CHR$(34) THEN tmp$ = MID$(in$, 6, LEN(in$) - 6) PRINT tmp$; END IF IF value > 0 THEN PRINT VAL(o1$); IF value = 0 AND MID$(in$, 5, 1) = "0" THEN PRINT 0; END IF IF cmd$ = "ADA" THEN value = VAL(MID$(in$, 5, LEN(in$))) IF value = 0 AND MID$(in$, 5, 1) <> "0" THEN o1$ = MID$(in$, 5, LEN(in$)) FOR scan% = 0 TO lv% IF var$(scan%) = o1$ THEN sum = VAL(vara$) + VAL(vardat$(scan%)) vara$ = STR$(sum) END IF NEXT END IF IF value > 0 THEN sum = VAL(vara$) + value vara$ = STR$(sum) END IF IF value = 0 AND MID$(in$, 5, 1) = "0" THEN vara$ = vara$: REM add nothing! END IF IF cmd$ = "STA" THEN o1$ = MID$(in$, 5, LEN(in$)) FOR scan% = 0 TO lv% IF var$(scan%) = o1$ THEN vardat$(scan%) = vara$ END IF NEXT END IF IF cmd$ = "INC" THEN o1$ = MID$(in$, 5, LEN(in$)) value = VAL(o1$) IF value > 0 THEN tmp% = VAL(vara$) tmp% = tmp% + value vara$ = STR$(tmp%) END IF FOR scan% = 0 TO lv% IF var$(scan%) = o1$ THEN tmp% = VAL(vardat$(scan%)) tmp% = tmp% + 1 vardat$(scan%) = STR$(tmp%) END IF NEXT END IF IF cmd$ = "TAX" THEN varx$ = vara$ END IF IF cmd$ = "TAY" THEN vary$ = vara$ END IF IF cmd$ = "TXA" THEN vara$ = varx$ END IF IF cmd$ = "TYA" THEN vara$ = vary$ END IF IF cmd$ = "WRA" THEN PRINT vara$; END IF NEXT END