[613] | 1 | ENARGO ;(WIRMFO)/JED,SAB-MOVE ARCHIVE GLOBAL TO STORAGE MEDIA ;4.29.97
|
---|
| 2 | ;;7.0;ENGINEERING;**40**;Aug 17, 1993
|
---|
| 3 | Q
|
---|
| 4 | A ; Archive global to media
|
---|
| 5 | ; called by ENAR1
|
---|
| 6 | ; input
|
---|
| 7 | ; ENGBL - global subscript in ^ENAR to be archived (e.g. 6919.1)
|
---|
| 8 | ; ENTIME - date/time of archive session (internal format)
|
---|
| 9 | ; ENERR - error message text (should be 0 for no error)
|
---|
| 10 | ; output
|
---|
| 11 | ; ENERR - error message text or 0 when no error
|
---|
| 12 | D DT^DICRW
|
---|
| 13 | ;
|
---|
| 14 | S ENHFSM="W",ENHFSIO="" D ARDEV I ENERR'=0 G OUT
|
---|
| 15 | I IOT="MT" D MTSETUP I ENERR'=0 G CLOUT
|
---|
| 16 | I IOT="MT" D MTCHECK I ENERR'=0 G CLOUT
|
---|
| 17 | I IOT="MT" X ENWPROT I Y D G A
|
---|
| 18 | . D CLOSE
|
---|
| 19 | . W $C(7),!!,"But your tape is write protected!!" D MSG
|
---|
| 20 | ;
|
---|
| 21 | U IO(0) W !,"Beginning output"
|
---|
| 22 | ; determine header info
|
---|
| 23 | S ENHD(1)=$$FMTE^XLFDT(ENTIME)
|
---|
| 24 | S ENHD(2)=$P(^ENAR(ENGBL,0),"^",1)_", ID# "_$P(^(-1),",",3)_", "_$P(^(0),"^",3)_" RECORDS SAVED"
|
---|
| 25 | S ENHD(3)="^ENAR("_ENGBL_",-1)"
|
---|
| 26 | S ENHD(4)=@ENHD(3)
|
---|
| 27 | ; write data to archive device
|
---|
| 28 | U IO S ENSTART=$P($H,",",2)
|
---|
| 29 | ; - write header info
|
---|
| 30 | W ENHD(1) W:IOT'="MT" ! W ENHD(2) W:IOT'="MT" !
|
---|
| 31 | ; - write nodes and content of nodes
|
---|
| 32 | S ENX="^ENAR("_ENGBL_")",ENC=0
|
---|
| 33 | F S ENX=$Q(@ENX) Q:ENX="" Q:$QS(ENX,1)'=ENGBL D
|
---|
| 34 | . W ENX W:IOT'="MT" ! W @ENX W:IOT'="MT" !
|
---|
| 35 | . S ENC=ENC+1 I '(ENC#100) U IO(0) W "." U IO
|
---|
| 36 | ; - write footer info
|
---|
| 37 | W "**EOF**" W:IOT'="MT" ! W "**EOF**" W:IOT'="MT" !
|
---|
| 38 | U IO(0)
|
---|
| 39 | W !,"Elapsed time: ",$J($P($H,",",2)-ENSTART/60,6,2)," minutes.",!
|
---|
| 40 | ;
|
---|
| 41 | S DIR(0)="Y",DIR("A")="Archive complete, care to verify",DIR("B")="YES"
|
---|
| 42 | S DIR("?",1)="This process reads archived records and compares them to"
|
---|
| 43 | S DIR("?",2)="the source global."
|
---|
| 44 | S DIR("?",3)=" "
|
---|
| 45 | S DIR("?")="Enter YES or No"
|
---|
| 46 | D ^DIR K DIR
|
---|
| 47 | I 'Y S ENERR="VERIFY DECLINED" K ^ENAR(ENGBL,"LOCK") G CLOUT
|
---|
| 48 | ;
|
---|
| 49 | S DIR(0)="SB^F:FULL;H:HEADER-ONLY"
|
---|
| 50 | S DIR("A")="Select type of verify to perform",DIR("B")="FULL"
|
---|
| 51 | S DIR("?",3)="FULL - Every record is read from the archive media and"
|
---|
| 52 | S DIR("?",4)=" compared to the source global."
|
---|
| 53 | S DIR("?",1)="HEADER-ONLY - The header data (4 lines) is read from the"
|
---|
| 54 | S DIR("?",2)=" archive media and compared to expected values."
|
---|
| 55 | S DIR("?",5)=" "
|
---|
| 56 | S DIR("?")="Enter H or F"
|
---|
| 57 | D ^DIR K DIR I $D(DIRUT) S ENERR="USER VERIFY ABORT" G CLOUT
|
---|
| 58 | S ENVT=Y
|
---|
| 59 | ;
|
---|
| 60 | VRF ; Verify
|
---|
| 61 | ; rewind (or close and reopen) device
|
---|
| 62 | W !,"Please wait while I rewind (or reopen) the archive device."
|
---|
| 63 | S Y=$S("^MT^HFS^SDP^"[(U_IOT_U):$$REWIND^%ZIS(IO,IOT,IOPAR),1:0)
|
---|
| 64 | I 'Y D CLOSE S IOP=ENION,ENHFSM="R" D ARDEV G:ENERR'=0 OUT
|
---|
| 65 | I IOT="MT" D MTCHECK I ENERR'=0 G CLOUT
|
---|
| 66 | ;
|
---|
| 67 | S ENREDO=0,ENSTART=$P($H,",",2)
|
---|
| 68 | D VHDR G:ENREDO VRF I ENERR'=0 G CLOUT
|
---|
| 69 | I ENVT="F" D VREC G:ENREDO VRF I ENERR'=0 G CLOUT
|
---|
| 70 | ;
|
---|
| 71 | D CLOSE
|
---|
| 72 | W !,"Elapsed time: ",$J($P($H,",",2)-ENSTART/60,6,2)," minutes."
|
---|
| 73 | K ^ENAR(ENGBL,"LOCK")
|
---|
| 74 | G OUT
|
---|
| 75 | ;
|
---|
| 76 | VHDR ; verify header
|
---|
| 77 | U IO(0) W !!,"Verifying Header..."
|
---|
| 78 | U IO R ENX(1):15,ENX(2):15,ENX(3):15,ENX(4):15
|
---|
| 79 | U IO(0)
|
---|
| 80 | F ENI=1:1:4 Q:ENX(ENI)'=ENHD(ENI)
|
---|
| 81 | I ENX(ENI)'=ENHD(ENI) D
|
---|
| 82 | . W $C(7),!!,"Expected: ",ENHD(ENI),!,"Found: ",ENX(ENI)
|
---|
| 83 | . S DIR(0)="Y",DIR("A")="Try again",DIR("B")="YES"
|
---|
| 84 | . D ^DIR K DIR I Y S ENREDO=1 Q
|
---|
| 85 | . S ENERR="BAD HEADER VERIFY"
|
---|
| 86 | I ENX(ENI)=ENHD(ENI) W "Header OK"
|
---|
| 87 | Q
|
---|
| 88 | ;
|
---|
| 89 | VREC ; verify records
|
---|
| 90 | U IO(0) W !,"Continuing with full verify"
|
---|
| 91 | S (ENC,ENC("VERR"))=0
|
---|
| 92 | U IO
|
---|
| 93 | F R ENX:15,ENX(1):15 Q:ENX="**EOF**" D:ENX(1)'=@ENX Q:ENC("VERR")>5 S ENC=ENC+1 I '(ENC#100) U IO(0) W "." U IO
|
---|
| 94 | . U IO(0)
|
---|
| 95 | . S ENC("VERR")=ENC("VERR")+1
|
---|
| 96 | . W $C(7),!,"WARNING: ",ENX,!,"Expected: ",@ENX,!,"Found: ",ENX(1)
|
---|
| 97 | . I ENC("VERR")'>5 W !!,"continuing"
|
---|
| 98 | . U IO
|
---|
| 99 | U IO(0)
|
---|
| 100 | I ENC("VERR")>5 D
|
---|
| 101 | . W $C(7),!,"Sorry, the verify doesn't look good"
|
---|
| 102 | . S DIR(0)="Y",DIR("A")="Try again",DIR("B")="YES"
|
---|
| 103 | . D ^DIR K DIR I Y S ENREDO=1 Q
|
---|
| 104 | . S ENERR="BAD VERIFY"
|
---|
| 105 | Q
|
---|
| 106 | ;
|
---|
| 107 | CLOUT ; Close archive device and exit
|
---|
| 108 | D CLOSE
|
---|
| 109 | OUT ; Exit
|
---|
| 110 | K ENBOT,ENC,ENEOT,ENHD,ENHFSIO,ENHFSM,ENI,ENION,ENMTERR
|
---|
| 111 | K ENONLINE,ENR,ENREDO,ENREW,ENSTART,ENVT,ENWPROT,ENX
|
---|
| 112 | K DIROUT,DIRUT,DTOUT,DUOUT,X,Y
|
---|
| 113 | Q
|
---|
| 114 | ;
|
---|
| 115 | MSG W !,"Press <RETURN> to continue" R ENR:DTIME S:'$T ENR="^" Q
|
---|
| 116 | ;
|
---|
| 117 | ARDEV ; Select and open archival device
|
---|
| 118 | ; called from ENARGO, ENARGR
|
---|
| 119 | ; input
|
---|
| 120 | ; ENHFSM - host file access mode ('W'rite-only or 'R'ead-only)
|
---|
| 121 | ; ENERR - error message text (should be 0 for no error)
|
---|
| 122 | ; IOP - (optional) name of device to use
|
---|
| 123 | ; ENHFSIO - (optional) name of host file to open
|
---|
| 124 | ; output
|
---|
| 125 | ; ENERR - 0 or error message text
|
---|
| 126 | ; ENION - ION of selected device
|
---|
| 127 | ; ENHFSIO - name of host file opened (only defined when IOT="HFS")
|
---|
| 128 | I '$D(IOP) W $C(7),!!,"If using tape, please load ",$S(ENHFSM="W":"WRITE ENABLED ",ENHFSM="R":"WRITE PROTECTED ",1:""),"tape and bring on-line now",!
|
---|
| 129 | S %ZIS("A")="ARCHIVAL DEVICE: ",%ZIS("B")="",%ZIS("HFSMODE")=ENHFSM
|
---|
| 130 | I $G(ENHFSIO)]"" S %ZIS("HFSNAME")=ENHFSIO
|
---|
| 131 | S %ZIS("S")="I ""^VTRM^TRM^""'[(U_$G(^(""TYPE""))_U)"
|
---|
| 132 | D ^%ZIS I POP S ENERR="ARCHIVAL DEVICE NOT SELECTED" Q
|
---|
| 133 | S ENION=ION
|
---|
| 134 | S ENHFSIO=$S(IOT="HFS":IO,1:"")
|
---|
| 135 | Q
|
---|
| 136 | ;
|
---|
| 137 | CLOSE ; Close archival device
|
---|
| 138 | ; called from ENARGO, ENARGR
|
---|
| 139 | D ^%ZISC
|
---|
| 140 | Q
|
---|
| 141 | ;
|
---|
| 142 | MTSETUP ; Mag Tape Variables Setup
|
---|
| 143 | ; called from ENARGO, ENARGR
|
---|
| 144 | I '$D(^%ZOSF("MAGTAPE"))!('$D(^("EOT")))!('$D(^("MTBOT")))!('$D(^("MTERR")))!('$D(^("MTONLINE")))!('$D(^("MTWPROT"))) S ENERR="YOUR %ZOSF GLOBAL NODES FOR MAGTAPE ARE NOT SET UP. CANNOT PROCEED." Q
|
---|
| 145 | X ^%ZOSF("MAGTAPE") S ENREW=%MT("REW") K %MT
|
---|
| 146 | S ENEOT=^%ZOSF("EOT"),ENBOT=^%ZOSF("MTBOT")
|
---|
| 147 | S ENMTERR=^%ZOSF("MTERR"),ENONLINE=^%ZOSF("MTONLINE")
|
---|
| 148 | S ENWPROT=^%ZOSF("MTWPROT")
|
---|
| 149 | Q
|
---|
| 150 | ;
|
---|
| 151 | MTCHECK ; Mag Tape Check
|
---|
| 152 | ; called from ENARGO, ENARGR
|
---|
| 153 | ; Checks if Mag Tape is online and rewind if at BOT
|
---|
| 154 | U IO X ENONLINE G:Y MTC1
|
---|
| 155 | U IO(0) W !,"Tape off-line, please make ready" D MSG
|
---|
| 156 | I ENR="^" S ENERR="USER INTERUPT @TAPE STATUS" Q
|
---|
| 157 | G MTCHECK
|
---|
| 158 | MTC1 U IO X ENBOT Q:Y
|
---|
| 159 | U IO(0) W !,"Rewinding tape" U IO W @ENREW
|
---|
| 160 | Q
|
---|
| 161 | ;ENARGO
|
---|