1 REM Ins{nd av Kristoffer Eriksson SYSOP <5357> 1986-12-16 03.09.48 (DUMP) 100 REM SCROLLED 1.02 110 REM - Editor med sidledes scroll 120 REM F|r ABC80, ABC800,802,806 130 REM Av Kristoffer Eriksson <5357> 140 REM Fri kopiering endast f|r 150 REM ickekommersiellt bruk 160 REM 170 REM 1.00 861124 <5357> Original 180 REM 1.02 861216 <5357>,<5258> ABC80-anpassning 190 REM 200 REM Parametrarna anpassar sig efter 210 REM maskintyp, radl{ngd och minne. 220 REM 290 REM Trimbara parametrar 300 V$="SCROLLED Ver 1.02" 310 B$=CHR$(28%,13%,8%,9%)+CHR$(1%,19%,17%,5%)+CHR$(23%,26%,20%,2%)+CHR$(22%,18%,4%,6%) 320 B$=B$+CHR$(21%,14%) : REM Tangenter 330 REM Stopp, Return, V{nster, H|ger, V{nster2, H|ger2, F|rst, Sist, Upp, 340 REM Ned, Topp, Botten, Insertmode, Radera, Dela, Sammanfoga, Sidupp, Sidned 350 K3%=120% : REM Max radl{ngd i minnet 360 R2%=22% : REM H|gsta textsk{rmrad 370 M%=23% : REM Meddelanderad 380 C%=-1% : REM Insert/\verskrivn -1/0 390 A%=PEEK(27%)=195% : REM ABC80? 400 IF A% THEN K2%=PEEK(472%) ELSE K2%=PEEK(65364%) : REM Radl{ngd p} sk{rm 410 IF A% THEN R3%=PEEK(65064%)-PEEK(65057%)-3% ELSE R3%=PEEK(65350%)-PEEK(65291%)-4% 420 R3%=SWAP%(R3%)/(K3%+6%)-1% : REM Max rad 430 REM  440 REM Initiering 450 \%=0% : REM Rad |verst p} sk{rm 460 V%=1% : REM Kolumn till v{nster p} sk{rm 470 R%=0% : REM Aktuell minnesrad 480 K%=1% : REM Aktuell kolumn 490 L%=-1% : REM H|gsta anv{nda rad 500 [%=0% : REM [ndrad fil 510 M1%=K2%-10% : M2%=K2%-6% : REM Pos f|r rad o kolumn p} rad M 520 DIM T$(R3%)=K3% : REM Text 530 DIM F$=16%,F2$=16% : REM Filnamn 540 DIM G$=1% : REM Tangent 550 GOSUB 600 560 ; CUR(22%,0%); 570 END 580 REM  590 REM MAIN 600 GOSUB 800 : REM Infosida 610 GOSUB 1000 : REM Fil in 620 IF F$="." THEN RETURN 630 FOR I%=L%+1% TO R3% : T$(I%)=SPACE$(K3%) : NEXT I% 640 FOR X3%=0% TO 0% STEP 0% 650 GOSUB 1700 : REM Visa sida 660 GOSUB 2000 : REM Editera 670 GOSUB 800 : REM Infosida 680 GOSUB 1300 : REM Spara fil 690 IF G$<>"F" THEN RETURN 700 NEXT X3% 780 REM  790 REM Infosida 800 ; CHR$(12%)V$ 810 ; CUR(12%,0%); 820 ; "<-- V{nster --> H|ger" 830 ; "CTRL-A V{nster(2) CTRL-S H|ger(2)" 840 ; "CTRL-Q Radb|rjan CTRL-E Radslut" 850 ; "CTRL-W Upp CTRL-Z Ned" 855 ; "CTRL-U Sida upp CTRL-N Sida ned" 860 ; "CTRL-D Dela rad CTRL-F Sammanfoga rad" 870 ; "CTRL-R Radera" 880 ; "CTRL-V V{xla inskjutning/|verskrivning" 890 ; "CTRL-\ Sluta" 900 RETURN 980 REM  990 REM L{s in fil 1000 FOR X%=0% TO 0% STEP 0% 1010 ; CUR(3%,0%)SPACE$(K2%)CUR(3%,0%)'Filnamn ("."=Slut)'; 1020 ONERRORGOTO 1010 : INPUT F$ 1030 ; CUR(M%,0%)SPACE$(K2%-1%)CUR(M%,0%); 1040 IF F$="" OR F$="." THEN L%=-1% : RETURN 1050 ONERRORGOTO 1150 : OPEN F$ ASFILE 1% 1060 FOR I%=0% TO R3% 1070 INPUTLINE #1%,T$(I%) 1080 T$(I%)=LEFT$(T$(I%),LEN(T$(I%))-2%)+SPACE$(K3%+2%-LEN(T$(I%))) 1090 NEXT I% 1100 ; CHR$(7%)"Fler {n "R3%" rader!"; 1110 L%=R3% 1120 CLOSE 1% 1130 RETURN 1140 REM L{sfel 1150 L%=I%-1% 1160 IF ERRCODE=34% THEN CLOSE 1% : ; F$": "L%+1%" rader."; : RETURN 1170 IF ERRCODE=21% THEN ; "Ny fil: "F$; : L%=-1% : RETURN 1180 ; F$": Felkod "ERRCODECHR$(7%); 1190 ONERRORGOTO 1200 : CLOSE 1% 1200 IF I%>0% THEN RETURN 1210 NEXT X% 1280 REM  1290 REM Spara fil 1300 GOSUB 5000 1310 IF NOT [% THEN ; CUR(3%,0%)"Inga {ndringar." : G$="N" : RETURN 1320 FOR X%=0% TO 0% STEP 0% 1330 FOR X2%=0% TO 0% STEP 0% 1340 ; CUR(3%,0%)SPACE$(40%)CUR(5%,0%)SPACE$(80%); 1350 ; CUR(3%,0%)"Spara? J(a), N(ej), F(orts{tt editera): ";CHR$(8%); 1360 GET G$ 1370 G$=CHR$(ASC(G$) AND 223%) 1380 IF G$="N" OR G$="F" THEN ; G$ : RETURN 1390 IF G$<>"J" THEN NEXT X2% 1400 ; G$ 1410 ; CUR(5%,0%)'Filnamn'; : IF LEN(F$) THEN ; ' ("."='F$')'; 1420 ONERRORGOTO 1410 : INPUT F2$ 1430 IF F2$="." THEN F2$=F$ 1440 ; CUR(M%,0%)SPACE$(K2%-1%)CUR(M%,0%); 1450 ONERRORGOTO 1550 : PREPARE F2$ ASFILE 1% 1460 FOR I%=0% TO L% 1470 GOSUB 5100 : REM Radl{ngd 1480 ; #1%LEFT$(T$(I%),N%) 1490 NEXT I% 1500 CLOSE 1% 1510 [%=0% : F$=F2$ 1520 ; CUR(8%,0%)L%+1%" rader skrivna." 1530 RETURN 1540 REM Skrivfel 1550 ; F2$": ";CHR$(7%); 1560 IF ERRCODE=21% THEN ; "Felaktigt filnamn"; ELSE ; "Felkod "ERRCODE; 1570 ONERRORGOTO 1580 : CLOSE 1% 1580 NEXT X% 1680 REM  1690 REM Visa sida 1700 FOR I%=0% TO R2% 1710 IF I%+\%<=R3% ; CUR(I%,0%)MID$(T$(\%+I%),V%,K2%); ELSE ; CUR(I%,0%)SPACE$(K2%); 1720 NEXT I% 1730 RETURN 1780 REM  1790 REM Visa rad I 1800 IF I%<=R3% THEN ; CUR(I%-\%,0%)MID$(T$(I%),V%,K2%); ELSE ; CUR(I%-\%,0%)SPACE$(K2%); 1810 RETURN 1980 REM  1990 REM Editera 2000 ; CUR(M%,M1%)NUM$(R%+1%)" "; 2010 S%=0% 2020 FOR X%=0% TO 0% STEP 0% 2030 ; CUR(M%,M2%)NUM$(K%)" "CUR(R%-\%,K%-V%); 2040 GET G$ 2050 G%=INSTR(1%,B$,G$) 2060 ON G%+1% GOSUB 4000,2200,2290,2410,2610,2400,2600,2800,2900,2500,2700,3000,3100,3200,3300,3400,3600,3800,3900 2070 IF S% THEN GOSUB 1700 : S%=0% 2080 NEXT X% 2090 RETURN 2190 REM Stop 2200 X%=1% : RETURN 2290 REM Return 2300 K%=1% 2310 IF K%\%+R2% THEN \%=R%-R2% : S%=-1% 2330 ; CUR(M%,M1%)NUM$(R%+1%)" "CUR(M%,M2%)" "; 2340 RETURN 2390 REM V{nster 2400 K%=K%-1% 2410 K%=K%-1% 2420 IF K%>=V% THEN RETURN 2430 IF K%>=1% THEN V%=K% : S%=-1% : RETURN 2440 K%=K3%+K% : IF V%<=K3%-K2% THEN V%=K3%-K2%+1% : S%=-1% 2490 REM Upp 2500 IF R%>0% THEN R%=R%-1% ELSE RETURN 2510 IF R%<\% THEN \%=R% : S%=-1% 2520 ; CUR(M%,M1%)NUM$(R%+1%)" "; 2530 RETURN 2590 REM H|ger 2600 K%=K%+1% 2610 K%=K%+1% 2620 IF K%\%+R2% THEN \%=R%-R2% : S%=-1% 2720 ; CUR(M%,M1%)NUM$(R%+1%)" "; 2730 RETURN 2790 REM Radens b|rjan 2800 IF K%=V% THEN K%=1% ELSE K%=V% : RETURN 2810 IF K%K3% THEN K%=K3% 2920 IF K%>=V%+K2% THEN V%=K%-K2%+1% : S%=-1% 2930 RETURN 2990 REM F|rsta raden 3000 R%=0% : K%=1% 3010 IF R%<\% THEN \%=R% : S%=-1% 3020 IF K%\%+R2% THEN \%=R%-R2% : S%=-1% 3120 IF R%<\% THEN \%=R%-(1% AND R%>0%) : S%=-1% 3130 IF K%=R3% THEN RETURN 3410 GOSUB 5000 3420 IF L%>=R3% ; CUR(M%,0%)SPACE$(M1%)CUR(M%,0%)"Sista raden ej tom."; : RETURN 3430 FOR I%=L% TO R%+1% STEP -1% 3440 T$(I%+1%)=T$(I%) 3450 NEXT I% 3460 T$(R%+1%)=RIGHT$(T$(R%),K%)+SPACE$(K%-1%) 3470 T$(R%)=LEFT$(T$(R%),K%-1%)+SPACE$(K3%-K%+1%) 3480 [%=-1% : S%=-1% : L%=L%+1% 3490 RETURN 3590 REM Foga samman rader 3600 IF R%=R3% THEN RETURN 3610 GOSUB 5000 3620 I%=R% : GOSUB 5100 3630 IF N%>=K3% OR R%>=L% THEN RETURN 3640 T$(R%)=LEFT$(T$(R%),N%)+LEFT$(T$(R%+1%),K3%-N%) 3650 T$(R%+1%)=RIGHT$(T$(R%+1%),K3%-N%+1%)+SPACE$(K3%-N%) 3660 K%=N%+(1% AND N%=V%+K2% THEN V%=K%-K2%+1% : S%=-1% 3690 ; CUR(M%,M2%)" "; 3700 IF T$(R%+1%)<>SPACE$(K3%) IF S% THEN RETURN ELSE I%=R% : GOSUB 1800 : I%=R%+1% : GOSUB 1800 : RETURN 3710 FOR I%=R%+1% TO L%-1% 3720 T$(I%)=T$(I%+1%) 3730 NEXT I% 3740 T$(L%)=SPACE$(K3%) 3750 [%=-1% : S%=-1% : L%=L%-1% 3760 RETURN 3790 REM Sida upp 3800 IF \% THEN \%=\%-R2%+1% : R%=R%-R2%+1% : S%=-1% ELSE R%=0% 3810 IF \%<0% THEN \%=0% : R%=0% 3820 ; CUR(M%,M1%)NUM$(R%+1%)" "; 3830 RETURN 3890 REM Sida ned 3900 R%=R%+R2%-1% : IF R%>R3% THEN R%=R3% 3910 IF \%+R2%<=R3% THEN \%=\%+R2%-1% : S%=-1% : IF \%+R2%>R3% THEN \%=R3%-R2% 3930 ; CUR(M%,M1%)NUM$(R%+1%); 3940 RETURN 3990 REM Text 4000 IF G$<" " OR ASC(G$)>127% THEN RETURN 4010 IF [%=0% THEN IF C% THEN [%=-1% ELSE IF G$<>MID$(T$(R%),K%,1%) THEN [%=-1% 4020 IF R%>L% THEN L%=R% 4030 T$(R%)=LEFT$(T$(R%),K%-1%)+G$+MID$(T$(R%),K%+1%+C%,K3%-K%) 4040 ; G$; 4050 IF C% THEN ; MID$(T$(R%),K%+1%,K2%-K%+V%-1%); 4060 IF K%