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