Back to Main page. Back to Main tapes page. 10 COM A$[255],B$[255],A[80],B[32],C$[150] 20 REM: PIPU - Peripheral Interchange Program Utility 30 REM: By Steve Spear. All rights reserved. 40 DIM C[80],B1$[255],C1$[11],D$[255],I$[255],O$[255],O1$[255] 45 DIM E$[255],F$[255],G$[10] 50 FILES *,*,*,*,*,*,* 60 DEF FNB(X)=X+500* NOT X 70 IF LEN(C$) THEN 110 80 CHAIN A,"pip.b900" 90 PRINT "?PMM PIP monitor missing." 100 STOP 110 D=1 120 I=3 130 GOSUB 151 140 GOTO 80 150 REM: Switches 151 FOR A=6 TO 80 152 A[A]=0 153 NEXT A 160 ASSIGN C$[49,59],I,A 161 D$="/" 170 IF A[2] THEN 270 180 IF END #I THEN 270 190 READ #I;D$[2] 191 B=POS(D$,"::=") 192 IF NOT B THEN 190 193 O$=D$[B+3] 194 D$=D$[1,B-1] 195 D$[LEN(D$)+1]="/" 200 A=POS(A$,D$) 210 IF NOT A THEN 190 220 I$=B$[A+LEN(D$)] 230 B$[A+1]=O$ 240 B$[LEN(B$)+1]=I$ 250 A$=UPS$(B$) 260 GOTO 190 270 RESTORE 9790 280 I=O1=1 290 READ D$[2] 300 CONVERT A$[POS(A$,D$)+LEN(D$)] TO A[A],310 310 NEXT A 320 RESTORE 9800 330 D$="/" 335 A=9 340 IF TYP(0)#2 THEN 410 350 READ D$[2] 360 D$[LEN(D$)+1]="/" 370 A=A+1 380 IF NOT POS(A$,D$) OR ( NOT POS(A$,D$[1,LEN(D$)-1]) AND NUM(D$[3])=36) THEN 340 390 A[A]=1 400 GOTO 340 410 D$="/,;" 420 FOR A=1 TO 3 430 I$=D$[A,A] 440 FOR B=0 TO 9 450 CONVERT B TO I$[2] 460 C=POS(A$,I$) 470 IF NOT C THEN 490 480 CONVERT A$[C+1] TO A[6+A],500 490 NEXT B 500 NEXT A 505 O$="" 520 REM: /LCC List Concise Commands 530 IF NOT A[63] THEN 630 531 ASSIGN C$[49,59],I,A 532 IF NOT A THEN 630 533 PRINT '34C$[49,59]'34" Iis not available now." 534 GOTO 630 540 O$="NAME OPTIONS/FUNCTIONS"'13'10"----- ------- ---------"'13'10 550 GOSUB 9500 560 IF END #I THEN 630 570 READ #I;D$ 580 A=POS(D$,"::=") 590 IF NOT A THEN 570 600 O$[1,14]=D$[1,A-1] 610 O$[15]=D$[A+3] 620 GOSUB 9500 630 RETURN 640 REM: /A Account 650 IF NOT A[50] THEN 700 660 O$="Account = " 670 O$[11]=C$[1,4] 680 O$[LEN(O$)+1]=" " 690 REM: /DA Current date 700 IF NOT A[59] THEN 750 720 O$[LEN(O$)+1]=C$[82,90] 730 O$[LEN(O$)+1]=" " 740 REM: /TI Time 750 IF NOT A[60] THEN 780 760 O$[LEN(O$)+1]="Time = " 770 O$[LEN(O$)+1]=C$[91,100] 780 GOSUB LEN(O$)>0 OF 9500 790 RETURN 800 REM: /IN Input file name 810 IF NOT A[48] THEN 855 820 O$="Output = " 830 O$[LEN(O$)+1]=C$[60,70] 840 O$[LEN(O$)+1]=" " 850 REM: /OUT Output file name 855 IF NOT A[49] THEN 900 860 O$[LEN(O$)+1]="Input = " 870 O$[LEN(O$)+1]=C$[71,81] 880 O$[LEN(O$)+1]=" " 890 REM: /R Return 900 IF NOT A[47] THEN 930 910 O$[LEN(O$)+1]="Return Variable = " 920 CONVERT I1 TO O$[LEN(O$)+1] 930 GOSUB LEN(O$)>0 OF 9500 940 RETURN 950 REM: Size of input 960 READ #I,1 961 B=0 970 IF END #I THEN 1120 980 FOR A=0 TO 32767 990 READ #I,A+1 1000 B=B+(TYP(I)#3) 1110 NEXT A 1120 RETURN 1130 REM: /BU Blocks Used /TB Total Blocks 1140 IF NOT A[51] THEN 1180 1150 O$="Blocks Used = " 1160 CONVERT B TO O$[LEN(O$)+1] 1170 O$[LEN(O$)+1]=" " 1180 IF NOT A[52] THEN 1210 1190 O$[LEN(O$)+1]="Total Blocks = " 1200 CONVERT A TO O$[LEN(O$)+1] 1210 GOSUB LEN(O$)>0 OF 9500 1220 RETURN 1230 REM: Lookup (start) d$ = Accout info I$ = Entry name 1240 ASSIGN C$[5,15],5,L, NR 1250 IF L THEN 1640 1251 F$="lib-" 1252 E$="" 1260 IF END #5 THEN 1640 1270 READ #5;D$ 1272 F=F+1 1275 IF A[71] AND POS(D$[1,4],"A000") THEN 1270 1280 Z=POS(D$,".") 1290 FOR Y=1+500* NOT Z TO 4 1295 X=NUM(A$[Z+Y]) 1300 GOTO X#NUM(D$[Y]) AND X#63 MAX (X<48)*2 OF 1270,1320 1310 NEXT Y 1320 D$[5]=C$[11,15] 1330 ASSIGN D$,6,U, NR 1340 IF U>2 THEN 1270 1350 IF END #6 THEN 1270 1360 READ #6;D$ 1370 REM: Lookup (normal entry) 1380 IF NOT POS(D$,"A000") OR A[66] THEN 1430 1390 F$[5,10]=E$ 1400 SYSTEM E$,F$ 1410 IF LEN(E$)<24 THEN 1270 1420 GOTO 1440 1430 READ #6;E$ 1440 A=POS(A$,":") 1450 FOR X=1+500* NOT A TO 2+A 1460 Y=NUM(A$[A+X]) 1470 Z=NUM(E$[7+X]) 1480 GOTO ((Y=Z OR Y=63)*2 MAX (Y<48))+1 OF 1390,1500 1490 NEXT Y 1500 FOR X=1 TO 6 1510 Y=NUM(A$[X]) 1520 GOTO ((Y=NUM(G$[X]) OR Y=63)*2 MAX (Y<48))+I OF 1380,1540 1530 NEXT X 1540 IF A[2] AND POS(D$[1,2],C$[1,2]) THEN 1620 1550 G$=" * ***" 1560 G$[1,2]=E$[8,9] 1570 G$[4,4]=E$[9,9] 1580 G$[5,5]=E$[8,8] 1590 FOR X=1 TO 4 1600 IF POS(D$[86],G$[X*2-1,X*2]) THEN 1380 1610 NEXT X 1620 E=0 1630 RETURN 1640 E=1 1650 RETURN 1660 REM: Output < or = 1670 X=POS(A$,"<") 1680 Y=POS(A$,"=") 1690 C$[60,70]="TT:" 1700 IF NOT X AND NOT Y THEN 1856 1710 E$=A$[1,FNB(X) MIN FNB(Y)] 1720 Z=POS(E$,"DF:") 1730 E$=E$[3*(Z>0)+Z* NOT Z] 1740 IF POS("TT:KB:",E$[1,3]) THEN 1856 1750 GOSUB 1890 1760 IF NOT E THEN 1855 1770 Z=POS(E$,";") 1780 IF Z THEN 1810 1790 ASSIGN E$,O,O1, NR 1800 GOTO 1820 1810 ASSIGN E$[1,Z-1],O,O1, NR 1820 IF NOT X OR X=8 THEN 1855 1830 PRINT "?IOD illegal output device "'34D$'34 1840 E=1 1850 RETURN 1855 C$[60,70]=D$ 1856 B$=B$[(FNB(X) MIN FNB(Y))+1] 1857 A$=UPS$(B$) 1860 E=0 1870 RETURN 1880 REM: Device to name 1890 IF D$#"SC:" THEN 1920 1900 O1=1 1910 GOTO 1860 1920 F$="cat-" 1930 IF NOT POS(E$,":") THEN 1840 1940 SYSTEM F$[5],F$ 1950 IF NOT POS(F$[15,19],E$[1,POS(D$,":")-1]) THEN 1940 1960 E$=F$[5,10] 1970 GOTO 1860 1980 REM: Catalog 1990 FOR A=26 TO 33 2000 IF A[A] THEN 2030 2010 NEXT A 2030 F=L=N=M=0 2040 GOSUB 1240 2050 IF E THEN 2640 2060 IF F=M THEN 2640 2062 J=K=L=J1=K1=0 2063 M=F 2065 O$="" 2070 RESTORE 9900 2080 IF TYP(0)#1 OR A[27] THEN 2150 2090 READ A,B,C,J$ 2100 IF NOT A[A] THEN 2080 2110 O$[LEN(O$)+1]=J$ 2120 O$[LEN(O$)+1]=J$ 2130 O$[LEN(O$)+1]=" " 2140 GOTO 2080 2150 IF A[27] THEN 2170 2160 O$[LEN(O$)+1]='13'10 2170 RESTORE 9870 2180 IF TYP(0)#1 THEN 2260 2190 READ A,B,C,J$ 2200 IF ((A=27 OR A=14 OR A=13) AND NOT A[27]) OR NOT A[A] THEN 2180 2220 F$[1,25]=" " 2230 O$[LEN(O$)+1]=F$[1,A[3] MIN 10] 2240 J=J+(LEN(J$)+(A[3] MIN 10))* NOT K 2250 GOTO 2180 2260 K=K+1 2270 IF (K+2) <= A[6] THEN 2180 2275 IF NOT A[78] THEN 2280 2276 O$="" 2280 GOSUB LEN(O$)>0 OF 9500 2290 RESTORE 9870 2300 IF TYP(0)#1 THEN 2590 2310 READ A,B,C,J$ 2320 IF ((A=14 OR A=13 OR A=27) AND NOT A[27]) OR A[A] THEN 2180 2330 IF A=26 OR A=28 OR A=31 OR A=33 THEN 2540 2340 GOTO (A#30)*2 MAX NUM(E$[8])#70 OF 2380,2490 2350 ASSIGN E$[1,6],7,Z 2360 CONVERT Z TO O$[LEN(O$)+1,LEN(O$)+7] 2370 GOTO 2300 2380 GOTO (A#32)*2 MAX NUM(E$[8])#70 OF 2520,2490 2390 ASSIGN E$[1,6],7,Z 2400 IF Z>2 THEN 2490 2405 Y=0 2410 IF END #7 THEN 2460 2420 FOR X=0 TO 32767 2430 READ #7,A+1 2440 Y=Y+(TYP(7)#3) 2450 NEXT X 2460 CONVERT Y TO O$[LEN(O$)+1,LEN(O$)+8] 2470 GOTO 2550 2490 F$[1,50]=" " 2500 O$[LEN(O$)+1]=F$[1,LEN(J$)] 2510 GOTO 2560 2520 O$[LEN(O$)+1]=D$[B,C] 2530 GOTO 2550 2540 O$[LEN(O$)+1]=E$[B,C] 2550 F$[1,25]=" " 2560 O$[LEN(O$)+1]=F$[1,A[3] MIN 10] 2570 J1=J1+(LEN(J$)+(A[3] MIN 10))* NOT K1 2580 GOTO 2300 2590 K1=K1+1 2600 IF (K1+1)*J1 <= A[6] THEN 2040 2610 GOSUB 9500 2620 K1=0 2630 GOTO 2040 2640 GOSUB 9500 2650 RETURN 2660 REM: Directory 2670 O$="" 9780 REM: Switch data 9790 DATA "SP","FF","P","W" 9800 DATA "PFA","MWA","FCP","DT","TT","DI","AC","SF","SU","SM","TF","TU" 9810 DATA "TM","AR","SZ","NU","CA","ID","PR","AS","ST","L","BU","RS" 9820 DATA "UNR","LOC","PRO","PRI","D","CRE","CAF","Q","SQ","KE","AD" 9830 DATA "ZE","R","IN","OUT","A","BF","TF","I$","I#","B$","B#","A$","A#" 9840 DATA "DA","TI","NR","ND","LCC","CCL","ST","OA","OV","^","'","CEF" 9850 DATA "SK","SL","LI","CH","NL","CR","AE" 9860 REM: Catalog data 9870 DATA 26,1,6,"Name ",27,1,4,"Idcode",28,7,10,"Prot",30,0,0,"Status" 9880 DATA 31,10,15,"Length",32,0,1,"R Used",33,17,21,"Size " 9890 DATA 14,45,54," Time ",13,36,44," Date ",26,22,21,"","Halt" 9900 DATA 27,1,4,"Idcode: ",14,45,54,"Time Taken: " 9910 DATA 13,36,44,"Date Taken: ","Halt" 9920 REM: Directory data 9930 DATA 25,0,0," /No. ",27,1,4," /Idcode",21,5,9,"Time /Used " 9940 DATA 22,10,14,"Time /Max. ",20,10,5,"Time /Free ",18,15,29,"Space/Used " 9950 DATA 19,20,24,"Space/Max. ",17,20,15,"Space/Free " 9960 DATA 16,25,35," Account /Capabilities",14,45,54," Time / Taken " 9970 DATA 13,36,44," Date / Taken ",45,55,85,"Account /Description" 9980 DATA 23,86,200," /Access Restrictions","Halt" 9990 END