image of READY prompt

Wang2200.org

Listing of file='2229FR' on disk='vmedia/mvp-diag-2.6.2.wvd.zip'

# Sector 1625, program filename = '2229FR'
0010 COM F9$8
   : F9$="2229FR"
   : LOAD T"2229STRT"
0020 REM % FILE "2229FR" - Part of 2229 utilities package
0030 REM %  Recover all files from tape(s)   -   ST   01/21/1983
0040 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$70,V1$8,F2$8,I1$5,
     L$2,F1$8,Y$1,F3$8,Z$1,M3$15,J$8,C(4),S4$1,S$30
0050 LOAD T#1,"2229SUB"5000,8999BEG 60
0060 C1=0
   : REM EXP BC
   : C2=0
   : REM CONTINUATION FLAG OFF
   : C3=0
   : REM FIRST VOL IN SERIES
   : S=0
   : REM FIRST SECTOR TO WRITE
   : T2=0
   : REM EXPECTED TAPE FILE SECTION NUMBER
   : V=1
   : REM EXPECTED TAPE SEQUENCE NUMBER
0070 I1$="INDEX"
   : ADD(STR(I1$),80)
   : S4$="M"
   : REM MVP (2200) FILES
0080 T$="RECOVER FILES FROM TAPE"
   : $OPEN #4
   : GOSUB '151
0090 REM % GET OUTPUT DISK ADDRESS
   : PRINT HEX(0F);
   : IF D$=" "THEN D$="D11"
   : PRINT AT(3,0);
   : LINPUT "File output 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(3,30);"ERROR ";ERR;HEX(07);
   : GOTO 90
