image of READY prompt

Wang2200.org

Listing of file='@SCTAPEB' on disk='vmedia/731-8015D.wvd.zip'

# Sector 705, 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"