0 REM ******************************************************* 1 REM ** LOGO interpreter in NG-BASIC ** 2 REM ** Version: 0.2 20060520 By: Navaho Gunleg, 2005 ** 3 REM ** (c) Navaho Gunleg, 2005-2006 Some Rights Reserved ** 4 REM ******************************************************* 10 REM ** Opening screen 11 CLS : COLOUR 0,3,16 : PRINT CENTER$("* * * LOGO * * *") : COLOUR 0,16, : ? "" : ? "" 12 PRINT CENTER$("LOGO interpreter in NG-BASIC") 13 PRINT CENTER$("by Navaho Gunleg 2005-2006"):PRINT "" 14 PRINT TAB$(2);"Implemented commands:":PRINT "" 15 PRINT TAB$(3);"LEFT, RIGHT, UP, DOWN: Move cursor." 16 PRINT TAB$(3);"PEN: Pen DOWN or UP (draw or don't draw when moving)." 17 PRINT TAB$(3);"COLOUR: Set pen colour (1..15)" 18 PRINT TAB$(3);"CLOSE: Close 'polyline' (draw to point where pen went down)." 19 PRINT LINES$(2) : PRINT CENTER$("** Hit any key to continue. **") 20 DUMMY=GETKEY() 51 REM Initialization section: 55 LET X=WIDTH/2:LET Y=HEIGHT/2:LET FG=2:LET C=FG:REM Cursor position and colour 56 LET BG=16:REM Background colour 57 PX=X:PY=Y:SX=X:SY=Y 99 COLOUR ,,BG:CLS:? LINES$(ROWS-1) 100 REM ** Main Program ** 110 GOSUB 1000 120 GOSUB 1500 130 GOTO 110 1000 REM ** Draw Pointer routine ** 1010 COLOUR C,,BG 1015 CIRCLE X,Y,1 1019 RETURN 1200 REM ** Remove Pointer routine ** 1210 COLOUR BG:CIRCLE X,Y,2 1219 RETURN 1500 REM ** Request Input routine ** 1510 COLOUR 2,,:INPUT "> ";A$ 1515 A$=UPPER$(A$) 1520 REM Extract the command: 1525 FOR I=1 TO LEN(A$) 1530 IF MID$(A$,I,1)=" " THEN S=I-1:T=I+1 1535 NEXT I 1540 CMD$=MID$(A$,1,S):REM ? "CMD=*";CMD$;"*" 1541 ARG$=MID$(A$,T):ARG=VAL(ARG$):REM ? ARG$;"=";ARG 1542 IF CMD$="LEFT" OR CMD$="L" THEN GOSUB 2000 1543 IF CMD$="RIGHT" OR CMD$="R" THEN GOSUB 2050 1544 IF CMD$="UP" OR CMD$="U" THEN GOSUB 2100 1545 IF CMD$="DOWN" OR CMD$="D" THEN GOSUB 2150 1548 IF LEFT$(A$,2)="CL" THEN GOSUB 2300 1550 IF CMD$="PEN" THEN GOSUB 2200 1555 IF LEFT$(CMD$,3)="COL" THEN GOSUB 2250 1559 REM 20060217: Also accept EXIT to quit. 1560 IF A$="QUIT" OR A$="EXIT" THEN RUN MENU 1600 CMD$="":ARG=0:ARG$="" 1999 RETURN 2000 REM * MOVE LEFT * 2002 X=X-ARG:GOTO 4000 2050 REM * MOVE RIGHT * 2052 X=X+ARG:GOTO 4000 2100 REM * MOVE UP * 2102 Y=Y-ARG:GOTO 4000 2150 REM * MOVE DOWN * 2152 Y=Y+ARG:GOTO 4000 2200 REM ** PEN UP/DOWN ** 2210 IF ARG$="UP" THEN 2212 ELSE 2214 2212 C=BG:GOTO 2220 2214 C=FG:SX=X:SY=Y 2220 RETURN 2250 REM ** CHANGE COLOUR ** 2251 FG=ARG:C=FG 2252 RETURN 2300 REM ** CLOSE ** 2310 LINE PX,PY,SX,SY 2315 PX=SX:PY=SY 2320 RETURN 4000 REM ** Draw Line or just move if pen's not down. 4001 REM PRINT PX;",";PY;"-";X;",";Y 4002 IF C<>FG THEN 4010 4005 COLOUR C:LINE PX,PY,X,Y 4010 PX=X:PY=Y 4020 RETURN