A large commit.
[pdp8.git] / sw / os8 / v3d / sources / extensions / dectapes / dectape2 / reseq.ba
diff --git a/sw/os8/v3d/sources/extensions/dectapes/dectape2/reseq.ba b/sw/os8/v3d/sources/extensions/dectapes/dectape2/reseq.ba
new file mode 100644 (file)
index 0000000..be7cffa
--- /dev/null
@@ -0,0 +1,108 @@
+1000 DIM L$(80),F$(1),C$(1),N$(16)
+1010 DIM L2$(80)
+1020 DIM N(350)
+1030 LET F$=CHR$(28)
+1040 PRINT "FILE";
+1050 INPUT N$
+1060 PRINT "START,STEP";
+1070 INPUT S1,S
+1080 LET S1=INT(ABS(S1))
+1090 LET S=INT(ABS(S))
+1100 LET T=0
+1110 LET N2=0
+1120 FILE #1:N$
+1130 LET I=1
+1140 INPUT #1:L$
+1150 IFEND #1 THEN 1320
+1160 LET L=LEN(L$)
+1170 GOSUB 1980
+1180 IF N1>0 THEN 1220
+1190 PRINT "NO LINE NUMBER"
+1200 PRINT L$
+1210 GO TO 1130
+1220 IF N1>N2 THEN 1260
+1230 PRINT "OUT OF SEQUENCE"
+1240 PRINT L$
+1250 GO TO 1130
+1260 LET N2=N1
+1270 LET T=T+1
+1280 LET N(T)=N1
+1290 IF T<350 THEN 1130
+1300 PRINT "TOO MANY LINES"
+1310 STOP
+1320 RESTORE #1
+1330 FILEV #2:N$
+1340 LET N2=S1
+1350 INPUT #1: L$
+1360 IFEND #1 THEN 1730
+1370 LET I=1
+1380 LET L=LEN(L$)
+1390 GOSUB 1980
+1400 LET L2$=STR$(N2)
+1410 PRINT #2: L2$;
+1420 LET L$=SEG$(L$,I,80)
+1430 LET N2=N2+S
+1440 LET F=0
+1450 LET D=POS(L$,F$,1) \ LET P=D
+1460 IF D=0 THEN 1490
+1470 LET L2$=SEG$(L$,P+1,80)
+1480 LET L$=SEG$(L$,1,P-1)
+1490 LET I=POS(L$,"GOTO",1)+4
+1500 IF I>4 THEN 1750
+1510 LET I=POS(L$,"GO TO",1)+5
+1520 IF I>5 THEN 1750
+1530 LET I=POS(L$,"THEN",1)+4
+1540 IF I>4 THEN 1750
+1550 LET I=POS(L$,"GOSUB",1)+5
+1560 IF I>5 THEN 1750
+1570 LET I=POS(L$,"GO SUB",1)+6
+1580 IF I>6 THEN 1750
+1590 IF F=0 THEN 1610
+1600 PRINT #2:F$;
+1610 PRINT #2:L$;
+1620 LET F=F+1
+1630 IF D>0 THEN 1660
+1640 PRINT #2:
+1650 GO TO 1350
+1660 LET D=POS(L2$,F$,1) \ LET P=D
+1670 IF D>0 THEN 1700
+1680 LET L$=L2$
+1690 GO TO 1490
+1700 LET L$=SEG$(L2$,1,P-1)
+1710 LET L2$=SEG$(L2$,P+1,80)
+1720 GO TO 1490
+1730 CLOSE #2
+1740 STOP
+1750 LET L=LEN(L$)
+1760 GOSUB 1920
+1770 IF C=32 THEN 1760
+1780 IF C<0 THEN 1890
+1790 LET I=I-1
+1800 LET P=I
+1810 GOSUB 1980
+1820 IF N1=0 THEN 1890
+1830 FOR J=1 TO T
+1840 IF N1<>N(J) THEN 1880
+1850 LET Q$=STR$(J*S-S+S1)
+1860 LET L$=SEG$(L$,1,P-1)&Q$
+1870 GO TO 1590
+1880 NEXT J
+1890 PRINT "BAD REFERENCE"
+1900 PRINT L$
+1910 GO TO 1590
+1920 IF I<=L THEN 1950
+1930 LET C=-1
+1940 RETURN
+1950 LET C=ASC(SEG$(L$,I,I))
+1960 LET I=I+1
+1970 RETURN
+1980 LET N1=0
+1990 GOSUB 1920
+2000 IF C<48 THEN 2040
+2010 IF C>57 THEN 2040
+2020 LET N1=N1*10+C-48
+2030 GO TO 1990
+2040 IF C<0 THEN 2060
+2050 LET I=I-1
+2060 RETURN
+2070 END