200 IF K$ = CHR$(21) THEN HTAB 1 +( POS(0) +1) *( POS(0) <39 OR PEEK(37) <23): GOTO 170
210 IF K$ > < CHR$(27) THEN GOSUB 960: GOTO 170
220 REM ** ESCAPE MODE EDITING
230 F = PEEK(40) +256 * PEEK(41) + PEEK(36): REM MEMORY LOCATION OF CURSOR ON SCREEN
240 L = PEEK(F): POKE F,30: REM PUT "ESCAPE" CURSOR ON SCREEN
250 WAIT 49152,128: GET K$
260 POKE F,L: REM RESTORE FORMER CHARACTER AT CURSOR POSITION
270 IF K$ = "N" THEN : NORMAL :SPACE = 160: GOTO 170
280 IF K$ = "I" THEN : INVERSE :SPACE = 32: GOTO 170
290 IF K$ = "F" THEN : FLASH :SPACE = 96: GOTO 170
300 IF K$ = "(" THEN K$ = CHR$(91): GOSUB 960: GOTO 220
310 IF K$ = "/" THEN K$ = CHR$(92): GOSUB 960: GOTO 220
320 IF K$ = "-" THEN K$ = CHR$(95): GOSUB 960: GOTO 220
330 IF K$ = "<" OR K$ = "," THEN CALL -998: GOTO 220
340 IF K$ = ">" OR K$ = "." THEN PRINT CHR$(10 *( PEEK(37) <23));: GOTO 220
350 IF K$ = CHR$(8) THEN PRINT K$;: GOTO 220
360 IF K$ = CHR$(21) THEN HTAB 1 +( POS(0) +1) *( POS(0) <39 OR PEEK(37) <23): GOTO 220
370 IF K$ = "R" THEN RESTORE : FOR N = 0 TO PEEK(37): READ V: NEXT : FOR N = 38 TO 0 STEP -1: POKE V +N +1, PEEK(V +N): NEXT : POKE V,SPACE: GOTO 220
380 IF K$ = "L" THEN RESTORE : FOR N = 0 TO PEEK(37): READ V: NEXT : FOR N = 0 TO 38: POKE V +N, PEEK(V +N +1): NEXT : POKE V +39,SPACE: GOTO 220
390 IF K$ = "U" THEN IF PEEK(37) >0 THEN RESTORE : FOR N = 0 TO PEEK(37) -1: READ V: NEXT : READ V1: FOR N = 0 TO 39: POKE V +N, PEEK(V1 +N): POKE V1 +N,SPACE: NEXT : GOTO 220
400 IF K$ = "D" THEN IF PEEK(37) <23 THEN RESTORE : FOR N = 0 TO PEEK(37): READ V: NEXT : READ V1: FOR N = 0 TO 39: POKE V1 +N, PEEK(V +N): POKE V +N,SPACE: NEXT : GOTO 220
800 IF SPACE THEN IF MODE > <2 THEN GOSUB 1160: GOSUB 1020:K$ = K$ +H$ + STR$(H +1):CM = 3:SPACE = 0
810 IF SPACE THEN GOSUB 1060: GOSUB 1130: FOR N = 1 TO SPACE:K$ = K$ +" ": NEXT :SPACE = 0
820 IF LEN(K$) >200 THEN GOSUB 1160: GOSUB 1200
830 GOSUB 1060
840 CHR = FN CHR( PEEK(V +H))
850 IF CHR = 34 THEN ON Q GOSUB 1130:K$ = K$ +CQ$
860 IF CHR > <34 THEN ON NOT Q GOSUB 1130:K$ = K$ + CHR$(CHR)
870 NEXT H: IF L = 39 OR V1 = LAST THEN GOSUB 1160
880 GOSUB 1260
890 NEXT V1
900 IF PEEK(2039) > <160 THEN GOSUB 1020:K$ = K$ +"POKE2039," + STR$( PEEK(2039)): GOSUB 1260: REM POKE LAST SCREEN SPACE INSTEAD OF PRINTING IT
910 IF MODE <2 THEN GOSUB 1020:K$ = K$ +N$: GOSUB 1260
920 PRINT CHR$(4)"CLOSE DISP."F$
930 HOME : END
940 DATA 1024,1152,1280,1408,1536,1664,1792,1920,1064,1192,1320,1448,1576,1704,1832,1960,1104,1232,1360,1488,1616,1744,1872,2000: REM MEMORY LOCATION OF FIRST BYTE OF EACH SCREEN LINE
950 REM ** DISPLAY EDITOR SUBROUTINES
960 REM ** PRINT K$; ON SCREEN
970 IF K$ = CHR$(13) THEN VTAB PEEK(37) +( PEEK(37) <23): PRINT : REM DON'T LET SCREEN SCROLL AFTER PRINTING LAST LINE
980 IF PEEK(37) = 23 THEN IF POS(0) = 39 THEN POKE 35,25: PRINT K$;: VTAB PEEK(37): POKE 35,24:K$ = "": REM DON'T LET SCREEN SCROLL WHEN PRINTING LAST SPACE ON SCREEN
990 IF K$ > = " " THEN PRINT K$;
1000 RETURN
1010 REM ** CODE GENERATOR SUBROUTINES
1020 REM ** ENTER MODE CM = 1,"ACCEPT COMMAND"
1030 IF CM = 2 THEN GOSUB 1100: REM THIS SETS CM = 3
1040 IF CM = 3 THEN K$ = K$ +":":CM = 1
1050 RETURN
1060 REM ** ENTER MODE CM = 2,"ACCEPT PARAMETER"
1070 IF CM = 3 THEN GOSUB 1020: REM THIS SETS CM = 1
1080 IF CM = 1 THEN K$ = K$ +P$:CM = 2:Q = 0
1090 RETURN
1100 REM ** ENTER MODE CM = 3,"ACCEPT DELIMITER"(CM = 1 ALSO OK.)
1110 IF CM = 2 THEN ON Q GOSUB 1130:CM = 3
1120 RETURN
1130 REM ** PRINT A QUOTATION MARK
1140 K$ = K$ + CHR$(34):Q = NOT Q
1150 RETURN
1160 REM ** ADD ";" IF A PRINT STATEMENT
1170 GOSUB 1100
1180 IF RIGHT$(" " +K$,1) = CHR$(34) OR RIGHT$(" " +K$,10) = CQ$ THEN K$ = K$ +";"
1190 RETURN
1200 REM ** APPEND COMMAND K$ TO LINE$
1210 GOSUB 1100
1220 IF LINE$ > <"" THEN IF LEN(LINE$) + LEN(K$) >200 THEN LINE$ = LINE$ +":REMCONT'D...": GOSUB 1280
1230 IF K$ > <"" THEN IF LINE$ > <"" THEN LINE$ = LINE$ +":"
1240 IF K$ > <"" THEN LINE$ = LINE$ +K$:K$ = "":CM = 1
1250 RETURN
1260 REM ** APPEND K$ TO LINE$ AND ISSUE A LINE
1270 GOSUB 1200: REM AND FALL THROUGH TO . . .
1280 REM ** ISSUE A BASIC LINE
1290 IF LINE$ > <"" THEN PRINT LNUM" "LINE$:LNUM = LNUM +INC