100 ! Program TVMAIN2.800 105 ! Utg}va 2.1 1983-11-12 110 ! Rev av Niklas Notteman, 995. 115 ! Rev av Anders Sandberg, 4104. 116 ! Ursprungliga komando och rutiner }terinf|rda av Bo Kullmar, 1789. 120 ! ABC 6-1x+ 125 ! 130 INTEGER : NO EXTEND 135 ! 140 DIM A1$=2,C$=1,C1$=160,M4$=160,F$=16,F1$=16,S$=160,X$=16,A$=33,X1$=16,D$=5 145 Q9=2000 : DIM Q$=Q9 : M9=SYS(4)-500 : DIM M$=M9 : A1$=CHR$(13,10) 150 M8=VAROOT(M$)-4 : M7=PEEK2(M8+6) : L8=VAROOT(C1$)-4 : L7=PEEK2(L8+6) 155 Q8=VAROOT(Q$)-4 : Q7=PEEK2(Q8+6) : N9=FNP2(65290,PEEK2(65290)+12)-12 160 ON ERROR GOTO 910 : P=0 : X=65363 : Y=65362 : L=0 : S=0 162 A$=CHR$(17,0,245,33,0,0,26,254,255,40,15,6,8,203,39,56,6,197,1,1,0,9,193,5,32,243,19,62,161,187,32,230,201) 163 X1$='PR:VSA36C72.5' 164 GOTO 170 ! *** Skip break+reenter 165 STOP ! * BREAK 170 ! *** MAIN LOOP 175 WHILE -1 180 POKE 63488,S,SWAP%(S),P,SWAP%(P),M7,SWAP%(M7),LEN(M$),SWAP%(LEN(M$)) 185 L=CALL(63504) : C=FNR(CALL(63507)) 190 IF C=8 OR C=194 P=P-1 : IF PEEK2(M7+P-1)=CVT$%(A1$) P=P-1 195 IF C=9 OR C=195 P=P+1 : IF PEEK2(M7+P-1)=CVT$%(A1$) P=P+1 200 IF C=13 OR C=196 P1=P : GOSUB 745 : P=P1 : GOTO 230 205 IF C=94 OR C=192 P1=P : GOSUB 760 : P=P1 : GOTO 240 210 IF C=2 OR C=193 P1=(L+S)/2 : GOSUB 760 : P=P1 : GOTO 240 215 IF C=12 OR C=24 GOSUB 770 : GOTO 240 220 IF C=32 AND L32 AND C<128) C=FNP2(L8+8,CALL(63510,L7)+1) : GOSUB 250 230 IF P<0 P=0 ELSE IF P>LEN(M$) P=LEN(M$) 235 IF P>L OR PZ2 GOTO 270 ELSE N=FNN : IF C$<' ' 255 265 ON INSTR(1,' IDSRJEKCLMGQZ.=;W',C$)+1 GOTO 905,260,345,370,435,435,315,320,515,420,390,325,360,475,300,305,310,280,295 270 E=-1 : RETURN 275 ! *** Extend 280 IF Z1>Z2 GOTO 270 ELSE N=FNN : IF C$<'!' 660 283 IF INSTR(1,'YHSPMTXR',C$)=0 THEN 905 285 ON INSTR(1,'YHSPMTXR',C$) GOTO 550,165,620,330,290,640,335,286 286 N=29 : GOTO 660 ! Storlek RAM:disk 290 M4$=RIGHT$(C1$,Z1) : Z1=Z2+1 : GOTO 255 ! *** Macro load 295 POKE 65364,N : ; CHR$(12) FNC$ 'Line length =' PEEK(65364); : GOTO 255 300 N=LEN(M$) : A9=-1 : GOTO 260 ! *** z 305 N=P : A9=-1 : GOTO 260 ! *** . 310 ; FNC$ N; : GOTO 260 ! *** = 315 P=0 : GOTO 255 ! *** Beg 320 P=LEN(M$) : GOTO 255 ! *** End 325 IF P>LEN(M$) 270 ELSE C1$=M4$ : Z2=LEN(C1$) : Z1=1 : GOTO 260 330 X$=X1$ : GOTO 645 ! *** Print 335 GOSUB 620 : IF F1$='' 930 ELSE 270 ! *** Exit 340 ! *** Insert 345 IF NOT A9 GOTO 350 ELSE M5=1 : GOSUB 690 : IF E RETURN ELSE POKE M7+P,N AND 127 : P=P+1 : GOTO 255 350 Z3=FNI : M5=Z3-Z1 : GOSUB 690 : IF E RETURN ELSE GOSUB 720 : Z1=Z3+1 : GOTO 255 355 ! *** Get Q-reg 360 M5=LEN(Q$) : GOSUB 685 : IF E RETURN ELSE N1=M5 : N2=M7+P : N3=Q7 : N4=176 : GOSUB 725 : P=P+M5 : GOTO 255 365 ! *** Delete 370 Z3=P+N : IF Z3<0 Z3=0 ELSE IF Z3>LEN(M$) Z3=LEN(M$) 375 M5=-ABS(P-Z3) : IF Z3

