| 1 | ENARGR ;(WIRMFO)/JED,SAB-RECALL ARCHIVED DATA ;2.14.97
 | 
|---|
| 2 |  ;;7.0;ENGINEERING;**40**;Aug 17, 1993
 | 
|---|
| 3 |  Q
 | 
|---|
| 4 | R ; Recall Global from archive media
 | 
|---|
| 5 |  ; called from ENAR1
 | 
|---|
| 6 |  ; input
 | 
|---|
| 7 |  ;   ENGBL - global subscript in ^ENAR to be recalled (e.g. 6919.1)
 | 
|---|
| 8 |  ;   ENRT  - number associated with type of archive (e.g. 1 for W.O.)
 | 
|---|
| 9 |  ;   ENERR - error message text (should be 0 for no error)
 | 
|---|
| 10 |  ; output
 | 
|---|
| 11 |  ;   ENDA  - ien of ENG ARCHIVE LOG entry
 | 
|---|
| 12 |  ;   ENERR - error message text or 0 when no error
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 |  S ENFN=$S(ENRT=1:"WO ARCHIVE",ENRT=2:"2162 ACCIDENT ARCHIVE",ENRT=3:"EQUIPMENT INV. ARCHIVE",ENRT=4:"PROJECT ARCHIVE",ENRT=5:"CONTROL POINT ARCHIVE")
 | 
|---|
| 15 |  ; select and open archive media
 | 
|---|
| 16 |  S ENHFSM="R",ENHFSIO="" D ARDEV^ENARGO I ENERR'=0 G OUT
 | 
|---|
| 17 |  I IOT="MT" D MTSETUP^ENARGO I ENERR'=0 G CLOUT
 | 
|---|
| 18 |  I IOT="MT" D MTCHECK^ENARGO I ENERR'=0 G CLOUT
 | 
|---|
| 19 |  ; get header info from archive media
 | 
|---|
| 20 |  U IO R ENHD(1):15,ENHD(2):15,ENHD(3):15,ENHD(4):15
 | 
|---|
| 21 |  D CLOSE^ENARGO
 | 
|---|
| 22 |  I ENHD(3)'=("^ENAR("_ENGBL_",-1)") D  G OUT
 | 
|---|
| 23 |  . W $C(7),!!,"Expected: ","^ENAR("_ENGBL_",-1)"
 | 
|---|
| 24 |  . W !,"Found: ",ENHD(3)
 | 
|---|
| 25 |  . W !,"Sorry, this media is unacceptable!"
 | 
|---|
| 26 |  . W !,"Press <RETURN> to continue" R ENR:DTIME
 | 
|---|
| 27 |  . S ENERR="BOGUS MEDIA"
 | 
|---|
| 28 |  ; confirm
 | 
|---|
| 29 |  S ENDA=+$P(ENHD(4),",",4) D ID^ENAR2 I ENERR'=0 G OUT
 | 
|---|
| 30 |  W !!!!,"Media written on: ",ENHD(1),!,"with header: ",ENHD(2),!
 | 
|---|
| 31 |  S DIR(0)="Y",DIR("A")="Is this the media you want",DIR("B")="YES"
 | 
|---|
| 32 |  D ^DIR K DIR I 'Y S ENERR="RECALL RECORDS ABORT" G OUT
 | 
|---|
| 33 |  ; ask type of recall
 | 
|---|
| 34 |  S DIR(0)="SB^A:ALL RECORDS;O:ONE RECORD"
 | 
|---|
| 35 |  S DIR("A")="Select type of recall to perform",DIR("B")="ALL"
 | 
|---|
| 36 |  S DIR("?",1)="ALL RECORDS - Recall all records from archive media."
 | 
|---|
| 37 |  S DIR("?",2)="ONE RECORD  - Search entire archive for a specific record"
 | 
|---|
| 38 |  S DIR("?",3)="              and recall it if found."
 | 
|---|
| 39 |  S DIR("?",4)=" "
 | 
|---|
| 40 |  S DIR("?")="Enter ALL or ONE"
 | 
|---|
| 41 |  D ^DIR K DIR I $D(DIRUT) S ENERR="RECALL TYPE NOT SPECIFIED" G OUT
 | 
