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