10 REM . SAVE PALINDRO
20 REM
30 REM Redigera palindrom rader.
40 REM
50 REM av David Andersson
60 REM medlem 5201
70 REM
80 REM 1985-06-19
90 REM
100 REM INIT DATA
110 DIM A$(9%) : REM 9 ST RADER
120 FOR A%=1% TO 9% : A$(A%)=' ' : NEXT A%
130 A1%=1% : REM AKTUELL RAD
140 A2%=1% : REM AKTUELL POSITION I RAD
200 REM INIT SCREEN
210 ; CHR$(12%);' *** ABC80 Palindrom Editor ***'
220 FOR X%=1% TO 9%
230 ; CUR(X%*2%-1%,0%)'RAD'X%':';
240 GOSUB 900
250 NEXT X%
260 ; CUR(19%,0%);
270 ; 'Flytta cursorn .... <-,->,CTRL-W,A,S,Z'
280 ; 'Kopiera rad CTRL-K Radera tkn CTRL-D,U'
290 ; 'Ladda fil CTRL-L Spara p} fil CTRL-P'
300 REM MAIN LOOP
310 X%=A1%*2%-1% : Y%=A2% : IF Y%>LEN(A$(A1%)) Y%=LEN(A$(A1%))+1%
320 IF Y%>33% Y%=Y%-33% : X%=X%+1%
330 ; CUR(X%,Y%+6%);
340 GET G$ : G%=ASC(G$)
350 IF G%>95% G%=G%-32% : G$=CHR$(G%) : REM STORA BOKST[VER
360 X%=A1% : Y%=A2%
370 IF G%=12% GOSUB 1600 : GOTO 200
380 IF G%=16% GOSUB 1300 : GOTO 200
390 IF G%=11% GOSUB 1200 : GOTO 300
400 IF G%=17% A1%=1% : A2%=1%
410 IF G%=22% A2%=LEN(A$(A1%))+1%
420 IF G%=24% A2%=1%
430 IF G%=23% IF A1%>1% A1%=A1%-1%
440 IF G%=26% IF A1%<9% A1%=A1%+1%
450 IF G%=19% OR G%=9% GOSUB 800 : IF A2%1% A2%=A2%-1%
470 IF G%=13% A2%=1% : IF A1%<9% A1%=A1%+1% ELSE A1%=1%
480 IF G%=4% GOSUB 700
490 IF G%=21% IF A2%>1% A2%=A2%-1% : Y%=A2% : GOSUB 700
500 IF G%>=32% AND LEN(A$(A1%))<64% GOSUB 600
510 GOTO 300
600 REM
610 GOSUB 800
620 GOSUB 1000
630 Y%=LEN(A$(A1%))-A2%+1%
640 IF Y%<>A2% Y%=Y%-(Y%>A2%) : GOSUB 1000 : IF A2%>Y% A2%=A2%+1%
650 A2%=A2%+1%
660 GOSUB 900
670 GOTO 300
700 REM CTRL-D
710 GOSUB 800
720 IF A2%>LEN(A$(A1%)) RETURN
730 GOSUB 1100
740 Y%=LEN(A$(A1%))-A2%+1% : Y%=Y%-(A2%>Y%) : IF Y%<>A2% GOSUB 1100 : IF Y%LEN(A$(A1%)) A2%=LEN(A$(A1%))+1%
820 RETURN
900 REM VISA EN RAD
910 ; CUR(X%*2%-1%,7%);
920 IF LEN(A$(X%))<33% ; A$(X%)TAB(79%); : RETURN
930 ; LEFT$(A$(X%),33%) : ; CUR(X%*2%,7%)RIGHT$(A$(X%),34%)TAB(39%);
940 RETURN
1000 REM INSERT
1010 A$(X%)=LEFT$(A$(X%),Y%-1%)+G$+RIGHT$(A$(X%),Y%)
1020 RETURN
1100 REM DELETE
1110 A$(X%)=LEFT$(A$(X%),Y%-1%)+RIGHT$(A$(X%),Y%+1%)
1120 RETURN
1200 REM KOPIERA
1210 ; CUR(23%,0%)'Kopiera rad'A1%' till:';
1220 GET G$ : IF G$<'1' OR G$>'9' THEN ; CHR$(7%); : GOTO 1260
1230 X%=VAL(G$)
1240 A$(X%)=A$(A1%)
1250 GOSUB 900
1260 ; CUR(23%,0%)TAB(39%);
1270 RETURN
1300 REM SPARA TILL FIL
1310 FOR X%=1% TO 9% : IF A$(X%)=' ' NEXT X% : ; CUR(23%,0%)'Inga rader att spara'CHR$(7%); : GOTO 1530
1320 ; CUR(23%,0%)'Spara rader p} fil:';
1330 INPUT G$ : IF G$='' ; CHR$(7%) : RETURN
1340 ONERRORGOTO 1500
1350 PREPARE G$ ASFILE 1%
1360 FOR X%=1% TO 9%
1370 ; #1%,A$(X%)
1380 NEXT X%
1390 CLOSE 1%
1400 RETURN
1500 REM
1510 ; CUR(23%,0%)CHR$(7%)'ERR 'ERRCODE,
1520 CLOSE 1%
1530 FOR X%=0% TO 5000%
1540 IF PEEK(65013%)=0% NEXT X%
1550 POKE 65013%,0% : REM GL\M EV. TANGENTTRYCKNING
1560 RETURN
1600 REM LADDA FR]N FIL
1610 ; CUR(23%,0%)'Ladda rader fr}n fil:';
1620 INPUT G$ : IF G$='' ; CHR$(7%) : RETURN
1630 ONERRORGOTO 1700
1640 OPEN G$ ASFILE 1%
1650 ONERRORGOTO 1740
1660 FOR X%=1% TO 9%
1670 INPUTLINE #1%,G$
1680 A$(X%)=LEFT$(G$,LEN(G$)-2%)
1690 NEXT X% : GOTO 1720
1700 REM
1710 IF ERRCODE<>34% GOTO 1500
1720 CLOSE 1%
1730 RETURN
1740 REM
1750 GOTO 1500