|---|
| 42 |  S ENRCLT=Y
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 |  ; select and open archive media
 | 
|---|
| 45 |  W !,"Please wait while I reopen the archive device."
 | 
|---|
| 46 |  S IOP=ENION,ENHFSM="R" D ARDEV^ENARGO I ENERR'=0 G OUT
 | 
|---|
| 47 |  I IOT="MT" D MTCHECK^ENARGO I ENERR'=0 G CLOUT
 | 
|---|
| 48 |  U IO R ENX:15,ENX(1):15 U IO(0) ; skip first 2 header lines
 | 
|---|
| 49 |  I ENRCLT="A" D RALL I ENERR'=0 G CLOUT
 | 
|---|
| 50 |  I ENRCLT="O" D RONE I ENERR'=0 G CLOUT
 | 
|---|
| 51 |  D CLOSE^ENARGO
 | 
|---|
| 52 |  W !,"Elapsed time: ",$J($P($H,",",2)-ENSTART/60,6,2)," minutes."
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 | RINIT ; initialize data dictionary
 | 
|---|
| 55 |  ; save variables
 | 
|---|
| 56 |  F ENX="ENDA","ENERR","ENGBL","ENRT" S ^TMP("ENAR",$J,ENX)=@ENX
 | 
|---|
| 57 |  ; perform init
 | 
|---|
| 58 |  I $D(^ENAR(ENGBL,-1,"INIT")) X ^("INIT")
 | 
|---|
| 59 |  ; restore variables
 | 
|---|
| 60 |  F ENX="ENDA","ENERR","ENGBL","ENRT" S @ENX=^TMP("ENAR",$J,ENX)
 | 
|---|
| 61 |  K ^TMP("ENAR",$J)
 | 
|---|
| 62 |  ; check result
 | 
|---|
| 63 |  I $D(DIFQ) D  G:ENERR'=0 OUT G RINIT
 | 
|---|
| 64 |  . W $C(7),!,"But your file is not initialized properly",!
 | 
|---|
| 65 |  . S DIR(0)="Y",DIR("A")="Do you want to re-try",DIR("B")="YES"
 | 
|---|
| 66 |  . S DIR("?",1)="If you answer no the "_ENFN_" file will be cleaned out"
 | 
|---|
| 67 |  . S DIR("?",2)=" "
 | 
|---|
| 68 |  . S DIR("?")="Enter Y or N"
 | 
|---|
| 69 |  . D ^DIR K DIR I 'Y D GS^ENAR1,D2^ENAR1 S ENERR="ARCHIVE RECALL ABORT"
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 |  K ^ENAR(ENGBL,-1)
 | 
|---|
| 72 |  W !!,"O.K. Archive file is ready"
 | 
|---|
| 73 |  G OUT
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 | RALL ; recall all records
 | 
|---|
| 76 |  W !,"Now fetching global"
 | 
|---|
| 77 |  U IO
 | 
|---|
| 78 |  S ENJ=0,ENSTART=$P($H,",",2)
 | 
