[613] | 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
|
---|