Listing of file='@SCTAPEB' on disk='vmedia/turbo-1.30.01.wvd.zip'
# Sector 3025, program filename = '@SCTAPEB' 0010 REM % @SCTAPEB Program - KKB 03/12/91 0011 REM % Modified for Internal/External Backup Must have OS 1.16x or higher 05/07/91 0012 REM % REL 0.4 05/19/92 ADDED TICKS AND 3BYTE SUPPORT 0013 REM % REL 0.5 05/28/92 CORRECTED MORE THAN A SCREEN 0014 REM % REL 0.5.1 06/04/92 Added select 3 on and validate sectors 0015 REM % REL 0.5.2 REMOVED THE FIRST SCREEN AND DUPLICATE PLATTER PROBLEM. 0016 REM % REL 0.5.3 06/10/92 FIXED ILLEGAL DISK ADDRESS PROBLEM 0017 REM % REL 0.6.0 Tape error traps added 07/08/92 0050 REM % (C) Copyright, Wang Laboratories, Inc., 1992. All rights reserved. 0060 DIM A$(16384)1,B$(32)70,C$(16),D$3,D0$3,D1$3,D2$3,D9$9,E$1,E1$1,F$1,G$8,H $8,J$1,K$1,M$50,M1$50,M2$50,N$49,M(32),S(32),E(32),T1$80,T$1,U$(8)48,T2$6 ,T3$8,T4$4 0070 T$=" " : P=1 : D$=SELECT DISK : STR(D$,1,1)="D" : STR(D$,3,1)="F" : CONVERT STR(D$,2,1)TO C : C=C+4 : CONVERT CTO STR(D$,2,1),(#) : PRINT HEX(0306); : O=1 : D0$=D$ 0071 REM % CHANGE J$="O" FOR OPEN TYPE BACKUP : J$="W" 0080 G1$=DATE : D9$=STR(G1$,3,2)&"/"&STR(G1$,5,2)&"/"&STR(G1$,,2) : SELECT 3OFF 0090 REM % B$() = 70*32 byte directory : REM 01,49 = name/description : REM 50,3 = disk address : REM 53,3 = start address : REM 56,3 = end address : REM 59,3 = # blocks : REM 62,3 = end bytes left : REM 65,1 = Platter count : REM 66,1 = backup type : REM (1),67,1 = Total Platters 0100 REM (1),68,3 = directory ID 'DiR' : STR(B$(1),68,3)="DiR" 0110 T1$="B a c k u p D i s k P l a t t e r s T o S C S I T a p e" : PRINT AT(0,40-LEN(T1$)/2);HEX(0E);T1$;HEX(0F); 0120 GOSUB '50("(c) Copyright Wang Laboratories, Inc., 1992"," All rights r eserved.") 0130 PRINT AT(23,61);"FN/TAB - Exit";AT(22,61);"RETURN - Proceed"; 0140 REM % Get The tape and disk addresses 0150 D$=D0$ : PRINT AT(2,12);"Address of SCSI Tape drive (D5F, D6F, or D7F): "; : LINPUT HEX(0E),-D$ : IF D$="RUN"THEN 150 : $TRAN(D$,"DdBbFf")R : GOSUB '50(" "," ") : IF POS("DB"=STR(D$,1,1))<>0AND POS("123567"=STR(D$,2,1))<>0AND STR(D$,3,1 )="F"THEN 160 : GOSUB '50(HEX(0E),"Invalid Address") : GOTO 130 0160 SELECT #2<D$> : REM % CHECK IF SCSI CONTROLLER : GOSUB '50(" "," ") : GOSUB '60("Getting SCSI Controller status") : Z=0 : $SCSICONFIGT#2,U$() : ERRORZ=ERR 0170 FOR X=1TO 8 : IF STR(U$(X),1,1)=HEX(81)AND POS("567"=STR(D$,2,1))<>0THEN DO : T1$=ALL(20) : T1$=STR(U$(X),20,28) : PRINT AT(1,40-LEN(T1$)/2);STR(T1$,1,LEN(T1$)); : X1=1 : END DO : NEXT X 0180 GOSUB '50(" "," ") : IF Z<>0THEN GOSUB '60("Not A SCSI Controller") : IF Z<>0THEN GOTO 130 0185 IF X1<>1THEN GOSUB '60("No Tape Drive") : IF X1<>1THEN GOTO 130 0190 GOSUB '50(" "," ") : IF J$="W"THEN 220 0200 REM : IF J$="O"THEN GOSUB 1640 : GOTO 230 0220 REM % Erase Y/N : E1$="Y" : PRINT AT(3,15);"Append to tape (A/a) / Erase tape (Y or N): ";HEX(0E); : LINPUT -E1$ : IF POS("Aa"=E1$)<>0AND J$="W"THEN GOSUB '50(HEX(06070E),"Append not suppo rted in WANG Mode") : T$=E1$ : PRINT HEX(06); : $TRAN(E1$,"YyNn")R : IF POS("YN"=E1$)=0THEN 220 : GOSUB '50(" "," ") 0230 IF J$="O"THEN 240 : ELSE GOTO 250 0240 IF POS("Aa"=E1$)<>0THEN GOSUB 1070 0250 REM % PLATTER DATA : PRINT AT(7,1);"\A0\A0\A0\A0\A0\CE\E1\ED\E5\A0\F4\EF\A0\E2\E5\A0\F0\F5\F4\ A0\E9\EE\A0\D4\E1\F0\E5\A0\C4\E9\F2\E5\E3\F4\EF\F2\F9\A0\A0\A0\A0\A0\A0 \ D0\EC\E1\F4\F4\E5\F2 \A0\D3\F4\E1\F2\F4\A0\A0 \A0\A0\C5\EE\E4\A0\A0\A0 \ A0\A0\A0\CD\E2\A0\A0" : R=7 : N$=" " : K=1 : REM IF POS("Ee"=E1$)<>0THEN DO K=1 B$()=" " ENDDO 0260 REM % Directory Data input 0270 A,B,C,D,E,A0=0 : D0$=D1$ 0280 D1$=D0$ : Z=0 : PRINT AT(5,4,75);"Address of Disk platter to Backup (blank, if no more): "; : LINPUT HEX(0E),-D1$ : IF D1$=" "THEN 619 : IF D1$="RUN"THEN 280 0290 GOSUB '50(" "," ") 0300 GOSUB '300(D1$) : D1$=D2$ : IF D1$="340"THEN 330 0310 IF POS("DB3"=STR(D1$,1,1))<>0AND POS("123567"=STR(D1$,2,1))<>0AND VER(STR (D1$,3,1),"H")<>0AND D1$<>"D5F"AND D1$<>"D6F"AND D1$<>"D7F"THEN 320 : GOSUB '50(HEX(0E),"Illegal disk platter address") : GOTO 280 0320 IF POS("3B"=STR(D1$,1,1))=0OR POS("123"=STR(D1$,2,1))=0OR STR(D1$,3,1)<>" 0"THEN 330 : IF STR(D1$,1,1)="3"AND STR(D1$,2,1)<>"4"THEN STR(D1$,3,1)="1" : STR(D1$,1,1)="D" 0330 SELECT #1<D1$> : ERRORGOSUB '50(HEX(0E),"Invalid address") : GOTO 280 0340 REM % Go and verify if a valid disk : DATA LOAD BMT#1,(0)K$ : ERRORDO : Z=ERR : GOSUB 1490 : IF Z>89THEN GOSUB '60(M$) : END DO : IF Z<>0THEN GOTO 280 0350 IF K<32THEN 360 : GOSUB '50("Exceeded number of platters allowed","Complete backup, then a ppend additional platters") : D1$=" " : GOTO 280 0360 MAT SEARCHSTR(B$(),50),=D1$TO S1$STEP 70 : IF STR(S1$,1,2)=HEX(0000)THEN 380 0370 PRINT AT(5,4,80);"Platter /";D1$;" already in list. Do you wish it again? "; : K$="N" : LINPUT -K$ : IF POS("Yy"=K$)<>0THEN 380 : IF POS("Nn"=K$)<>0THEN 270 0380 REM % Update display : R=R+1 : IF R<=19THEN 410 0390 PRINT AT(R,72);BOX(0,-6) : R=7 : PRINT AT(R+1,0,1120); : R=R+1 0400 PRINT AT(R+1,72);BOX(0,6); : R=R+1 0410 PRINT AT(R,45);"/";D1$ : N$=D9$ 0420 REM 0430 REM % Get Start and end addresses 0440 GOSUB '301 : GOSUB '302 : IF F=1THEN GOSUB '303 0450 G$=BIN(A) : STR(G$,,1)=STR(G$,,1)ADDHEX(30) : IF MOD(B,512)<>0THEN B=B+1 : CONVERT BTO H$,(########) : GOSUB '603(H$) : H$=L$ : IF B=0THEN DO : H$="1" : B=1 : END DO 0460 PRINT AT(5,4,80);"Platter name: "; : LINPUT HEX(0E),-N$ : PRINT HEX(06);AT(R,1,43);STR(N$,,43); 0470 PRINT AT(5,0,79);AT(5,10);"Starting Sector (default = begining of platter ): "; : LINPUT HEX(0E),-G$ : CONVERT G$TO A : ERRORGOTO 470 0480 IF F=1THEN GOSUB 1360 0490 REM VALIDATE SECTOR : GOSUB '304 : IF A0=0THEN 500 : IF A0<>0THEN GOSUB '50(HEX(07060E),"Invalid Sector") : GOTO 470 0500 S(K)=A : IF A>65023THEN SELECT 3ON 0510 PRINT AT(R,53); : PRINTUSING "########",A; 0520 PRINT AT(5,0,79);AT(5,1);"Ending Sector (default = current end of catalog ued data): "; : LINPUT HEX(0E),-H$ : CONVERT H$TO B : ERRORGOTO 520 0530 IF F=1THEN GOSUB 1370 0540 REM VALIDATE SECTOR : GOSUB '305 : IF A0=0THEN 550 : IF A0<>0THEN GOSUB '50(HEX(07060E),"Invalid Sector") : GOTO 520 0550 E(K)=B : IF B>65023THEN SELECT 3ON 0560 PRINT AT(R,62); : PRINTUSING "########",B; : PRINT AT(R,72);BOX(0,-6);AT(R+1,72);BOX(0,6);AT(R,72); : G=ROUND(((1+B-A)/4096,1) : PRINTUSING "####.#",G; : M(K)=G : M=M+G 0570 PRINT AT(5,0,80);AT(5,4);"Accept this entry Y/N ? "; : K$="Y" : LINPUT HEX(0E),-K$ : IF POS("Yy"=K$)<>0THEN 590 : IF POS("Nn"=K$)<>0THEN 580 : ELSE GOTO 570 0580 IF K$="N"OR K$="n"THEN R=R-1 : GOTO 270 0590 C=(B-A)+1 : D=INT((C*256)/16384) : E=MOD((C*256),16384) : STR(B$(K),53,3)=BIN(A,3) : STR(B$(K),56,3)=BIN(B,3) : STR(B$(K),59,3)=BIN(D,3) : STR(B$(K),62,3)=BIN(E,3) 0600 STR(B$(K),50,3)=D1$ : STR(B$(K),65,1)=BIN(K) : STR(B$(K),67,1)=BIN(P) : STR(B$(K),50,3)=D1$ : STR(B$(K),1,49)=N$ 0610 K=K+1 : GOTO 260 0619 IF K<2THEN DO : GOSUB '50(HEX(06070E),"A minimum of 1 platter is needed for backup") : END DO : IF K<2THEN 270 0620 PRINT AT(R+1,72); : PRINTUSING "####.#",M; 0630 GOSUB '50(" "," ") : PRINT AT(23,61);"FN/TAB - Exit";AT(22,61);"RETURN - Proceed";HEX(06); 0640 KEYIN K$ : IF POS(HEX(7E7F)=K$)<>0THEN GOSUB '127 : IF POS("Tt"=K$)<>0THEN 3000 : IF K$<>HEX(0D)THEN 640 0645 REM % REMOVE THE REM IN THE NEXT LINE TO ALLOW TIMED BACKUP 0646 REM GOTO 3000 0650 REM % STORE PLATTER COUNT : P=K-1 : STR(B$(1),67,1)=BIN(P) 0660 GOSUB '50(HEX(0E06),"Rewind Tape") : $SCSITAPE REWIND T#2, : ERRORZ=ERR : GOSUB '50(HEX(06070E),"Please insert tape") : GOSUB 8110 : Z=0 : GOTO 660 0670 GOSUB '50(HEX(0E06),"Retension Tape") : $SCSITAPE RETENSIONT#2 : ERRORZ=ERR : GOSUB '50(HEX(06070E),"Tape error - Backup aborted") : Z=0 : GOTO 70 0680 GOSUB '50(HEX(0E06),"Rewind Tape") : $SCSITAPE REWIND T#2, : ERRORZ=ERR : GOSUB 8000 : Z=0 : GOTO 680 0690 IF POS("Yy"=E1$)<>0THEN DO : GOSUB '50(HEX(0E06),"Erase Tape") : $SCSITAPE ERASET#2, : ERRORZ=ERR : GOSUB '50(HEX(06070E),"Tape error - Backup aborted") : GOSUB 8110 : Z=0 : GOTO 70 0691 END DO 0700 GOSUB '50(HEX(0E06),"Rewind Tape") : $SCSITAPE REWIND T#2, : ERRORZ=ERR : GOSUB 8000 : Z=0 : GOTO 700 0710 REM % Write Directory Info to Tape IF 'O' SELECTED : IF J$="W"THEN DO : GOSUB '50(HEX(0E06),"Writing Directory...") : $SCSITAPE WRITET#2,B$() : ERRORZ=ERR : GOSUB '50(HEX(06070E),"Tape error - Backup aborted") : GOSUB 8110 : Z=0 : GOTO 70 0720 REM % Write tape MARK : $SCSITAPE WMARKT#2, : ERRORZ=ERR : GOSUB '50(HEX(06070E),"Tape error - Backup aborted") : GOSUB 8110 : Z=0 : GOTO 70 0721 END DO 0730 $TRAN(T$,"Aa")R : IF J$="O"AND T$="A"THEN DO : GOSUB 1280 : END DO 0740 $TRAN(T$,"Aa")R : IF J$="O"AND T$<>"A"THEN DO : GOSUB '50(HEX(060E),"Rewind Tape") : $SCSITAPE REWIND T#2 : END DO 0750 REM % REDISPLAY SELECTION : R0=7 : K0=1 : PRINT HEX(06);AT(R0+1,0,1120); : R0=R0+1 : GOSUB 1310 0760 R=8 : FOR Y=OTO P : A,B,C,D,E=0 0770 A=VAL(STR(B$(Y),53,3),3) : B=VAL(STR(B$(Y),56,3),3) : D=VAL(STR(B$(Y),59,3),3) : E=VAL(STR(B$(Y),62,3),3) : D1$=STR(B$(Y),50,3) : SELECT #1<D1$> : L=A : F=VAL(STR(B$(Y),66,1)) 0780 IF F=1THEN GOSUB 980 : ELSE IF F=0THEN GOSUB 880 0790 PRINT AT(R,0);HEX(0202020E0E960202000E); : R=R+1 : IF R>19THEN DO : R=8 : END DO 0800 IF R=8AND R0=8THEN GOSUB 1310 0810 NEXT Y 0820 GOSUB '50(HEX(0E06),"Rewind Tape") : $SCSITAPE REWIND T#2, : ERRORZ=ERR : GOSUB 8000 : Z=0 : GOTO 820 0830 REM this is a spare line 0840 GOSUB '50(HEX(07060E),"Backup Complete") 0850 PRINT AT(23,61);"FN/TAB - Exit";AT(22,61);"RETURN - RE-RUN" 0860 KEYIN K$ : IF POS(HEX(7E7F)=K$)<>0THEN GOSUB '126 : IF K$<>HEX(0D)THEN 860 0870 IF K$=HEX(0D)THEN 60 0880 REM % 0890 REM $SCSITAPEREWINDT#2, $SCSITAPERMARKT#2,(1) 0900 REM % External backup starts here! 0910 GOSUB '70("External Backup in Progress...") : FOR X=1TO D : GOSUB '60("Backing up ") : PRINT HEX(060E20);STR(B$(Y),50,3);" to tape : Block No. ";X;" of";D;HEX(0 F); 0920 DATA LOAD BMT#1,(L,L)A$() : ERRORZ=ERR : GOTO 1600 0930 $SCSITAPE WRITET#2,A$() : ERRORZ=ERR : GOSUB '50(HEX(06070E),"Tape error - Backup aborted") : GOSUB 8110 : Z=0 : GOTO 70 0931 NEXT X 0940 IF E<>0THEN DO : GOSUB '50(HEX(0E06),"Backing up Last Block ") : DATA LOAD BMT#1,(L,L)STR(A$(),1,E) : ERRORZ=ERR : GOTO 1600 0950 $SCSITAPE WRITET#2,STR(A$(),1,E) : ERRORZ=ERR : GOSUB '50(HEX(06070E),"Tape error - Backup aborted") : GOSUB 8110 : Z=0 : GOTO 70 0951 END DO 0960 REM % Write next MARK : $SCSITAPE WMARKT#2, : ERRORZ=ERR : GOSUB '50(HEX(06070E),"Tape error - Backup aborted") : GOSUB '8110 : Z=0 : GOTO 70 0970 RETURN 0980 REM % Internal backup starts here! 0990 GOSUB '70("Internal Backup in Progress...") 1000 GOSUB '60("Backup Platter : ") : PRINT HEX(060E);D1$; 1010 $SCSITAPE BACKUPT#1,(A,B) : ERRORZ=ERR : GOSUB 8000 : Z=0 : GOTO 70 1011 RETURN 1040 DEFFN'302 : REM DECIDE INTERNAL OR EXTERNAL BACKUP 1050 E$=STR(D$,2,1) : IF E$=STR(D1$,2,1)THEN 1080 : ELSE DO : E$=E$XOR HEX(04) : END DO 1060 REM % IF F=0 THEN EXTERNAL BACKUP 1070 REM % IF F=1 THEN INTERNAL BACKUP 1080 F=POS(STR(D1$,2,1)=E$) 1090 STR(B$(K),66,1)=BIN(F) : RETURN 1100 REM % Even/Odd Check for internal backup 1110 DEFFN'303 1120 IF MOD(A,2)<>0THEN A=A-1 : IF MOD(B,2)<>1THEN B=B+1 : RETURN 1130 IF MOD(B,2)<>1THEN B=B+1 : RETURN 1140 REM %Display NOT SCSI controller 1150 REM % Display Messages at Lower left Corner. 1160 DEFFN'50(M1$,M2$) : PRINT AT(22,0,79);STR(M1$,,LEN(M1$));AT(23,0,79);STR(M2$,,LEN(M2$));HEX(0 F); : RETURN 1170 REM % display message at 23,0 1180 DEFFN'60(M$) : PRINT AT(23,0,79);HEX(060E);STR(M$,,LEN(M$));HEX(0F); : RETURN 1190 DEFFN'126 1200 DEFFN'127 : SELECT 3OFF : $CLOSE : LOAD RUN "@MENU" 1210 DEFFN'70(M$) : PRINT AT(22,0,79);HEX(060E);STR(M$,,LEN(M$));HEX(0F); : RETURN 1220 REM % Append starts here! 1230 GOSUB '50(HEX(0E06),"Retension Tape") : $SCSITAPE RETENSIONT#2 1240 GOSUB '50(HEX(0E06),"Rewind Tape") : $SCSITAPE REWIND T#2, : ERRORZ=ERR : GOSUB '8000 : Z=0 : GOTO 70 1250 GOSUB '50(HEX(060E),"Reading Tape Directory") : $SCSITAPE READ T#2,B$() 1260 P=VAL(STR(B$(1),67,1))+1 : K=P : GOSUB '50(" "," ") : O=P 1270 RETURN 1280 GOSUB '50(HEX(060E),"Rewind Tape") : $SCSITAPE REWIND T#2 : ERRORZ=ERR : GOSUB 8000 : Z=0 : GOTO 70 1290 GOSUB '50(HEX(060E),"Positioning the tape to end of data") : $SCSITAPE EDATAT#2, 1300 RETURN 1310 REM % Redisplay section : PRINT HEX(06);AT(R,0,1120); 1320 PRINT HEX(06);AT(R0,1,43);STR(B$(K0),1,43);AT(R0,45);STR(B$(K0),50,3);AT( R0,53); : PRINTUSING "########",S(K0); : PRINT AT(R0,62); : PRINTUSING "########",E(K0); : PRINT AT(R0,72);BOX(0,-6);AT(R0+1,72);BOX(0,6);AT(R0,72); : PRINTUSING "####.#",M(K0); : M1=M1+M(K0) 1330 R0=R0+1 : K0=K0+1 : IF R0>19THEN DO : R0=7 : R0=R0+1 : END DO 1340 IF R0=8THEN RETURN 1350 PRINT AT(R0,72); : PRINTUSING "####.#",M1; : IF K0=KTHEN RETURN : GOTO 1320 1360 IF MOD(A,2)<>0THEN A=A-1 : RETURN 1370 IF MOD(B,2)<>1THEN B=B+1 : RETURN 1380 REM % VERIFY IF VALID START SECTOR ON THE SOURCE DISK 1390 DEFFN'304 : A0=0 : VERIFY T#1,(A,A)A0 : RETURN 1400 REM % VERIFY IF VALID END SECTOR ON THE SOURCE DISK 1410 DEFFN'305 : VERIFY T#1,(B,B)A0 : RETURN 1420 DEFFN'300(D2$) 1430 $TRAN(D2$,"AaBbCcDdEeFf")R : RETURN 1440 REM % Deffn'301 get start and end sector numbers 1450 DEFFN'301 : DATA LOAD BA T#1,(0)C$() : ERRORZ=ERR : GOSUB 1490 : GOSUB '60(M$) : Z=0 : RETURN 1460 IF STR(C$(),1,1)<HEX(02)THEN DO : A=0 : B=(VAL(STR(C$(),3,2),2))-1 : END DO 1470 IF STR(C$(),1,1)=HEX(02)THEN DO : A=0 : B=(VAL(STR(C$(),4,3),3))-1 : END DO 1475 IF A=0AND B=-1THEN GOSUB '50(HEX(060E),"Index not found on the platter") 1480 RETURN 1490 REM % Error Subroutine 1500 CONVERT ZTO K$,(##) 1510 ON POS(HEX(9195939698)=K$)GOTO 1520,1530,1540,1550,1560 1520 M$="ERROR I91: Disk Drive Not Ready" : GOTO 1570 1530 M$="ERROR I95: Device Error" : GOTO 1570 1540 M$="ERROR I93: Format Error" : GOTO 1570 1550 M$="ERROR I96: Data Error" : GOTO 1570 1560 M$="ERROR I98: Illegal Sector Address or No Platter" : GOTO 1570 1570 RETURN 1580 REM % Left Justify Subroutine 1590 DEFFN'603(L$) : L$=STR(L$,(POS(L$<>"0")-0)) : RETURN 1600 GOSUB '50(HEX(07060E),"Disk Error - Tape Backup Aborted") : PRINT AT(23,61);"FN/TAB - Exit";AT(22,61);"RETURN - Proceed" 1610 KEYIN K$ : IF POS(HEX(7E7F0D)=K$)<>0THEN 1620 : GOTO 1610 1620 IF K$=HEX(0D)THEN 110 1630 IF POS(HEX(7E7F)=K$)<>0THEN 1200 1640 REM % 'O' TYPE BACKUP FOR RAW TYPE BACKUP 1650 PRINT AT(3,28);"Backup Type Wang/Open (W/O) : ";HEX(0E); : LINPUT -J$ : $TRAN(J$,"WwOo")R : IF POS("WO"=J$)=0THEN 1650 1660 REM % APEND OR Erase A/E : E1$="Y" : PRINT AT(3,15,60);"Append to tape (A/a) / Erase tape (Y or N): ";HEX(0E); : LINPUT -E1$ : IF POS("Aa"=E1$)<>0AND J$="W"THEN GOSUB '50(HEX(06070E),"Append not suppo rted in WANG Mode") : T$=E1$ : PRINT HEX(06); : $TRAN(E1$,"NANaYyNn")R : IF POS("YN"=E1$)=0THEN 1660 1670 IF E1$="A"THEN E1$="N" : RETURN 3000 REM % THE TIMED BACKUP ROUTINE 3010 T2$=TIME : T3$=STR(T2$,1,2)&":"&STR(T2$,3,2)&":"&STR(T2$,5,2) 3020 PRINT AT(5,4,75);"Time Now is : ";T3$;" Please Enter time for backup to S TART : ";HEX(0E); : LINPUT -STR(T3$,1,5) 3030 T4$=STR(T3$,1,2)&STR(T3$,4,2) : GOSUB '50(HEX(02050F),"Timed Backup - Waiting for set time ") 3040 T2$=TIME : IF STR(T2$,1,4)>=STR(T4$,1,4)THEN 3050 : $BREAK255 : GOTO 3040 3050 GOTO 650 8000 GOSUB '50(HEX(06070E),"Tape error - Backup aborted") 8110 PRINT AT(23,61);"FN/TAB - Exit";AT(22,61);"RETURN - Proceed" 8120 KEYIN K$ : IF POS(HEX(0D)=K$)<>0THEN 8130 : GOTO 8120 8130 RETURN 9000 STOP # 9010 DEFFN'14HEX(0E) 9020 DEFFN'15HEX(0F) 9999 DEFFN'31 : RESAVE T"@SCTAPEB"