LEN(M$) NEXT I 400 GOTO 410 405 FOR I=1 TO -N : GOSUB 760 : IF P1 NEXT I 410 P=P1 : GOTO 255 415 ! *** Move ch 420 P=P+N : N=1 : IF P<0 P=0 ELSE IF P>LEN(M$) P=LEN(M$) 425 GOTO 255 430 ! *** Search/Replace 435 Z3=FNI : IF Z3>Z1 S$=MID$(C1$,Z1,Z3-Z1) 440 Z1=Z3+1 : IF C$='R' 450 ELSE P1=P+1 445 WHILE N>0 : P1=INSTR(P1+1,M$,S$) : IF P1=0 GOTO 920 ELSE N=N-1 : WEND : P=P1-1 : GOTO 255 450 Z3=FNI : IF Z3=0 Z3=Z1 455 WHILE N>0 460 P1=INSTR(P+1,M$,S$) : IF P1=0 GOTO 920 ELSE P=P1-1 : M5=Z3-Z1-LEN(S$) : GOSUB 690 : IF E RETURN ELSE GOSUB 720 465 N=N-1 : WEND : Z1=Z3+1 : GOTO 255 470 ! *** Put Q-reg 475 P1=P : IF N<0 GOTO 490 480 FOR I=1 TO N : GOSUB 740 : IF P1<>LEN(M$) NEXT I 485 M5=P1-P : GOTO 500 490 FOR I=1 TO -N : GOSUB 760 : IF P1 NEXT I 495 M5=P-P1 : P=P1 500 N1=M5 : IF N1>Q9 C=Q9 : GOTO 925 505 N2=Q7 : N3=M7+P : N4=176 : GOSUB 725 : M5=FNP2(Q8+8,M5) : GOTO 255 510 ! *** Kill 515 P1=P : IF N<0 GOTO 530 520 FOR I=1 TO N : GOSUB 745 : IF P1<>LEN(M$) NEXT I 525 M5=P-P1 : GOTO 540 530 FOR I=1 TO -N : GOSUB 760 : IF P1 NEXT I 535 M5=P1-P : P=P1 540 GOSUB 690 : IF E RETURN ELSE 255 545 ! *** Input file 550 ; FNC$ 'Input file: '; : F$=FNI$ : IF F$='' 605 555 ON ERROR GOTO 610 560 OPEN F$ AS FILE 1 565 ON ERROR GOTO 595 570 WHILE -1 575 INPUT LINE #1 C1$ : M6=LEN(M$)+LEN(C1$) 580 IF M6>M9 C=M9 : GOSUB 925 : GOTO 600 585 N1=LEN(C1$) : N2=M7+LEN(M$) : N3=PEEK2(L8+6) : N4=176 : GOSUB 730 : M6=FNP2(M8+8,M6) 590 WEND 595 CLOSE : IF 34<>ERRCODE 915 600 CLOSE : ON ERROR GOTO 910 605 P=0 : E=-1 : RETURN 610 CLOSE : IF 21=ERRCODE ; FNC$ "?File not found: " F$; : GOTO 605 ELSE 915 615 ! *** Save file 620 F1$='' : P=1 : P1=P 624 IF LEN(M$)=0 THEN Z=FNV 625 IF P1-1 AND N<4 OR N=29 POKE 64769,N ELSE 905 665 G6=1 : G8=192 : G7=224 667 IF N=29 G6=4 : G8=14 : G7=15 : D$='RAM: ' ELSE D$='DR'+NUM$(N)+': ' 670 G9=CALL(24678,G8) : IF PEEK(64789) 900 ELSE G9=G6*CALL(VARPTR(A$)) 675 G8=CALL(24678,G7) : IF PEEK(64789) 900 ELSE G8=G6*CALL(VARPTR(A$)) 680 ; FNC$ D$ G9 'of' G8 'sectors free'; : GOTO 255 685 ! *** Check 690 IF M5<0 GOTO 700 ELSE M6=LEN(M$)+M5 : IF M6>M9 E=-1 : C=M9 : GOTO 925 695 N1=LEN(M$)-P : N2=M7+M6-1 : N3=M7+LEN(M$)-1 : N4=184 : GOSUB 730 : GOTO 710 700 IF LEN(M$)+M5

