| 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
 | 
|---|