0150 PRINT HEX(06);AT(3,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 K$="Y"
   : PRINT AT(09,0);
   : LINPUT "Is this the correct output platter?",K$
   : ERRORGOTO 170
0180 IF K$="Y" OR K$="y"THEN 190
   : GOTO 80
0190 PRINT HEX(06),AT(5,0,)
0200 M$="Insert tape cartridge and press ONLINE"
   : GOSUB '160
   : GOSUB '152
0210 PRINT HEX(06);AT(5,0,);
   : 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
   : GOSUB '112
   : M$="File mark expected"
   : IF F3=1THEN 9100
   : M$="Label is not 256 bytes"
   : IF B<>256THEN 9100
   : MAT COPY STR(A1$(),1,256)TO V$()
   : M$="First record is not Volume Header"
   : IF STR(V$(),1,4)<>"VHDR"THEN 9100
0240 IF V>1THEN 250
   : PRINT AT(05,0,);"Tape volume name";AT(5,21);STR(V$(),5,8)
   : PRINT AT(6,0);"Date";AT(6,21);STR(V$(),17,6)
   : PRINT AT(7,0);"Time ";AT(7,21);STR(V$(),23,6)
   : PRINT "Comments"
   : PRINT AT(8,21);STR(V$(),202)
0250 T1=1
   : REM EXP TAPE FILE SEQUENCE NUMBER
0260 IF C2=1THEN 270
   : IF C3=1THEN 270
   : IF V1$<>" "THEN 270
   : REM CONT FLAG OR VOL
   : K$="Y"
   : M$="Is this the correct volume? "
   : GOSUB '160
   : PRINT AT(10,28);
   : LINPUT -K$
   : IF K$="Y" OR K$="y"THEN 270
   : GOTO 280
0270 CONVERT STR(V$(),13,2)TO V1
   : IF V1=VTHEN 290
   : PRINT AT(14,0);"Volume mounted is tape sequence number";V1
   : PRINT "Expected sequence number";V
   : PRINT
   : PRINT "PRESS RETURN TO UNLOAD TAPE"
   : GOSUB '154
   : PRINT HEX(06),AT(4,0,)
0280 GOSUB '105
   : REM UNLOAD TAPE
   : GOTO 200
0290 V=V+1
   : REM EXP SEQ #
   : M$=" "
   : GOSUB '160
   : GOSUB '112
   : REM LOOK FOR NEXT FILE MARK
   : M$="Expected file mark"
   : IF F3<>1THEN 9100
   : GOSUB '112
   : REM READ FILE LABEL
0295 IF VAL(STR(A1$(),5,2),2)=0THEN 300
   : PRINT HEX(06),AT(8,0,);"Cartridge is platter backup, not file backup"
   : PRINT "Run 'Recover platter from tape' utility"
   : GOSUB '153
   : STOP
   : GOTO 10
0300 M$="File label is not 256 bytes"
   : IF B<>256THEN 9100
   : MAT COPY STR(A1$(),1,256)TO F$()
   : I=0
   : IF VAL(STR(F$(),5,2),2)=T1THEN 330
   : M$="Tape file sequence number out of order"
   : IF T1>1THEN 9100
   : REM ERROR IF NOT INDEX
0310 I=1
   : REM INDEX FILE
   : M$="Do you want to examine tape index?"
   : GOSUB '160
   : PRINT AT(10,35);
   : K$="Y"
   : K1=0
   : LINPUT -K$
   : IF K$="Y"OR K$="y"THEN K1=1
   : C1=0
   : GOTO 340
0320 REM
0330 T1=T1+1
   : IF C2=0THEN 340
   : REM CHECK TAPE FILE SECTION NUMBER FOR CONTINUED TAPES
0340 M$="File header block count not = 0"
   : IF STR(F$(),28,2)<>HEX(0000)THEN 9100
   : M$="Record format byte wrong"
   : IF STR(F$(),30,1)<>HEX(FF)THEN 9100
   : M$="Record/Block count incorrect"
   : IF MOD(VAL(STR(F$(),31,2),2),VAL(STR(F$(),33,2),2))<>2THEN 9100
   : IF STR(F$(),35,1)<>HEX(11)THEN S4$="O"
   : REM NOT 2200
0350 IF I=1THEN 560
   : IF C2=0THEN 360
   : REM JUMP IF NEW FILE
   : IF STR(F$(),69,8)=F2$THEN 540
   : REM CHECK CONT FILE FOR PROPER NAME
   : REM CONTINUED FILE INCORRECT
0360 F1$=STR(F$(),69,8)
   : ON KGOTO 370,400,430,440,450
0370 REM ADD ONLY
   : GOSUB '57
   : IF A=0THEN 380
   : PRINT AT(10,0,79);F1$;" is already on disk"
   : $GIO(75FF 75FF)
   : GOTO 510
0380 IF STR(F$(),36,1)="D"THEN GOSUB '51
   : ELSE GOSUB '50
   : REM OPEN NEW FILE
0390 GOTO 520
0400 REM REPLACE ONLY
   : GOSUB '57
   : IF A<>0THEN 410
   : PRINT AT(10,0,79);F1$;" is not on disk"
   : $GIO(75FF 75FF)
   : GOTO 510
0410 IF R<=R1THEN 520
   : REM JUMP IF ROOM ON DISK
   : GOSUB '54
   : REM GET JUNK FILE NAME
0420 GOSUB '52
   : REM JUNK FILE
   : GOTO 380
   : REM JUMP TO CREATE NEW FILE AND RECOVER
0430 REM ADD/REPLACE
   : GOSUB '57
   : REM GET LIMITS
   : IF A=0THEN 380
   : REM JUMP IF NOT ON DISK
   : GOTO 410
   : REM ELSE REPLACE
0440 REM SINGLE FILE RECOVERY
   : IF F3$<>F1$THEN 510
   : K=4.5
   : REM SHOW THAT FILE FOUND
0450 REM QUERY EACH FILE
   : PRINT AT(10,0,79);"Do you want to retrieve file ";F1$;"  ? ";
   : Y$="Y"
   : LINPUT -Y$
   : IF Y$="Y"THEN 460
   : IF Y$<>"N"THEN 450
   : GOTO 510
0460 GOSUB '57
   : REM GET LIMITS
   : IF A=0THEN 490
   : REM JUMP IF NOT ON DISK
0470 PRINT HEX(06),AT(10,0,79)
   : PRINT F1$;" is already on disk - OK to overwrite?";
   : LINPUT -Y$
   : IF Y$="Y"THEN 480
   : IF Y$<>"N"THEN 470
   : GOTO 500
0480 IF R<=R1THEN 520
   : REM JUMP IF SIZE OK
   : GOSUB '54
   : GOSUB '56
   : IF Y$="Y"THEN 420
   : GOTO 500
0490 GOSUB '53
   : IF Y$="Y"THEN 380
   : REM JUMP TO CREATE FILE
0500 REM NEGATIVE RESPONSE FROM USER - GET RETURN BEFORE PROCEEDING
   : PRINT HEX(06),AT(10,0,)
   : PRINT "Press return to continue"
   : GOSUB '154
0510 REM SPACE FILE MARK
   : GOSUB '110
   : GOTO 750
0520 LIMITS T#2,F1$,H1,H2,A,A
   : R1=H2-H1+1
   : REM FILE SIZE ON DISK
   : R=VAL(STR(F$(),42,2),2)
   : REM FILE SIZE ON TAPE
0530 S=H1
   : G3=H2
0540 REM % START READING DATA
   : REM NEXT SECTOR TO WRITE IS S
   : PRINT HEX(06);AT(10,0,);
0550 C1=0
   : REM EXPECTED PHYSICAL RECORD COUNT
   : M$=" "
   : GOSUB '160
   : PRINT AT(10,0);"Recovering file ";VAL(STR(F$(),5,2),2)
   : PRINT AT(11,0);HEX(020402000E);STR(F$(),69,MAX(POS(STR(F$(),69,80)=HEX(00
     )),80));HEX(0F)
0560 GOSUB '112
   : IF F3=1THEN 650
   : REM JUMP IF LABEL IS HIT
   : M$="Data not on page boundary"
   : IF MOD(B,256)<>0THEN 9100
0570 IF I=0THEN 620
   : IF K1=0THEN 560
   : REM PRINT FILE NAMES IN INDEX
   : PRINT HEX(06),AT(6,0,)
   : PRINT "Files on this volume:"
   : MAT SEARCHSTR(A1$(),1,MIN(B,16321)),=HEX(00)TO L$STEP 80
   : L=(VAL(L$,2)-1)/80
   : REM # OF NAMES
   : L5,L6=1
   : REM POINT TO FIRST NAME
0580 PRINT HEX(06);AT(8,0,);
   : L4=0
0590 PRINT AT(L4+8,0);STR(A1$(),L5,80)
   : L6=L6+1
   : IF L6>LTHEN 600
   : REM JUMP IF DONE
   : L5=L5+80
   : REM POINTER INTO ARRAY
   : IF L5>=16320THEN 560
   : REM READ NEXT RECORD
   : L4=L4+1
   : IF L4<=09THEN 590
   : IF K1=0THEN 580
0600 PRINT
   : PRINT "Press RETURN to see next screen"
   : PRINT "Press RUN to skip rest of index"
   : GOSUB '154
   : IF K$=HEX(82)THEN 610
   : IF L6>LTHEN 560
   : GOTO 580
0610 K1=0
   : GOTO 560
0620 B1=1
   : REM POINTER INTO ARRAY
   : $OPEN #2
0630 DATA SAVE BA T#2,(S,S)STR(A1$(),B1,256)
   : ERRORGOTO 9000
0640 B1=B1+256
   : IF B1<BTHEN 630
   : $CLOSE#2
   : GOTO 560
   : REM GET NEXT BLOCK
0650 REM % FILE MARK JUMPS HERE, SHOULD BE END LABEL
   : IF I=0THEN 670
   : PRINT HEX(06),AT(4,0,);"Tape volume name";AT(4,21);STR(V$(),5,8);AT(5,0);
   : PRINTUSING 660,V-1
0660 %Tape sequence number #
0670 GOSUB '112
   : MAT COPY STR(A1$(),1,256)TO F$()
   : M$="File trailer label not 256 bytes"
   : IF B<>256THEN 9100
   : M$="File trailer block count incorrect"
   : IF VAL(STR(F$(),28,2),2)<>C1THEN 9100
0680 IF I=0THEN 740
0690 PRINT HEX(06),AT(6,0,)
   : PRINT AT(7,0);"1 - Add"
   : PRINT "2 - Replace"
   : PRINT "3 - Add/Replace"
   : PRINT "4 - Recover single file"
   : PRINT "5 - Query each file"
0700 PRINT AT(13,0);
   : INPUT "Select recovery option",K
   : ERRORGOTO 700
0710 IF K<1OR K>5THEN 700
   : IF K<>4THEN 730
0720 PRINT
   : LINPUT "File name ",-F3$
0730 PRINT HEX(06),AT(6,0,)
   : RESTORE LINE950,K
   : READ M3$
   : PRINT AT(3,40);"Recovery option: ";M3$
   : GOTO 770
0740 C2=0
   : IF STR(F$(),44,1)=HEX(00)THEN 750
   : C2=1
   : REM CONTINUATION FLAG
   : F2$=STR(F$(),69,8)
0750 IF F3$=F1$AND C2=0AND K=4.5THEN 800
0770 GOSUB '110
   : REM LOOK FOR FILE MARK
   : M$="Expected file mark"
   : IF F3<>1THEN 9100
0780 GOSUB '112
   : IF STR(A1$(),1,4)<>"VEND"THEN 300
   : REM JUMP IF NOT VOL LABEL
   : MAT COPY STR(A1$(),1,256)TO V$()
   : V1$=STR(V$(),39,8)
0790 M$="File is not on tape"
   : IF C2=0AND K=4 AND V1$="  "THEN 9100
0800 GOSUB '105
   : REM UNLOAD TAPE
   : IF E<>0THEN 9050
0810 IF C2=1THEN 830
   : IF F3$=F1$AND K=4.5THEN 820
   : IF K=5AND C2=0THEN 820
   : IF V1$<>" "THEN 830
0820 M$="File recovery done -  Remove cartridge"
   : GOSUB '160
   : GOSUB '153
   : STOP
0830 M$="Files are continued on next cartridge - Remove this cartridge"
   : GOSUB '160
0840 PRINT "Insert next cartridge and press ONLINE"
   : GOSUB '152
   : GOTO 210
0850 DEFFN'50
   : REM OPEN NEW PROGRAM FILE
   : SAVE DC T#2,(R-3)F1$10,10
   : RETURN
0860 DEFFN'51
   : REM OPEN NEW DATA FILE
   : DATA SAVE DC OPEN T#2,(R)F1$
   : RETURN
0870 DEFFN'52
   : REM JUNK FILE
   : SCRATCH T#2,F1$
   : DATA SAVE DC OPEN T#2,F1$,J$
   : SCRATCH T#2,J$
   : RETURN
0880 DEFFN'53
0890 PRINT HEX(06),AT(10,0,79);F1$;" does not exist - OK to create new file (Y
     /N) ";
   : Y$="Y"
   : LINPUT -Y$
   : IF Y$="Y"OR Y$="N"THEN RETURN
   : GOTO 890