95))*(-(A<128)) 805 DEF FNR$=CHR$(FNR(ASCII(MID$(C1$,Z1,1)))) 810 DEF FNI$ LOCAL A$=20,B$=1,T$=4 : T$='.TXT' : POKE 65506,0 815 GET B$ : WHILE B$<>CHR$(13) 817 IF B$=CHR$(24) A$='' : ; CUR(23,12) SPACE$(20); : ; CUR(23,12); 820 IF B$=CHR$(8) AND A$<>'' A$=LEFT$(A$,LEN(A$)-1) : ; CHR$(8,32,8); 825 IF B$=CHR$(9) AND A$='' A$=A$+F1$ : ; A$; 830 IF B$<' ' OR B$>'' 840 835 IF LEN(A$)<20 B$=CHR$(FNR(ASCII(B$))) : A$=A$+B$ : ; B$; 840 GET B$ : WEND 845 IF A$<>'' AND INSTR(1,A$,'.')=0 AND LEN(A$)<13 A$=A$+T$ : ; T$; 850 RETURN A$ 855 FNEND 860 DEF FNN 865 C$=FNR$ : IF 0=INSTR(1,'-0123456789',C$) 880 ELSE Z3=Z1 870 Z1=Z1+1 : C$=FNR$ : IF C$>'/' AND C$<':' 870 875 ON ERROR GOTO 885 : N=VAL(MID$(C1$,Z3,Z1-Z3)) : A9=-1 880 Z1=Z1+1 : RETURN N 885 RETURN -1 890 FNEND 895 ! *** Error 900 IF PEEK(64789)=128 ; FNC$ 'Disc not ready!'; ELSE ; 'Disc error: ' PEEK(64789); 902 GOTO 255 905 ; FNC$ 'Illegal: ' RIGHT$(C1$,Z1-1); : RETURN 910 ; FNC$ 'Error:' ERRCODE; : GOTO 160 915 ; FNC$ 'Error:' ERRCODE; : RETURN 920 ; FNC$ 'Search failed: ' S$; : RETURN 925 ; FNC$ 'Memory full ! Max =' C; : RETURN 930 END 935 DEF FNV 940 ; CHR$(7) CUR(23,0) 'Warning! Do you want to save a empty file?' 945 FOR I=1 TO 1000 : NEXT I 950 RETURN 0 955 FNEND 1000 DEF FNI2$ LOCAL S$=20,K$=1,C$=1,B$=1,H$=1 1005 POKE 65506,0 ! Tangentflagga 1010 C$=CHR$(13) : B$=CHR$(8) : H$=CHR$(9) 1015 GET K$ 1020 WHILE K$<>C$ 1025 WHILE K$=B$ AND S$<>'' 1030 S$=LEFT$(S$,LEN(S$)-1) 1035 ; CHR$(8,32,8); 1040 K$='' 1045 WEND 1050 WHILE K$=H$ AND S$='' 1055 S$=S$+F$ : ; S$; 1060 K$='' 1065 WEND 1070 WHILE ASCII(K$)>31 AND ASCII(K$)<128 AND LEN(S$)<20 1075 S$=S$+K$ : ; K$; 1080 K$='' 1085 WEND 1090 GET K$ 1095 WEND 1097 IF S$<>'' AND INSTR(1,S$,'.')=0 AND LEN(S$)<13 S$=S$+'.TXT' : ; '.TXT'; 1100 RETURN S$ 1105 FNEND