1 REM Ins{nd av Kristoffer Eriksson <5357> 1986-05-10 21.57.42 11 ! +----------------------------------------------+ 12 ! ! ORDTR[D Ver 1.00 - Editering med textniv}er. ! 13 ! ! F|r ABC800-serien. ! 14 ! ! Av Kristoffer Eriksson 1986. ! 15 ! ! F}r kopieras fritt i ickekomersiella syften. ! 16 ! +----------------------------------------------+ 17 ! Ver / Datum / Sign / Kommentar 18 ! 1.00 / 86-05-07 / <5357> Kristoffer Eriksson / 19 ! 20 ! Detta {r ett f|rs|k till en ordbehandlare f|r "strukturerad text". 21 ! Inga garantier f|r korrekt funktion ges, troligen finns buggar kvar. 22 ! Utskrift p} skrivare g|rs med s{rskilt utskriftsprogram eller genom 23 ! att spara texten p} filen "PR:". 24 ! Ingen manual - du f}r prova dig fram. Dock kan s{gas att "+" i b|rjan 25 ! av en rad betyder att det finns minst en rad p} l{gre niv} som h|r till, 26 ! medan "-" betyder motsatsen. F|r att skriva in l{gre niv}er beh|ver du 27 ! bara skriva n}gra extra blanka f|rst p} raden. 28 ! 170 INTEGER : EXTEND 180 ! 190 Ver$="1.00 1986-05-07" 200 Z=FNInit 210 Z=FNHuvudmeny 220 ; CUR(22,0); 230 END 240 ! 250 DEF FNInit 260 Maxrad=100 270 DIM Rad$(0:Maxrad)=Wid,Aktiv$=Maxrad+1 280 Aktiv$=STRING$(Maxrad+1,0) 290 Wid=PEEK(SYS(10)+84) 300 Abc=800 : IF PEEK(39)=4 THEN Abc=806 ELSE IF PEEK(39)=3 THEN Abc=802 310 Maxsrad=21-(Abc=806) 320 Inforad=Maxsrad+2 330 Fil{ndrat=0 340 Textslut=0 350 RETURN 0 360 FNEND 370 ! 380 ! 390 DEF FNCaps$(S$) LOCAL P,T$=160 400 T$=S$ 410 WHILE P="`" THEN MID$(T$,P,1)=CHR$(ASCII(MID$(T$,P,1))-32) 430 WEND 440 RETURN T$ 450 FNEND 460 ! 470 DEF FNTrailsp$(S$) LOCAL P 480 P=LEN(S$) : WHILE P>0 490 IF MID$(S$,P,1)=" " THEN P=P-1 : WEND 500 RETURN LEFT$(S$,P) 510 FNEND 520 ! 530 DEF FNSkipsp(S$) LOCAL P 540 WHILE P6 THEN RETURN Rad$ 730 IF Keyf THEN ON Keyf GOSUB 840,850,870,880,900,990 : GOTO 820 740 WHILE G$>=" " AND ASCII(G$)<127 750 [ndrat=-1 760 IF LEN(Rad$)<=Cpos THEN Rad$=Rad$+SPACE$(Cpos-LEN(Rad$))+G$ : ; G$; : GOTO 790 770 IF LEN(Rad$)>=Max THEN Rad$=LEFT$(Rad$,Cpos)+G$+MID$(Rad$,Cpos+1,Max-Cpos-1) ELSE Rad$=LEFT$(Rad$,Cpos)+G$+RIGHT$(Rad$,Cpos+1) 780 ; RIGHT$(Rad$,Cpos+1); 790 Cpos=Cpos+1 800 Keyf=4 810 IF 0 WEND 820 IF Cpos<0 OR Cpos>=Max THEN RETURN Rad$ 830 WEND 840 Cpos=0 : RETURN 850 Cpos=LEN(Rad$) : IF Cpos>=Max THEN Cpos=Max-1 860 RETURN 870 Cpos=Cpos-1 : RETURN 880 Cpos=Cpos+1 : RETURN 890 ! --- DEL, PF8 900 IF Cpos>LEN(Rad$) OR (Cpos=0 AND LEN(Rad$)=0) THEN Cpos=Cpos-1 : RETURN 910 [ndrat=-1 920 WHILE Cpos=LEN(Rad$) 930 Rad$=LEFT$(Rad$,LEN(Rad$)-1) : ; CHR$(8,32); 940 Cpos=Cpos-1 : RETURN 950 WEND 960 Rad$=LEFT$(Rad$,Cpos)+RIGHT$(Rad$,Cpos+2) 970 ; RIGHT$(Rad$,Cpos+1) " "; : RETURN 980 ! --- CE 990 Rad$="" : ; CUR(Crad,Cpos0) SPACE$(Max); : [ndrat=-1 : RETURN 1000 FNEND 1010 ! 1020 DEF FNHuvudmeny LOCAL Edfil$=16,Sparfil$=16,A$=1 1030 WHILE 1 1040 ; CHR$(12); 1050 ; "Ord-Tr{det Ver " Ver$ " - Av Kristoffer Eriksson." 1060 IF Wid>60 THEN ; CUR(0,Wid-9) RIGHT$(TIME$,12) 1070 ; STRING$(Wid,ASCII("-")) CUR(3,0); 1080 IF Fil{ndrat THEN ; "Texten ej sparad p} fil." ELSE ; SPACE$(25) 1090 ; CUR(10,7) "Spara p} fil: ";Sparfil$ 1100 ; CUR(11,7) "H{mta in fil: ";Edfil$ 1110 ; CUR(12,8) "Avsluta J/N: N" 1120 ; CUR(15,0); 1130 ; "PF1/STOP = Avsluta editering, PF8/DEL = Radera tecken, CE = T|m rad" 1140 ; "PF3 = Visa n{rmaste l{gre niv}, SH-PF3 = Upph{v PF3" 1150 ; "PF4 = Kl{mm in ny rad, SH-PF4 = Ta bort rad, PF5 = Upp, PF7 = Ned" 1160 ; "PF8 = Radera tecken, CE = T|m rad" 1170 ; "CTRL-A = Till radens b|rjan, CTRL-E = Till radens slut" 1180 Cpos=0 1190 WHILE Fil{ndrat 1200 IF Cpos<0 THEN Cpos=0 1210 Sparfil$=FNCaps$(FNTrailsp$(FNInline$(Sparfil$,10,21,16))) 1220 IF Keyf=9 THEN 1360 1230 IF Keyf<>10 AND Keyf<>8 AND Keyf<>4 THEN 1200 ! CR, PF7, --> 1240 IF Keyf=4 OR Keyf=0 THEN Cpos=0 ! --> 1250 WHILE Keyf=10 AND LEN(Sparfil$) ! CR 1260 IF FNSparafil(Sparfil$) THEN 1200 1270 ; CUR(3,0) SPACE$(25) 1280 Cpos=0 1290 IF 0 WEND 1300 IF 0 WEND 1310 WHILE 1 1320 Edfil$=FNCaps$(FNTrailsp$(FNInline$(Edfil$,11,21,16))) 1330 IF Keyf=7 THEN 1200 ! PF5 1340 IF Keyf=3 OR Keyf=5 THEN Cpos=LEN(Sparfil$)+(LEN(Sparfil$)=16) : GOTO 1200 1350 WHILE Keyf=8 OR Keyf=4 OR Keyf=0 OR Keyf=9 ! PF7, -->, PF1 1360 A$="N" 1370 Cpos=0 : A$=FNCaps$(FNInline$(A$,12,21,1)) 1380 IF Keyf=7 THEN 1320 1390 IF Keyf=3 OR Keyf=5 THEN Cpos=LEN(Edfil$)+(LEN(Edfil$)=16) : GOTO 1320 1400 IF Keyf<>10 THEN 1370 1410 IF A$="J" THEN RETURN 0 1420 Keyf=8 1430 WEND 1440 IF Keyf<>10 WEND 1450 IF Edfil$<>Sparfil$ AND LEN(Edfil$) THEN IF FNH{mtafil(Edfil$) THEN 1320 1460 IF LEN(Edfil$) THEN Sparfil$=Edfil$ 1470 IF Edfil$="TOM" THEN Edfil$="" : Sparfil$="" 1480 Z=FNTr{dedit 1490 WEND 1500 FNEND 1510 ! 1520 DEF FNTr{dedit LOCAL Rad0,Rad,Frad,Srad,I,Niv},Nniv} 1530 ; CUR(Inforad,0) "PF1 = Filer, (SH)PF3 = Underniv}er, (SH)PF4 = Ny rad (radera rad)"; 1540 Z=FNVisask{rm(Rad0) 1550 Cpos=0 1560 WHILE 1 1570 IF Rad>0 THEN Frad=FNF|raktiv(Rad) : Niv}=FNNiv}(Frad) ELSE Frad=-2 : Niv}=1 1580 IF LEN(Rad$(Rad))=0 THEN Cpos=Niv}-1 1590 Rad$(Rad)=FNTrailsp$(FNInline$(Rad$(Rad),Srad,0,Wid)) 1600 WHILE LEN(Rad$(Rad))=0 1610 IF Rad=Textslut-1 MID$(Aktiv$,Rad+1,1)=CHR$(0) : Textslut=Textslut-1 : GOTO 1820 1620 IF Rad=Textslut THEN 1820 1630 Rad$(Rad)=SPACE$(Niv}) : [ndrat=-1 1640 WEND 1650 IF NOT [ndrat THEN 1820 1660 Fil{ndrat=-1 1670 ! --- Kolla och ev justera indragning och plus/minus-markering 1680 IF Rad=Textslut THEN MID$(Aktiv$,Rad+1,1)=CHR$(1) : Textslut=Textslut+1 1690 Nniv}=FNSkipsp(Rad$(Rad)) 1700 IF (Nniv} AND 1)=0 THEN Rad$(Rad)=RIGHT$(Rad$(Rad),2) : Nniv}=Nniv}-1 1710 IF Nniv}>Niv}+2 THEN Rad$(Rad)=RIGHT$(Rad$(Rad),Nniv}-Niv}-1) : Nniv}=Niv}+2 1720 WHILE INSTR(1,"+-",MID$(Rad$(Rad),Nniv},1))=0 1730 IF LEN(Rad$(Rad))+2>Wid THEN Rad$(Rad)=LEFT$(" "+Rad$(Rad),80) ELSE Rad$(Rad)=" "+Rad$(Rad) 1740 IF 0 WEND 1750 WHILE Frad=Rad-1 1760 Z=FNPlusminus(Frad,Niv},Nniv}) 1770 IF Frad>=Rad0 AND ASCII(MID$(Aktiv$,Frad+1,1)) THEN ; CUR(Srad-1,0) Rad$(Frad); 1780 IF 0 WEND 1790 IF Rad>=Textslut-1 THEN I=0 ELSE I=FNNiv}(Rad+1) 1800 Z=FNPlusminus(Rad,Nniv},I) 1810 ; CUR(Srad,0) Rad$(Rad) SPACE$(Wid-LEN(Rad$(Rad))); 1820 ! 1830 IF Keyf=9 THEN RETURN 0 1840 ON Keyf GOSUB 1880,1960,1880,1960,1880,1930,1880,1970,1850,1960,1930,2050,2090,2190,2310 1850 WEND 1860 ! 1870 ! --- <--, PF5, PF8, Bak}t 1880 IF Rad<=0 THEN 1920 1890 Srad=Srad-1 1900 Rad=FNF|raktiv(Rad) 1910 IF Rad=Wid THEN Cpos=Wid-1 1930 RETURN 1940 ! 1950 ! --- -->, PF7, Fram}t 1960 Cpos=0 1970 IF Rad>=Textslut OR Rad>=Maxrad THEN RETURN 1980 I=Rad 1990 Rad=FNN{staktiv(Rad) : IF Rad=I THEN Rad=Textslut 2000 Srad=Srad+1 2010 IF Srad>Maxsrad THEN Rad0=FNN{staktiv(Rad0) : Srad=Maxsrad : Z=FNVisask{rm(Rad0) 2020 RETURN 2030 ! 2040 ! --- PF3 \ppna underniv} 2050 I=1 2060 GOTO 2110 2070 ! 2080 ! --- SHPF3 St{ng underniv} 2090 I=0 2100 ! 2110 IF Rad>=Textslut-1 THEN ; CHR$(7); : RETURN 2120 IF FNNiv}(Rad+1)<=FNNiv}(Rad) THEN ; CHR$(7); : RETURN 2130 IF ASCII(MID$(Aktiv$,Rad+2,1))=I THEN RETURN 2140 Z=FNAktiveraniv}(Rad+1,I) 2150 Z=FNVisask{rm(Rad0) 2160 RETURN 2170 ! 2180 ! --- PF4 Insert line 2190 IF Textslut>Maxrad OR Rad=Textslut THEN ; CHR$(7); : RETURN 2200 I=Maxrad : WHILE I>Rad 2210 Rad$(I)=Rad$(I-1) 2220 I=I-1 : WEND 2230 Rad$(Rad)="" 2240 Aktiv$=LEFT$(LEFT$(Aktiv$,Rad)+CHR$(1)+RIGHT$(Aktiv$,Rad+1),Maxrad+1) 2250 Textslut=Textslut+1 2260 Z=FNVisask{rm(Rad0) 2270 Fil{ndrat=-1 2280 RETURN 2290 ! 2300 ! --- SHPF4 Delete line 2310 IF Rad>=Textslut THEN RETURN 2320 I=Rad : WHILE INiv}+2 THEN Z=FNV{nsterjust(Rad,Niv}) 2400 IF Rad>0 THEN Z=FNPlusminus(Rad-1,Niv},Nniv}) 2410 Z=FNVisask{rm(Rad0) 2420 Fil{ndrat=-1 2430 RETURN 2440 FNEND 2450 ! 2460 DEF FNVisask{rm(Rad0) LOCAL Rad,Srad 2470 ; CUR(0,0); 2480 Rad=Rad0 2490 WHILE Rad0 2630 IF ASCII(MID$(Aktiv$,Rad,1)) THEN RETURN Rad-1 2640 Rad=Rad-1 2650 WEND 2660 RETURN Rad0 2670 FNEND 2680 ! 2690 DEF FNN{staktiv(Rad0) LOCAL Rad 2700 Rad=INSTR(Rad0+2,Aktiv$,CHR$(1)) 2710 IF Rad THEN RETURN Rad-1 ELSE RETURN Rad0 2720 FNEND 2730 ! 2740 DEF FNNiv}(Rad) LOCAL P,M 2750 P=INSTR(1,Rad$(Rad),"+") 2760 M=INSTR(1,Rad$(Rad),"-") 2770 IF P AND PSPACE$(Niv}) THEN RETURN 0 2850 Rad$(Rad)=RIGHT$(Rad$(Rad),3) 2860 Rad=Rad+1 2870 WEND 2880 RETURN 0 2890 FNEND 2900 ! 2910 DEF FNPlusminus(Rad,Niv},Niv}2) 2920 MID$(Rad$(Rad),Niv},1)=MID$("+-",1-(Niv}2<=Niv}),1) 2930 RETURN 0 2940 FNEND 2950 ! 2960 DEF FNAktiveraniv}(Rad0,Aktiv) LOCAL Rad,Niv} 2970 Niv}=FNNiv}(Rad0) 2980 Rad=Rad0 2990 WHILE RadSPACE$(Niv}-1) THEN RETURN 0 3020 IF MID$(Rad$(Rad),Niv},1)<>" " OR Aktiv=0 THEN MID$(Aktiv$,Rad+1,1)=CHR$(Aktiv) 3030 Rad=Rad+1 3040 WEND 3050 RETURN 0 3060 FNEND 3070 ! 3080 DEF FNH{mtafil(Fil$) LOCAL Rad,I$=160 3090 ; CUR(21,0) SPACE$(3*Wid); 3100 ON ERROR GOTO 3310 3110 OPEN Fil$ AS FILE 1 3120 Fil{ndrat=0 3130 WHILE Rad<=Maxrad 3140 INPUT LINE #1 I$ 3150 I$=FNTrailsp$(LEFT$(I$,LEN(I$)-2)) 3160 WHILE LEN(I$)>Wid 3170 Rad$(Rad)=LEFT$(I$,Wid) 3180 I$=SPACE$(FNSkipsp(Rad$(Rad))-1)+RIGHT$(I$,Wid+1) 3190 Rad=Rad+1 3200 IF Rad>Maxrad THEN 3250 3210 WEND 3220 IF LEN(I$) THEN Rad$(Rad)=I$ : Rad=Rad+1 3230 WEND 3240 ! 3250 CLOSE 1 3260 ; CUR(21,0) CHR$(7) "Alla rader f}r inte plats." Maxrad+1 "rader inl{sta." 3270 ; "Tryck p} CE "; 3280 I$="" : WHILE ASCII(I$)<>24 : GET I$ : WEND 3290 RETURN 0 3300 ! 3310 CLOSE 1 3320 WHILE ERRCODE<>34 3330 ; CUR(21,0) CHR$(7) "Felkod" ERRCODE "!" 3340 RETURN ERRCODE 3350 WEND 3360 ! 3370 Textslut=Rad 3380 WHILE Rad<=Maxrad 3390 Rad$(Rad)="" 3400 Rad=Rad+1 3410 WEND 3420 Aktiv$=STRING$(Maxrad+1,0) 3430 Z=FNAktiveraniv}(0,1) 3440 RETURN 0 3450 FNEND 3460 ! 3470 DEF FNSparafil(Fil$) LOCAL Rad 3480 ; CUR(21,0) SPACE$(3*Wid); 3490 ON ERROR GOTO 3590 3500 PREPARE Fil$ AS FILE 1 3510 WHILE Rad