Listing of file='IDS2PU88' on disk='vmedia/701-2715B.wvd.zip'
# Sector 701, program filename = 'IDS2PU88'
1000 REM - "IDS2PU88" -- Release 2.1 -- KEY FILE RECOVERY
1030 IF F6$(17)<"^"THEN SELECT @PART"IDS2SUBM"
: DIM C$(6)83
: GOSUB '32("IDS2sU88")
1060 GOSUB '34(1)
: E2$=E$
: E3$=E2$OR ALL(20)
: GOSUB '39(E3$,5)
: IF Q=2THEN 1080
: GOSUB '38(106," ")
: GOTO 1060
1080 DATA LOAD DA T#P,(A)C$()
: CONVERT STR(C$(),10,1)TO T
: IF T=2OR T=3THEN 1100
: IF T=1OR T=4THEN GOSUB '38(109," ")
: IF T>4THEN GOSUB '38(110," ")
: GOTO 1060
1100 GOSUB '45(2,"N")
: GOSUB '34(2)
: IF E$="Y"OR E$="y"OR Q=1THEN K=9
1130 GOSUB '38(129," ")
: GOSUB '34(250)
: IF Q=32THEN 1140
: IF Q=31THEN LOAD TR3$(1)1000,
: IF Q=33THEN 1060
: GOTO 1130
1140 MAT SEARCHE1$(),=STR(E2$,,8)TO F9$STEP 8
: V=INT((VAL(F9$,2)+55)/56)
: IF V>0THEN 1620
: IF F6$(53)<>"Y"THEN 1190
: GOSUB '38(105," ")
: KEYIN E6$
: LOAD T#4,R3$(1)
1190 GOSUB '39(E3$,5)
: MAT SEARCHC$()<275,128>,=HEX(2020202020202020)TO F9$STEP 8
: CONVERT STR(C$(),217,1)TO V
: H=V+(VAL(STR(F9$),2)-1)/8
: IF F9$=HEX(0000)THEN H=V+16
: CONVERT STR(C$(),199,2)TO E
: E=E+3
: F0$="IDS2SUB1IDS2SUB2IDS2SUB3IDS2SUB4IDS2SUB5IDS2SUB6IDS2LOCL"
1220 G=500
: COM CLEAR Y
: IF F6$(17)=HEX(60)THEN 1230
: LOAD T#2,"IDS2P001"1000,1001BEG 1250
1230 LOAD T#2,"IDS2P001"0,1001BEG 1240
1240 LOAD T#2,<7>F0$0,999BEG 1250
1250 IF F6$(17)<"^"THEN SELECT @PART"IDS2SUBM"
: DATA LOAD DA T#P,(A)C$()
: MAT REDIM E3$(9)83
: F2$="IDS2fs "
: IF R0<#PARTTHEN STOP #
: A=(R0-#PART)/16+1
: IF A>0THEN CONVERT ATO STR(F2$,7,2),(##)
: DATA LOAD DC OPEN T#2,F2$
: DATA LOAD DC #2,E3$()
: MAT REDIM E$(6)83
: L=0
: FOR J=1TO 17
: J1$=E2$
: E$()=C$()
: IF J=1THEN 1370
: J1$=STR(C$(),259+8*J,8)
: IF J1$=" "THEN 1480
: J4$=J1$OR ALL(20)
1350 GOSUB '39(J4$,5)
: IF Q=2THEN 1360
: GOSUB '38(78,J4$)
: END
1360 DATA LOAD DA T#P,(A)E$()
1370 J5$=STR(E$(),105,3)
: GOSUB 2010
: GOSUB '39(J1$,R)
: R=P
: IF Q=2THEN 1400
: GOSUB '38(107," ")
: END
1400 L=L+1
: E1$(L)=STR(E$(),2,8)&BIN(R)&HEX(0001)&STR(E$(),403,1)&STR(E$(),405,42)&BI
N(A,2)
: UNPACK(####)STR(E1$(L),13)TO Q
: STR(E1$(L),13,2)=BIN(Q,2)
: S=(N-2)/VAL(STR(E1$(L),43),2)
: STR(E1$(L),46,2)=BIN(S,2)
: S=S-VAL(STR(E1$(L),45,1))
: A=VAL(STR(E1$(L),50))
: B=VAL(STR(E1$(L),51))
: STR(E1$(L),19,2)=BIN(S*B/A,2)
1470 IF J=1THEN 1500
: STR(E1$(L),13,2)=STR(E1$(VAL(STR(E1$(L),10),2)),13,2)
1480 GOTO 1590
1500 IF V=1THEN 1590
: FOR X=1TO V-1
: J5$=STR(C$(),251+3*X,3)
: IF J5$=" "THEN 1590
: GOSUB 2010
: GOSUB '39(STR(C$(),2,8),R)
: R=P
: IF Q=2THEN 1550
: GOSUB '38(108," ")
: END
1550 L=L+1
: E1$(L)=STR(C$(),2,8)&BIN(R)&HEX(0001)&HEX(00)&STR(C$(),405,42)&BIN(A,2)
: F9$=BIN((N-2)/VAL(STR(E1$(L),43),2),2)
: S=VAL(F9$,2)
: A=VAL(STR(E1$(L),50))
: B=VAL(STR(E1$(L),51))
: STR(E1$(L),45,5)=HEX(00)&STR(F9$,,2)&BIN(S*B/A,2)
: STR(E1$(L),19,2)=STR(E1$(L),48)
: STR(E1$(L),13,2)=STR(E1$(VAL(STR(E1$(L),10),2)),13,2)
: NEXT X
1590 NEXT J
: V=1
1620 GOSUB '47
: D5=D
: C5=B
: J5=S
: IF R8$>=STR(E1$(),54,1)THEN 1650
: GOSUB '38(42,R8$)
: GOTO 1060
1650 GOSUB '39(E2$,D5)
: D5=P
: IF Q=2THEN 1660
: GOSUB '38(107," ")
: END
1660 J5=(N-2)/C5
: DIM F2$(256)1
: C9=1E9
: Z=0
: U=0
: FOR J1=0TO C5-1
: DATA LOAD BA T#D5,(A+J1*J5)F2$()
: J=VAL(STR(F2$(),11),2)
: Z=Z+VAL(STR(F2$(),9),2)
: GOSUB 2030
: IF J>=C9OR F9=9THEN 1760
: C9=J
: U=J1+1
1760 NEXT J1
: IF C9=0THEN 1790
1780 GOSUB '38(111," ")
: GOSUB '34(250)
: GOTO 1780
1790 IF K<>9THEN 1960
1800 D5=VAL(STR(E1$(V),9))
: GOSUB '39(E2$,D5)
: D5=P
: IF Q=2THEN 1820
1820 FOR S=0TO N-3
: DATA LOAD BA T#D5,(A+S)F2$()
: GOSUB 2030
: IF F=0THEN 1920
: CONVERT A+STO STR(E8$,8,5),(#####)
: GOSUB '38(130,STR(E8$,8,5))
: STR(F2$(),1,1)=HEX(82)
: STR(F2$(),3,1),STR(F2$(),87,1),STR(F2$(),171,1)=HEX(D3)
: STR(F2$(),255,1)=HEX(FD)
: DATA SAVE BA T#D5,(A+S)F2$()
1920 NEXT S
: V=V+1
: IF LEN(E1$())/56<VTHEN 1960
: IF STR(E1$(V),,8)=E2$THEN 1800
1960 LOAD T#2,"IDS2PU90"1000,
1970 F0$="Device address "&STR(C$(),105,3)&" for file "&HEX(22)&STR(C$(),2,8)&
HEX(22)&" has not been selected."
: GOTO 1990
1980 F0$="Data file "&HEX(22)&STR(C$(),2,8)&HEX(22)&" not found on device "&ST
R(E$(),R*3+83,3)&"."
: GOTO 1990
1990 PRINT AT(20,10);HEX(07);"Error ";HEX(0E);F0$
: STOP
2010 MAT SEARCHE3$()<#PART*45-17,45>,=J5$TO F9$STEP 3
: IF F9$=HEX(0000)THEN 1970
: R=INT((VAL(F9$,2)+2)/3)
: RETURN
2030 F=0
: E6$=STR(F2$(),1,1)
: IF E6$<>HEX(82)AND E6$<>HEX(81)THEN F=9
: IF STR(F2$(),3,1)<>HEX(D3)OR STR(F2$(),87,1)<>HEX(D3)OR STR(F2$(),171,1)<
>HEX(D3)OR STR(F2$(),255,1)<>HEX(FD)THEN F=9
: RETURN
3699 ON ERRORE1$,E2$GOTO 3700
3700 DEFFN'31
: E$="IDS2PU88"
: IF E5$<"Y"THEN LOAD T#2,"IDS2PER1"1000,
: STOP "ERROR"