0900 DEFFN'54
   : PRINT HEX(06),AT(10,0,79);"Old file is too small"
   : J$="JUNKAAA"
0910 LIMITS T#2,J$,A,A,A,A
   : IF A=0THEN RETURN
   : A=POS(-J$<"Z")
   : STR(J$,A,1)=ADDHEX(01)
   : IF A<8THEN STR(J$,A+1)=ALL("A")
   : GOTO 910
0920 DEFFN'56
0930 PRINT HEX(06),AT(11,0);"Can the file be junked (renamed to ";J$;" & scrat
     ched)?";
   : Y$="Y"
   : LINPUT -Y$
   : IF Y$="Y"OR Y$="N"THEN RETURN
   : GOTO 930
0940 DEFFN'57
   : REM CHECK FOR FILE ON DISK
   : LIMITS T#2,F1$,H1,H2,A,A
   : R1=H2-H1+1
   : REM FILE SIZE ON DISK
   : R=VAL(STR(F$(),42,2),2)
   : REM FILE SIZE ON TAPE
   : RETURN
0950 DATA "Add","Replace","Add/Replace","Single file","Query each file"
9000 $CLOSE
   : PRINT AT(10,0,79);"Disk error "; ERR
   : STOP
   : GOTO 20
9050 $CLOSE
   : PRINT AT(10,0,79);"Tape error ";E
   : PRINT E$
   : STOP
   : GOTO 20
9100 REM FATAL ERROR TERMINATOR
   : PRINT AT(10,0,80);M$
   : $CLOSE
   : STOP
   : GOTO 20