1 ' Text editor
2 ' by Mark Bonshor
3 ' Amstrad Action     September 87
30 MODE 2: WINDOW 1,80,2,25: WINDOW #1,1,80,1,1
40 PAPER #1,1: PEN #1,0:PAPER 0:PEN 1:CLS: CLS#1: mapa=1
50 CLS: CLS#1: mapa=1: EVERY 100 GOSUB 580
60 DIM tex$(200): FOR f=1 TO 200: tex$(f)=SPACE$(80): NEXT
70 FOR f=1 TO 24: PRINT tex$(f);: NEXT: a=1: s=1: tex=1
80 PAPER 1: PEN 0: LOCATE a,s: PRINT MID$(tex$(tex),a,1);
90 a$=INKEY$: IF a$="" THEN 90
100 PAPER 0: PEN 1: LOCATE a,s: PRINT MID$(tex$(tex),a,1);
110 zx$=CHR$(241)+CHR$(240)+CHR$(127)+CHR$(13)+CHR$(16)+CHR$(27)
120 ON INSTR(zx$,a$) GOSUB 250,280,310,340,350,370
130 IF INKEY(1)=0 THEN a=a+1: IF a=81 THEN a=1: GOSUB 250
140 IF INKEY(8)=0 THEN a=a-1: IF a=0 THEN a=80: GOSUB 280
150 IF INKEY(27)=128 THEN GOTO 400
160 IF INKEY(60)=128 THEN GOTO 450
170 IF INKEY(36)=128 THEN GOTO 530
180 IF INKEY(68)=32 THEN GOSUB 590
190 IF INKEY(79)=32 THEN GOSUB 630: GOTO 80
200 IF INKEY(68)=0 THEN a=a+5: IF a>80 THEN a=80
210 IF INKEY(24)=32 THEN MID$(tex$),a,1)="#": LOCATE a,s: PRINT "#";: a=a+1: IF a=81 THEN a=1:GOSUB 250
220 IF tex>mapa THEN mapa=tex
230 IF ASC(a$)>31 AND ASC(a$)<126 THEN MID$(tex$(tex),a,1)=a$: LOCATE a,s: PRINT a$;: a=a+1: IF a=81 THEN a=1: GOSUB 250
240 GOTO 80
250 IF s<24 THEN s=s+1: text=tex+1: GOTO 270
260 IF s=24 AND tex<200 THEN tex=tex+1: LOCATE 1,24: prin CHR$(10): LOCATE 1,24: PRINT tex$(tex);
270 RETURN
280 IF s>1 THEN s=s-1: tex=tex-1: GOTO 300
290 IF s=1 AND tex>1 THEN tex=tex-1: LOCATE 1,1: PRINT CHR$(11): LOCATE 1,1: PRINT tex$(tex);
300 RETURN
310 a=a-1: IF a>0 THEN MID$(tex$(tex),a,1)=" "
320 IF a=0 THEN a=80: GOSUB 280: MID$(tex$(tex),a,1)=" "
330 RETURN
340 a=1: GOSUB 250: RETURN
350 c$=tex$(tex): z$=LEFT$(c$,a-1): x$=RIGHT$(c$,80-(a))
360 tex$(tex)=z$+x$+" ":LOCATE 1,s:PRINT tex$(tex));:RETURN
370 c$=tex$(tex): z$=LEFT$(c$,a-1): x$=RIGHT$(c$,81-a)
380 tex$(tex)=z$+" "+LEFT$(x$,LEN(x$)-1): LOCATE 1,s
390 PRINT tex$(tex);: RETURN
400 CLS: PRINT "NLQ ? Y/N"
410 v$=INKEY$: IF v$="" THEN GOTO 410
420 IF UPPER$(v$)="Y" THEN PRINT #8,CHR$(27)+"x"+CHR$(1);:PRINT #8,CHR$(27)+"R"+CHR$(3);
430 PRINT "OK": PRINT "Printing!": PRINT: FOR f=1 TO mapa
440 PRINT #8,tex$(f): PRINT tex$(f);: NEXT: CLS: GOTO 70
450 PRINT CHR$(13);"Preparing To Save"
460 FOR f=1 TO mapa: FOR g=1 TO 80
470 IF MID$(tex$(f),g,1)=" " THEN MID$(tex$(f),g,1)=CHR$(255)
480 NEXT: NEXT: PRINT"Saving..."
490 OPENOUT "text": PRINT #9,mapa: FOR f=1 TO mapa
500 PRINT #9,tex$(f): NEXT: CLOSEOUT: FOR f=1 TO mapa
510 FOR g=1 TO 80: IF MID$(tex$(f),g,1)=CHR$(255) THEN MID$(tex$(f),g,1)=" "
520 NEXT: NEXT: CLS: GOTO 70
530 PRINT CHR$(13);"Loading...":OPENIN"text":INPUT #9,mapa
540 FOR f=1 TO mapa: INPUT #9,tex$(f): NEXT: CLOSEIN
550 FOR f=1 TO mapal FOR g=1 TO 80
560 IF MID$(tex$(f),g,1)=CHR$(255) THEN MID$(tex$(f),g,1)=" "
570 NEXT: NEXT: CLS: GOTO 70
580 PRINT#1,"TEXT EDITOR: Column: ";a;" Line: ";tex:RETURN
590 c$=MID$(tex$(tex),a,1)
600 IF ASC(c$)>64 AND ASC(c$)<91 THEN MID$(tex$(tex),a,1)=LOWER$(MID$(tex$(tex),a,1)): GOTO 620
610 IF ASC(c$)>96 AND ASC(c$)<123 THEN MID$(tex$(tex),a,1)=UPPER$(MID$(tex$(tex),a,1))
620 RETURN
630 a$=tex$(tex): oa$=a$: FOR f=1 TO LEN(a$)
640 IF MID$(a$,f,1)="." THEN GOTO 800
650 NEXT
660 z=1: IF a$=SPACE$(80) THEN GOTO 800
670 IF MID$(a$,z,1)<>" " THEN GOTO 690
680 z=z+1: GOTO 670
690 z=z-1: a$=a$+SPACE$(z): a$=RIGHT$(a$,80): z=80: x=1
700 IF MID$(a$,z,1)<>" " THEN GOTO 720
710 z=z-1: x=x+1: GOTO 700
720 x=x-1: need=x: a$=LEFT$(a$,80-need): p=0: p=p+1
730 IF p=LEN(a$) THEN p=1
740 IF LEN(a$)=80 THEN GOTO 800
750 IF MID$(a$,p,1)=" " THEN GOSUB 780: p=p+1: IF p=LEN(a$) THEN p=1
760 IF INKEY(18)=0 THEN a$=oa$: got 800
770 GOTO 730
780 c$=LEFT$(a$,p): v$=RIGHT$(a$,LEN(a$)-p)
790 a$=c$+" "+v$: RETURN
800 tex$(tex)=a$: LOCATE 1,s: PRINT LEFT$(tex$(tex),80);: RETURN