2 ! +++++++++++++++++++++++++++++++++++ 3 ! Program .... REMBORT.800 4 ! Utg}va 1.1 1983-03-05 5 ! av (c) Bo Kullmar 8 ! Ins{nt av Bo Kullmar, 1789. 9 ! +++++++++++++++++++++++++++++++++++ 10 ! F|r ABC800 C och M 11 ! Programmet tar bort remarkrader med REM, : REM och ! 12 ! Programmet tar l}ng tid att k|ra! Det {r inte hastighetsoptimerat! 50 ON ERROR GOTO 10000 51 ! I rad 2560 st{ngs felhanteraren av 60 FLOAT 80 EXTEND 300 DIM Bortnr$(200%)=8%,N{sta$(200%)=8% 310 DIM Rad$=165% 320 DIM Radl$=165% 330 DIM Radr$=165% 700 DATA 'THEN ','GOTO ','OSUB ' 710 DATA 'ELSE ','SUME ','TORE ' 1000 ; FNRubrik$ 1010 ; : ; 1020 ; '\nskas instruktioner (J) ? '; 1030 GET \$ 1040 IF \$='j' OR \$='J' THEN Z$=FNInstr$ 1050 ; : ; 1060 Fil$='TEMP' 1116 ; 'Hav t}lamod! Det h{r tar en stund!' 1117 ; 1120 OPEN Fil$+'.BAS' AS FILE 1% 1140 PREPARE Fil$+'.BAR' AS FILE 2% 1150 INPUT LINE #1%,Rad$ 1160 Rad$=FNCrlfbort$ 1170 ; #2%,Rad$ 1180 Rad%=1% 2000 WHILE Flagga$<>'EOF' 2010 ! L{ser gamla filen till filslut 2020 INPUT LINE #1%,Rad$ 2030 Rad$=FNCrlfbort$ 2040 WHILE Flagga2$='BORT' 2050 ! Skriver n{sta rad nr, r{knat 2060 ! fr}n ett bortaget radnr 2070 N{sta$(Varv%)=LEFT$(Rad$,Radnrslut%)+SPACE$(1%) 2080 N{sta$(Varv%+1%)=LEFT$(Rad$,Radnrslut%)+',' 2090 Flagga2$='' 2110 WEND 2120 Radnrslut%=INSTR(1%,Rad$,' ')-1% 2130 WHILE FNS|k%('REM')<>0% AND FNS|k%('REM')<8% OR FNS|k%('!')<>0% AND FNS|k%('!')0% 2220 ! Tar bort REM ... i slutet p} 2230 ! rader. 2240 Pos%=FNS|k%(' : REM ') 2250 Rad$=LEFT$(Rad$,Pos%) 2260 GOTO 2510 2270 WEND 2280 WHILE FNS|k2%<>-1% AND FNS|k3%=1% 2290 ! Tar bort radens inneh}ll 2300 ! efter ! om raden saknar '/" 2310 Rad$=LEFT$(Rad$,Pos%) 2320 GOTO 2510 2330 WEND 2340 WHILE FNS|k2%<>-1% AND FNS|k3%=2% OR FNS|k3%=3% 2350 ! Tar bort radens inneh}ll 2360 ! efter ! i rad med '/" 2370 Pos1%=1% : Pos3%=1% 2380 WHILE FNS|k4%(Pos1%,"'")<>0% 2390 Pos1%=FNS|k4%(Pos1%,"'")+1% 2400 WEND 2410 WHILE FNS|k4%(Pos3%,'"')<>0% 2420 Pos3%=FNS|k4%(Pos3%,'"')+1% 2430 WEND 2440 Pos%=FNMax%(Pos1%,Pos3%) 2450 Pos%=FNS|k4%(Pos%,'!') 2460 IF Pos%<>0% THEN Pos%=Pos%-1% 2470 IF Pos%=0% THEN 2510 2480 Rad$=LEFT$(Rad$,Pos%) 2490 GOTO 2510 2500 WEND 2510 ; #2%,Rad$ ! Skriver ny rad 2520 Rad%=Rad%+1% 2530 WEND 2540 ON ERROR GOTO 3000 CLOSE 3010 ! [ndrar borttagna radnr i rader 3020 OPEN Fil$+'.BAR' AS FILE 3% 3030 PREPARE Fil$+'.REN' AS FILE 4% 3035 ; #4%,'1 STOP' 3040 INPUT LINE #3%,Rad$ 3050 Rad$=FNCrlfbort$ 3060 ; #4%,Rad$ 3070 FOR J%=1% TO Rad%-1% 3080 INPUT LINE #3%,Rad$ 3090 Rad$=FNCrlfbort$ 3100 Rad$=Rad$+SPACE$(1%) 3110 FOR I%=2% TO Varv%+1% 3120 ! S|ker i raden efter de 3130 ! radnr som {r borttagna 3140 ! som finns i Bortnr$(I) 3150 WHILE FNS|k%('ON')<>0% 3160 ! S|ker efter rader med 3170 ! ON satser. 3180 Slutpos%=FNS|k%(' : ') 3190 IF Slutpos%=0% THEN Slutpos%=165% 3200 Pos%=1% 3210 Plus%=1% 3220 WHILE FNS|k4%(Pos%,','+Bortnr$(I%))<>0% 3230 ! S|ker efter "," + bort- 3240 ! tagna radnummer i 3250 ! ON-satsen. Radnummer 3260 ! {ndras om ON-satsen 3270 ! {r radens f|rsta rad. 3280 S|knr$=','+Bortnr$(I%) 3290 Z$=FN[ndra$(Pos%,S|knr$) 3300 Pos%=S|k%+1% 3310 WEND 3320 GOTO 3340 3330 WEND 3340 Slutpos%=165% 3350 Plus%=5% 3360 RESTORE 3370 FOR X%=1% TO 6% 3380 ! S|ker efter rad nr 3390 ! med olika prefix 3400 ! som finns i DATA raderna. 3410 READ S|k$ 3420 Pos%=1% 3430 WHILE FNS|k4%(Pos%,S|k$+Bortnr$(I%))<>0% 3440 ! Borttaget radnr hittat! 3450 ! Radnr {ndras till n{sta 3460 S|knr$=S|k$+Bortnr$(I%) 3470 Z$=FN[ndra$(Pos%,S|knr$) 3480 Pos%=S|k%+1% 3490 WEND 3500 NEXT X% 3510 NEXT I% 3520 ; #4%,Rad$ 3530 NEXT J% 3540 WHILE Varv%=0% 3550 ! Namn{ndring om inga borttagna 3560 ! rader fanns i filen. 3570 KILL Fil$+'.REN' : KILL Fil$+'.BAS' 3580 NAME Fil$+'.BAR' AS Fil$+'.BAS' 3590 Varv%=1% 3600 WEND 3610 CLOSE 3620 ; 3630 ; 'Den nya filen h{mtas nu in i minnet!' 3635 ; 'Ta bort rad nr 1!' 3640 CHAIN Fil$+'.BAS' 3660 ; 3670 END 5000 DEF FNRubrik$ 5010 ; CHR$(12%) 5020 ; TAB(10%) '*** ABC800 REMBORT ***' 5030 RETURN Rubrik$ 5040 FNEND 5100 DEF FNCrlfbort$ LOCAL Nyrad$=165 5105 Nyrad$=LEFT$(Rad$,LEN(Rad$)-2%) 5110 RETURN Nyrad$ 5120 FNEND 5200 DEF FNS|k%(Teck$) 5210 Pos%=INSTR(1%,Rad$,Teck$) 5220 RETURN Pos% 5230 FNEND 5300 DEF FNS|k2% 5310 Pos%=INSTR(Radnrslut%+3%,Rad$,'!')-1% 5320 RETURN Pos% 5330 FNEND 5400 DEF FNS|k3% LOCAL Tal1%,Tal2% 5410 ! S|ker efter ' eller ". 5420 Tal1%=INSTR(1%,Rad$,"'") 5430 Tal2%=INSTR(1%,Rad$,'"') 5440 IF Tal1%=0% AND Tal2%=0% THEN Tal%=1% ELSE Tal%=0% 5450 IF Tal1%<>0% THEN Tal%=2% 5460 IF Tal2%<>0% THEN Tal%=3% 5470 RETURN Tal% 5480 FNEND 5500 DEF FNS|k4%(S|k%,Teck$) 5510 ! S|ker tecken med startpunkt 5520 Pos%=INSTR(S|k%,Rad$,Teck$) 5530 RETURN Pos% 5540 FNEND 5600 DEF FNMax%(T%,T2%) 5605 D%=T% 5610 D%=-D%*(D%>T2%)-T2%*(D%<=T2%) 5620 RETURN D% 5630 FNEND 5700 DEF FNInstr$ 5710 ; FNRubrik$ 5720 ; 'Detta program tar bort kommentarrader' 5730 ; 'i program.' 5740 ; 5750 ; 'Rader som b|rjar med ! eller REM tas' 5760 ; 'bort helt. Annars tas raden bort efter' 5770 ; 'utropstecknet eller REM-ordet.' 5780 ; 5790 ; 'Utropstecken i str{ngar p}verkar inte' 5800 ; 'borttagningsrutinen. Raden kapas ej' 5810 ; 'f|re sista enkel eller dubbelfnutt.' 5820 ; 5830 ; 'Radnummer som pekar p} borttagen rad' 5840 ; 'efter THEN, ...GOTO, ...GOSUB, ELSE,' 5850 ; 'RESUME, RESTORE och efter "," i radens' 5860 ; 'f|rsta ON sats har {ndras till n{sta' 5870 ; 'radnummer.' 5910 ; 5920 ; 'Tryck p} en tanget f|r forts{ttning! '; 5930 GET \$ 5940 RETURN Rubrik$ 5950 FNEND 6000 DEF FN[ndra$(Pos%,S|knr$) 6010 ! Funktion f|r att {ndra radnr 6020 S|k%=FNS|k4%(Pos%,S|knr$) 6030 IF S|k%>Slutpos% THEN RETURN Rad$ 6040 L{ngd%=LEN(Bortnr$(I%)) 6050 L{ngd2%=LEN(N{sta$(I%)) 6060 WHILE L{ngd%=L{ngd2% 6070 MID$(Rad$,S|k%+Plus%,L{ngd%)=N{sta$(I%) 6080 GOTO 6160 6090 WEND 6100 WHILE L{ngd%<>L{ngd2% 6110 Radl$=LEFT$(Rad$,S|k%+Plus%) 6120 Radr$=RIGHT$(Rad$,S|k%+Plus%+L{ngd%) 6130 Rad$=Radl$+N{sta$(I%)+Radr$ 6140 GOTO 6160 6150 WEND 6160 RETURN Rad$ 6170 FNEND 10000 IF ERRCODE=34% THEN Flagga$='EOF' : RESUME 2000 10010 ; 'FEL = ' ERRCODE 10020 CLOSE 10030 END