Listing of file='IDS2PF11' on disk='vmedia/701-2715B.wvd.zip'
# Sector 146, program filename = 'IDS2PF11'
1000 REM "IDS2PF11" - Release 2.1 - DISK SPACE ALLOCATION MODULE
1010 DIM D1$3
: IF F6$(17)<"^"THEN SELECT @PART"IDS2SUBM"
: GOSUB '32("IDS2sF11")
: IF R3$(1)="IDS2PUSD"OR R3$(1)="IDS2PU09"OR R3$(1)="IDS2PC03"THEN F6$(11)=
"N"
: IF F6$(18)="R"THEN F6$(11)="N"
1050 IF F6$(53)="Y"AND STR(F4$,4,8)<>"IDS2PCST"THEN 1090
: E$="IDS2fs"
: A=(R0-#PART)/16+1
: IF A>0THEN CONVERT ATO STR(E$,7,2),(##)
: GOSUB '39(E$,2)
: MAT REDIM E3$(9)83
: IF A>0THEN DATA LOAD DA T#2,(A)E3$()
: E0$()=STR(E3$(),45*#PART-17,45)
: GOTO 1100
1090 LIMITS T#4,STR(F4$,4,8),A,J,J,J
: DATA LOAD BA T#4,(A+2)STR(E3$(),,256)
: E0$()=STR(E3$(),92,45)
1100 E$=E9$(1)OR ALL(20)
: GOSUB '39(E$,5)
: MAT REDIM E$(6)83
: DATA LOAD DA T#P,(A)E$()
: MAT REDIM E$(E8)1
: STR(E$(),499)=" "
: IF D1$<>" "THEN STR(E$(),105,3)=D1$
: E6$=STR(E$(),10)
: IF E6$<"2"OR E6$>"3"THEN AND (STR(E2$(3),5,1),FE)
: E$=STR(E$(),82,8)OR ALL(20)
: GOSUB '39(E$,5)
: MAT REDIM E3$(24)83
: DATA LOAD DA T#P,(A)E3$()
: MAT REDIM E3$(249)8
1240 IF E6$>"4"AND STR(E$(),201,8)=" "THEN STR(E$(),201,16)=STR(E3$(),201)
: IF E6$>"4"THEN CONVERT STR(E3$(),209,8)TO D4
: ELSE D4=0
: C0=0
: IF E6$>"4"THEN C0=INT(VAL(STR(E3$(),417))/3)
: GOSUB '37(2)
: GOSUB '37(4)
: GOSUB '37(1)
: C1=Q
: GOSUB '37(3)
: C2=Q
: IF C2>0THEN 1330
: GOSUB '45(3,"1")
1320 C2=Q
1330 STR(F6$(),12,2)="NN"
: GOSUB '37(5)
: C3=Q
: IF Q>0THEN 1420
1370 GOSUB '34(5)
: C3=Q
: IF Q>0THEN 1420
: GOSUB '38(48," ")
: GOTO 1370
1420 GOSUB '55(6,MAX(C3*1.05,D4))
: C4=Q
: IF C4=0THEN 1370
: GOSUB '43(7)
: C5=Q
: GOSUB '43(8)
: C6=Q
: C5=C5-INT(Q/2)
: GOSUB '43(9)
: C6=MOD(C6,2)+Q
: GOSUB '55(10,1+C5-INT(C6/4))
: C5=Q
: IF (C4*C5)/C2<13465600THEN 1560
: CONVERT C2TO F9$,(#)
: GOSUB '38(55,F9$)
: GOTO 1370
1560 GOSUB '43(16)
: C6=Q
: IF C1<>4OR C5+C6<83THEN 1630
1590 GOSUB '38(52," ")
: GOSUB '34(250)
: IF Q<>31THEN 1590
1620 LOAD T#2,R3$(1)1000,
1630 GOSUB '55(19,0)
: GOSUB '55(20,0)
: IF C0>0OR C4>65536OR C2>1THEN GOSUB '55(20,3)
: ELSE GOSUB '55(20,2)
: IF C1=1OR C1=4THEN GOSUB '55(20,0)
: IF C1=4THEN GOSUB '55(19,C5)
: C6=C6+Q
: GOSUB '55(17,C6)
: IF C1<>4THEN Q=0
: C7=MIN(C4,INT(1983/C6))
: C8=ABS(INT(-C4/C7))
: C9=MIN(C8,32,INT(240/C6),INT(LOG((C8+1)*(C6-Q+4))))
1740 C7=INT(1983/C6)*C9-C9
: C8=ABS(INT(-C4/C7))
: IF C8*(C7-INT(1983/C6))<C4THEN 1790
: C9=C9-1
: GOTO 1740
1790 C9=C9*8
: GOSUB '55(21,C9)
: GOSUB '55(25,C8)
: J2=0
: FOR I=249TO 1992STEP 249
: IF C5*INT(I/C5)/I<=J2THEN 1870
: J1=I/249
: J2=C5*INT(I/C5)/I
1870 NEXT I
: GOSUB '55(11,J1)
: GOSUB '55(12,INT(J1*249/C5))
: J2=Q
: J3=ABS(INT(-ABS(INT(-C4/C8))/J2))
: GOSUB '55(23,J3)
: J4=C9
: IF C1=2OR C1=3THEN J4=J4+J3*J1
: GOSUB '55(24,J4)
: J5=Q*C8+2*C2
: GOSUB '55(26,J5)
: C7=MIN(C7,J2*J3)
: GOSUB '55(6,C7*C8)
: STR(E$(),234,2)=BIN(C7,2)
2010 D1,D3=0
: FOR I=1TO 8
2030 GOSUB 2580
: IF I>C2THEN 2080
: D2=J5
: D1=D1+J6
: D3=D3+J8
2080 NEXT I
: GOSUB '55(59,D3)
: GOSUB '55(60,D2)
: GOSUB '55(61,D1)
: IF D1<>D2OR D2>D3THEN 2310
: Q=32
: IF R3$(1)="IDS2PUI8"OR R3$(1)="IDS2PC03"OR R3$(1)="IDS2PU09"THEN 2150
: IF R3$(1)<>"IDS2MF01"AND E$(10)>"4"THEN 2180
2150 GOSUB '38(58," ")
: GOSUB '34(250)
: IF Q=16THEN 2220
2180 IF Q=15THEN 1370
: IF Q>0OR C1<2OR C1>3OR R3$(1)="IDS2PU09"THEN 2270
2200 GOSUB '34(3)
: IF Q<1OR Q>8THEN 2240
: IF Q>1THEN 2260
: GOTO 1320
2220 IF C2>1THEN 2230
: GOSUB '34(27)
: GOSUB 3290
: D1$=E$
: IF D>=1THEN 1050
: GOSUB '38(46," ")
: GOTO 2220
2230 GOSUB '38(49," ")
: GOTO 2150
2240 GOSUB '38(47," ")
: GOTO 2200
2260 IF STR(E9$(1),,4)<>"IDS2"AND STR(E9$(1),,4)<>"ids2"THEN 1320
: GOSUB '38(57," ")
: GOTO 2200
2270 IF Q>0AND Q<=C2AND C2>1THEN 2350
: IF Q=32THEN 3060
: PRINT HEX(07);
: GOTO 2150
2310 GOSUB '38(50," ")
: GOSUB '34(250)
: ON Q-14GOTO 1370,2220
: IF Q<=C2AND C2>1THEN 2180
: IF Q=31THEN 1620
: IF Q=0THEN 2200
: GOTO 1370
2340 IF Q>=32THEN 2310
2350 I=Q
2360 GOSUB '34(I*4+23)
: GOSUB 2580
: IF J9=0THEN 2360
2390 GOSUB '34(I*4+26)
: ON C2GOTO 2030
: IF Q<=J8THEN 2440
: GOSUB '38(51," ")
: GOTO 2390
2440 IF Q>=J7AND MOD(Q-J7,C8*J1)=0THEN 2010
: F0$="Must be"
: $PACK(F=HEX(1006))STR(F0$,LEN(F0$)+1)FROMJ7
: STR(F0$,LEN(F0$)+1)=", or"
: $PACK(F=HEX(1006))STR(F0$,LEN(F0$)+1)FROMJ7
: STR(F0$,LEN(F0$)+2)="+ a mult. of"
: $PACK(F=HEX(1006))STR(F0$,LEN(F0$)+1)FROMC8*J1
: F0$=F0$&" (try"
2520 $PACK(F=HEX(1006))STR(F0$,LEN(F0$)+1)FROMMAX(J7,C8*J1*INT((Q-J7)/C8/J1)+J
7)
: F0$=F0$&" or"
: $PACK(F=HEX(1006))STR(F0$,LEN(F0$)+1)FROMMAX(J7+C8*J1,C8*J1*(INT((Q-J7)/C
8/J1)+1)+J7)
: F0$=F0$&")"
: GOSUB '35(F0$)
: GOTO 2390
2580 J9=1
: J6,J7,J8=0
: IF I>C2THEN GOSUB '45(I*4+23," ")
: GOSUB '37(I*4+23)
: E8$=E$
: IF E$<>" "THEN 2710
: IF I<=C2THEN GOSUB '45(I*4+23,"???")
: E8$=E$
: GOSUB '45(I*4+24," ")
: IF I>C2THEN GOSUB '45(I*4+25," ")
: GOSUB '45(I*4+26," ")
: J8=0
: GOTO 2840
2710 IF POS("3BD"=E$)=0OR VER(E$,"X##")<3THEN 2980
: GOSUB 3290
: IF D=0THEN 3000
: FOR D9=1TO C2
: GOSUB '43(D9*4+23)
: IF E$=E8$AND D9<>ITHEN 3040
: NEXT D9
: GOSUB '39(E9$(1),D)
: J6=N
: ON Q+3GOTO 2970,2970,2800,2970
: GOSUB '55(I*4+24,M-A+1)
: J8=Q
: GOSUB '43(I*4+26)
: IF E$=" "THEN GOSUB '55(I*4+26,J6)
: GOTO 2840
2800 DATA LOAD BA T#P,(0)E4$()
: GOSUB '55(I*4+24,VAL(STR(E4$(),5),2)-VAL(STR(E4$(),3),2))
: J6=0
: J8=Q
2840 IF I>1THEN 2870
: IF C2=1THEN GOSUB '55(I*4+25,J5)
: ELSE GOSUB '55(I*4+25,2+C8*C9)
: GOTO 2890
2870 IF I>C2THEN 3020
: GOSUB '55(I*4+25,2+C8*J1)
2890 J7=Q
: GOSUB '43(I*4+26)
: IF C2>1THEN IF J6=0AND Q<>0THEN J6=Q
: IF J6=0AND C2=1THEN J6=J7
: IF J6>J7AND C2=1THEN J6=J7
: IF E8$="???"THEN GOSUB '55(I*4+26,0)
: ELSE IF C2=1THEN GOSUB '55(I*4+26,MIN(J7,J8))
: GOSUB '43(I*4+26)
: J6=Q
: RETURN
2970 F0$="File "&STR(E9$(1),,8)
: IF Q<0THEN F0$=F0$&" is scratched on disk "&E8$
: ELSE F0$=F0$&" is a program file on disk "&E8$
: GOTO 3010
2980 IF E8$="???"THEN 3020
: F0$=E8$&" is not a valid disk address"
: GOTO 3010
3000 F0$="Disk "&E8$&" is not a currently selected peripheral device"
3010 GOSUB '35(F0$)
3020 J9=0
: RETURN
3040 F0$="Disk "&E8$&" is selected for another volume"
: GOTO 3010
3060 FOR I=1TO C2
: ON IGOSUB 2580
: X=I*4+23
: GOSUB '43(X)
: IF E$=" "THEN 3270
: GOSUB 3290
: IF D=0THEN 3270
: GOSUB '43(X+3)
: IF Q<2THEN 3270
: LIMITS T#D,E9$(1),A,B,C,X
: IF X=0THEN DATA SAVE DC OPEN T#D,(Q)E9$(1)
: ELSE DATA LOAD DC OPEN T#D,E9$(1)
: DSKIP #D,Q-2S
: DATA SAVE DC #D,END
: NEXT I
: STR(E3$(),,498)=STR(E$(),,498)
: IF C1>4THEN MAT REDIM E3$(6)83
: ELSE MAT REDIM E3$(24)83
: E$=E9$(1)OR ALL(20)
: GOSUB '39(E$,5)
3240 DATA SAVE DA T#P,(A)E3$()
: MAT REDIM E3$(249)8
: LOAD T#2,"IDS2PF12"1000,
3270 GOSUB '38(59," ")
: GOTO 1620
3290 MAT SEARCHE0$()<,45>,=STR(E$,,3)TO F9$STEP 3
: D=INT((VAL(F9$,2)+2)/3)
: RETURN
3699 ON ERRORE1$,E2$GOTO 3700
3700 DEFFN'31
: E$="IDS2PF11"
: IF E5$<"Y"THEN LOAD T#2,"IDS2PER1"1000,
: STOP "ERROR"