|---|
| 79 |  F  R ENX:15,ENX(1):15 Q:ENX="**EOF**"!'$T  D:ENX'["LOCK"
 | 
|---|
| 80 |  . S @ENX=ENX(1),ENJ=ENJ+1
 | 
|---|
| 81 |  . I '(ENJ#50) U IO(0) W "." U IO
 | 
|---|
| 82 |  U IO(0)
 | 
|---|
| 83 |  I ENX="**EOF**" W !!,"The global is now on the system disk"
 | 
|---|
| 84 |  E  S ENERR="COULD NOT RECALL ALL RECORDS"
 | 
|---|
| 85 |  Q
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 | RONE ; recall one record
 | 
|---|
| 88 |  W !,"Enter the exact "_ENFN_" record name. Remember to include"
 | 
|---|
| 89 |  W !,"your station number as a pre-fix! (e.g. 688-B970121-001)",!
 | 
|---|
| 90 |  S DIR(0)="F",DIR("A")="Exact "_ENFN_" record name"
 | 
|---|
| 91 |  D ^DIR K DIR I $D(DIRUT) S ENERR="SINGLE RECORD UNSPECIFIED" Q
 | 
|---|
| 92 |  S ENR=Y
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 |  ; read media and recall data dictionary nodes, stop if record located
 | 
|---|
| 95 |  S ENSTART=$P($H,",",2)
 | 
|---|
| 96 |  U IO
 | 
|---|
| 97 |  S ENJ=0
 | 
|---|
| 98 |  F  R ENX:15,ENX(1):15 Q:$P(ENX(1),U,1)=ENR!(ENX="**EOF**")!'$T  D
 | 
|---|
| 99 |  . S:$P(ENX,",",2)="-1" @ENX=ENX(1) ; only store data dictionary stuff
 | 
|---|
| 100 |  . S ENJ=ENJ+1
 | 
|---|
| 101 |  . I '(ENJ#50) U IO(0) W "." U IO
 | 
|---|
| 102 |  U IO(0)
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 |  I $P(ENX(1),U,1)'=ENR D  Q:ENERR'=0  G RONE
 | 
|---|
| 105 |  . ; recall didn't stop at desired record
 | 
|---|
| 106 |  . K ^ENAR(ENGBL,-1)
 | 
|---|
| 107 |  . W !,"Sorry, that record doesn't appear to be on this archive."
 | 
|---|
| 108 |  . S DIR(0)="Y",DIR("A")="Try another record",DIR("B")="NO"
 | 
|---|
| 109 |  . D ^DIR K DIR I 'Y S ENERR="DIDN'T FIND SINGLE RECORD" Q
 | 
|---|
| 110 |  . ; rewind (or close and reopen) device for retry
 | 
|---|
| 111 |  . W !,"Please wait while I rewind (or reopen) the archive device."
 | 
|---|
| 112 |  . S Y=$S("^MT^HFS^SDP^"[(U_IOT_U):$$REWIND^%ZIS(IO,IOT,IOPAR),1:0)
 | 
|---|
| 113 |  . I 'Y D CLOSE^ENARGO S IOP=ENION,ENHFSM="R" D ARDEV^ENARGO Q:ENERR'=0
 | 
|---|
| 114 |  . I IOT="MT" D MTCHECK^ENARGO Q:ENERR'=0
 | 
|---|
| 115 |  . U IO R ENX:15,ENX(1):15 ; skip first 2 header lines
 | 
|---|
| 116 |  . U IO(0)
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 |  ; recall stopped at desired record
 | 
|---|
| 119 |  W !!,"Found record ",$P(ENX(1),U,1),!
 | 
|---|
| 120 |  S ENJ=$P(ENX,",",2)
 | 
|---|
| 121 |  ; save data
 | 
|---|
| 122 |  S @ENX=ENX(1)
 | 
|---|
| 123 |  S ^ENAR(ENGBL,0)=ENFN_U_ENGBL_U_ENJ_"^1"
 | 
|---|
| 124 |  S ^ENAR(ENGBL,"B",$P(ENX(1),U,1),ENJ)=""
 | 
|---|
| 125 |  ; retrieve remaining nodes of record
 | 
|---|
| 126 |  U IO
 | 
|---|
| 127 |  F  R ENX:15,ENX(1):15 Q:$P(ENX,",",2)'=ENJ!(ENX="**EOF**")!'$T  D
 | 
|---|
| 128 |  . S @ENX=ENX(1)
 | 
|---|
| 129 |  Q
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 | CLOUT ; Close Archive Media and Exit
 | 
|---|
| 132 |  D CLOSE^ENARGO
 | 
|---|
| 133 | OUT ; Exit
 | 
|---|
| 134 |  K ENA,ENBOT,ENEOT,ENFN,ENHD,ENHFSIO,ENHFSM,ENION,ENJ,ENMTERR
 | 
|---|
| 135 |  K ENONLINE,ENR,ENRCLT,ENREW,ENSTART,ENWPROT,ENX
 | 
|---|
| 136 |  K DIROUT,DIRUT,DTOUT,DUOUT,I,X,Y
 | 
|---|
| 137 |  Q
 | 
|---|
| 138 |  ;
 | 
|---|
| 139 |  ;ENARGR
 | 
|---|