Listing of file='2229PR' on disk='vmedia/mvp-diag-2.6.2.wvd.zip'
# Sector 1564, program filename = '2229PR' 0010 COM F9$8 : F9$="2229PR" : LOAD T"2229STRT" 0020 REM % FILE "2229PR" - Part of 2229 utilities package : REM ST 01/21/1983 : REM % Recover complete platter from tape(s) 0030 COM D$3,O$3 : DIM T$30,V$(16),F$(16),K$1,A1$(16,16)64,E$20,V$8,C$2,M$60,V1$8,C(4),S$30 0040 LOAD T#1,"2229SUB"5000,8999BEG 50 0050 C1=0 : REM EXP BC : C2=0 : REM CONTINUATION FLAG : V1=1 : REM EXP TAPE SEQUENCE 0060 S=0 : REM FIRST SECTOR TO WRITE : T1=0 : REM EXPECTED TAPE FILE SECTION NUMBER : REM T$ TITLE : REM D$ SOURCE ADDRESS : REM A1$() DATA BUFFER 0070 T$="RECOVER PLATTER FROM TAPE" : $OPEN #4 : GOSUB '151 : REM TITLE 0080 REM % GET DISK ADDRESS : PRINT HEX(0F); 0090 IF D$=" "THEN D$="D11" : PRINT AT(2,0); : LINPUT "Destination platter address ",D$ : SELECT #2<D$> : ERRORA=1 : GOTO 140 0100 VERIFY T#2,(0,0)A : ERRORA=1 : GOTO 140 0110 $OPEN #2 : DATA LOAD BA T#2,(0)V$() : ERRORA=1 : GOTO 140 0120 DATA SAVE BA T#2,(0)V$() : ERRORA=1 : GOTO 140 0130 $CLOSE#2 : IF A=0THEN 150 0140 $CLOSE#2 : PRINT AT(2,35);"ERROR ";ERR;HEX(07); : GOTO 80 0150 PRINT HEX(06);AT(2,35,),AT(5,0); : PRINTUSING 160,"INDEX SECTORS = ",VAL(STR(V$(1),2,2)) : PRINTUSING 160,"END CAT. AREA = ",VAL(STR(V$(1),5,2),2)-1 : PRINTUSING 160,"CURRENT END = ",VAL(STR(V$(1),3,2),2)-1 0160 %############### ##### 0170 M$="ALL DATA WILL BE OVERWRITTEN" : GOSUB '160 0180 K$="Y" : PRINT AT(12,0); : LINPUT "Is this the correct platter?",K$ : ERRORGOTO 180 0190 IF K$="Y" OR K$="y"THEN 200 : GOTO 70 0200 PRINT HEX(06),AT(4,0,) : M$="Insert tape cartridge and press ONLINE" : GOSUB '160 : GOSUB '152 0210 GOSUB '104 : REM LOAD TAPE 0220 REM % FILE MARK SHOULD BE FIRST : GOSUB '112 : M$="File mark expected" : IF F3<>1THEN 9100 0230 REM % READ LABEL : M$="Reading volume label" : GOSUB '160 : GOSUB '112 : M$="Expected volume label" : IF F3=1THEN 9100 0240 M$="Label is not 256 bytes" : IF B<>256THEN 9100 0250 MAT COPY STR(A1$(),1,256)TO V$() : M$="First record is not Volume Header" : IF STR(V$(),1,4)<>"VHDR"THEN 9100 0260 CONVERT STR(V$(),13,2)TO V : M$=" " : GOSUB '160 : PRINT AT(4,0); : PRINTUSING 270,"Tape volume name",STR(V$(),5,8) : PRINTUSING 270,"Date ",STR(V$(),17,6) : PRINTUSING 270,"Time ",STR(V$(),23,6) : PRINTUSING 270,"Comments",STR(V$(),202,55) : PRINT : IF V=V1THEN 300 0270 %################# ################################################## ##### 0280 M$=" " : GOSUB '160 : PRINT "Expected volume sequence ";V1 : PRINT "Mounted volume is sequence ";V : PRINT "Press return to unload tape" : GOSUB '154 0290 GOSUB '105 : REM UNLOAD : GOTO 200 0300 PRINT AT(9,0); : PRINTUSING 310,V : IF C2=1THEN 320 : PRINT AT(13,0); : K$="Y" : LINPUT "Is this the correct volume? ",K$ : IF K$="Y" OR K$="y"THEN 340 : GOTO 290 0310 %Tape sequence number # 0320 REM JUMP HERE IF NOT FIRST VOLUME : IF STR(V$(),5,8)=V1$THEN 340 0330 PRINT "Incorrect volume mounted " : GOTO 620 0340 V1=V1+1 : V1$=STR(V$(),5,8) : PRINT HEX(06),AT(5,0,); : PRINTUSING 310,V : REM SAVE THIS VOLUME NAME : M$=" " : GOSUB '160 : GOSUB '112 : REM LOOK FOR NEXT FILE MARK : M$="Expected file mark" : IF F3<>1THEN 9100 0350 GOSUB '112 : REM READ FILE LABEL 0360 M$="File label not 256 bytes" : IF B<>256THEN 9100 0370 MAT COPY STR(A1$(),1,256)TO F$() 0375 IF VAL(STR(F$(),5,2),2)<>0THEN 380 : PRINT HEX(06),AT(8,0,);"Tape cartridge is file backup, not platter backup " : PRINT "Run 'Recover files from tape' utility" : GOSUB '153 : STOP : GOTO 10 0380 T1=T1+1 : M$="Tape file section incorrect" : IF VAL(STR(F$(),7,1))<>T1THEN 9100 0390 M$="File header block count not = 0" : IF STR(F$(),28,2)<>HEX(0000)THEN 9100 0400 M$="Record format byte wrong" : IF STR(F$(),30,1)<>HEX(FF)THEN 9100 0410 M$="Record/Block count incorrect" : IF MOD(VAL(STR(F$(),31,2),2),VAL(STR(F$(),33,2),2))<>2THEN 9100 0420 M$="Not a platter backup (System ID incorrect)" : IF STR(F$(),35,1)<>HEX(11)THEN 9100 0430 GOTO 450 : M$="File name is:" : GOSUB '160 : PRINTUSING 440,STR(F$(),69,MIN(POS(STR(F$(),69)=HEX(00)),80)) 0440 %######################################################################## ######## 0450 REM % START READING DATA : REM NEXT SECTOR TO WRITE IS S : PRINT AT(10,0,); : C1=0 : REM EXPECTED PHYSICAL RECORD COUNT 0460 GOSUB '112 : IF STR(R$,1,1)=HEX(07)THEN 520 : REM JUMP IF LABEL IS HIT 0470 M$="Data not on page boundary" : IF MOD(B,256)<>0THEN 9100 0480 B1=1 : REM POINTER INTO ARRAY 0490 $OPEN #2 : PRINT HEX(06),AT(10,0);"Recovering sectors ";S;" to ";S+(B/256)-1 0500 DATA SAVE BA T#2,(S,S)STR(A1$(),B1,256) : ERRORGOTO 9000 0510 B1=B1+256 : IF B1<BTHEN 500 : $CLOSE#2 : GOTO 460 : REM GET NEXT BLOCK 0520 REM % FILE MARK JUMPS HERE, SHOULD BE END LABEL 0530 GOSUB '112 : MAT COPY STR(A1$(),1,256)TO F$() : M$="File trailer label not 256 bytes" : IF B<>256THEN 9100 0540 M$="File trailer block count incorrect" : IF VAL(STR(F$(),28,2),2)<>C1THEN 9100 0550 C2=0 : IF STR(F$(),44,1)=HEX(00)THEN 560 : C2=1 : REM CONTINUATION FLAG 0560 GOSUB '112 : REM LOOK FOR FILE MARK : M$="Expected file mark" : IF F3<>1THEN 9100 0570 GOSUB '112 : MAT COPY STR(A1$(),1,256)TO V$() : REM VOLUME TRAILER : M$="Expected volume trailer label" : IF F3<>0THEN 9100 0580 MAT COPY STR(A1$(),1,256)TO V$() 0590 STR(V$(),39,8)=STR(V$(),5,8) : REM NEXT VOLUME NAME 0600 GOSUB '105 : REM UNLOAD TAPE 0610 IF C2=1THEN 620 : M$="Platter recovery done - remove cartridge" : GOSUB '160 : GOSUB '153 : STOP : GOTO 10 0620 PRINT HEX(06);AT(9,0,); : M$="Insert next cartridge" : GOSUB '160 : GOSUB '152 : GOTO 210 9000 PRINT AT(10,0,79);"Disk error "; ERR : $CLOSE : STOP : GOTO 10 9050 PRINT AT(10,0,79);"Tape error ";E : PRINT E$ : $CLOSE : STOP : GOTO 10 9100 REM FATAL ERROR TERMINATOR : PRINT AT(10,0,80);M$ : $CLOSE : STOP : GOTO 10