XPDIA3 ;SFISC/RWF - Install Pre/Post Actions for Kernel files cont. ;6/22/06 09:13
;;8.0;KERNEL;**201,302,393,498,1009,1013,1016**;Jul 10, 1995;Build 5
;Per VHA Directive 2004-038, this routine should not be modified.
Q
;^XTMP("XPDI",,XPDA,"KRN",XPDFILE,OLDA) is the global root
;XPDNM=package name, XPDA=ien in ^XPD(9.6,
;DA=ien in file, OLDA= ien in ^XTMP
;
PAR0F2 ;PARAMETER file 8989.5: post. This is a fake entry called from the post of file 8989.51
;Now load any entries from 8989.5
N XP1,XP2,XP3,DIK,OLDA,DA,ERR,PN,PE,PT,ROOT
S XP1=$O(^XTMP("XPDI",XPDA,"PKG",0)) ;Get the package
Q:'XP1 S PN=$G(^XTMP("XPDI",XPDA,"PKG",XP1,0))
S PE=$$FIND1^DIC(9.4,,"MX",$P(PN,U,2)) ;Get the IEN of the package
S OLDA=0,ROOT=$NA(^XTMP("XPDI",XPDA,"KRN",8989.5))
F S OLDA=$O(@ROOT@(OLDA)) Q:'OLDA D
. S XP1=@ROOT@(OLDA,0)
. S $P(XP1,U,1)=PE_";DIC(9.4," ;entity
. S $P(XP1,U,2)=$$LK^XPDIA($NA(^XTV(8989.51)),$P(XP1,U,2))
. S DA=$$LKPAR($P(XP1,U),$P(XP1,U,2),$P(XP1,U,3))
. ;Remove the current entry if we have one
. I DA>0 S DIK="^XTV(8989.5," D ^DIK
. ;Otherwise Add the zero node, See that we have a IEN
. I DA'>0 D ADDPAR($P(XP1,U),$P(XP1,U,2),$P(XP1,U,3)) S DA=$$LKPAR($P(XP1,U),$P(XP1,U,2),$P(XP1,U,3))
. Q:'DA ;don't have a entry
. ;Merge the date ;with IHS fix
. M ^XTV(8989.5,DA)=^XTMP("XPDI",XPDA,"KRN",8989.5,OLDA)
. S ^XTV(8989.5,DA,0)=XP1 ;zero node with new pointers
. ;Get Definition and check if Data Type is pointer, then get pointed to global ref.
. S PT=$G(^XTV(8989.51,+$P(XP1,U,2),1)) D:$P(PT,U)="P"
. . S XP3=$G(^XTV(8989.5,DA,1)),PT=$P(PT,U,2)
. . S:PT $P(XP3,U)=$$FIND1^DIC(PT,"","X",$P(XP3,U)) ;resolve pointer value
. . S:$P(XP3,U) ^XTV(8989.5,DA,1)=XP3
. ;X-ref it
. S DIK="^XTV(8989.5," D IX1^DIK
Q
;
LKPAR(ENT,PAR,INST) ;Lookup an entry
Q $O(^XTV(8989.5,"AC",PAR,ENT,INST,0))
;
ADDPAR(ENT,PAR,INST) ;Add a parameter instance
N FDA,FDAIEN,DIERR
S FDA(8989.5,"+1,",.01)=ENT
S FDA(8989.5,"+1,",.02)=PAR
S FDA(8989.5,"+1,",.03)=INST
D UPDATE^DIE("","FDA","FDAIEN","DIERR")
Q
;
PAR1F1 ;PARAMETER File 8989.51: file Pre
Q
PAR1E1 ;PARAMETER file 8989.51: entry pre
N XP1,XP2,XP3
S ^TMP($J,"XPD",DA)=""
;if there is a new Description, kill the old Description
K:$O(^XTMP("XPDI",XPDA,"KRN",8989.51,OLDA,20,0)) ^XTV(8989.51,DA,20)
;Kill any old Allowable entries
K:$O(^XTMP("XPDI",XPDA,"KRN",8989.51,OLDA,30,0)) ^XTV(8989.51,DA,30)
Q
PAR1F2 ;PARAMETER file 8989.51: file post
N XPD,DIK,DA
S DA=0
F S DA=$O(^TMP($J,"XPD",DA)) Q:'DA D
. S DIK="^XTV(8989.51," D IX1^DIK
D PAR0F2 ;Go load the entries from 8989.5
Q
PAR1DEL(RT) ;Delete Parameter Def entries
D DELPTR^XPDUTL1(8989.51,RT) ;Cleanup pointers
D DELIEN^XPDUTL1(8989.51,RT) ;Cleanup entries
Q
;
PAR2F1 ;PARAMETER File 8989.52: file Pre
K ^TMP($J,"XPD")
Q
PAR2E1 ;PARAMETER file 8989.52: entry Pre
N XP1,XP2,ROOT
S ROOT=$NA(^XTMP("XPDI",XPDA,"KRN",8989.52))
S XP2=$P(@ROOT@(OLDA,0),U,4) ;Use instance of
;Because we change the transport global see that a restart will work
I $L(XP2),XP2?1A.E S $P(@ROOT@(OLDA,0),U,4)=$$LK^XPDIA($NA(^XTV(8989.51)),XP2)
S XP1=0
F S XP1=$O(@ROOT@(OLDA,10,XP1)),XP2="" Q:'XP1 D
. S XP2=$P(@ROOT@(OLDA,10,XP1,0),U,2) ;Parameter
. I $L(XP2),XP2?1A.E S $P(@ROOT@(OLDA,10,XP1,0),U,2)=$$LK^XPDIA($NA(^XTV(8989.51)),XP2)
. Q
Q
PAR2F2 ;PARAMETER file 8989.52: file Post
Q
PAR2DEL(RT) ;Delete Parameter Templates
D DELIEN^XPDUTL1(8989.52,RT)
Q
XPDIA3 ;SFISC/RWF - Install Pre/Post Actions for Kernel files cont. ;6/22/06 09:13
+1 ;;8.0;KERNEL;**201,302,393,498,1009,1013,1016**;Jul 10, 1995;Build 5
+2 ;Per VHA Directive 2004-038, this routine should not be modified.
+3 QUIT
+4 ;^XTMP("XPDI",,XPDA,"KRN",XPDFILE,OLDA) is the global root
+5 ;XPDNM=package name, XPDA=ien in ^XPD(9.6,
+6 ;DA=ien in file, OLDA= ien in ^XTMP
+7 ;
PAR0F2 ;PARAMETER file 8989.5: post. This is a fake entry called from the post of file 8989.51
+1 ;Now load any entries from 8989.5
+2 NEW XP1,XP2,XP3,DIK,OLDA,DA,ERR,PN,PE,PT,ROOT
+3 ;Get the package
SET XP1=$ORDER(^XTMP("XPDI",XPDA,"PKG",0))
+4 IF 'XP1
QUIT
SET PN=$GET(^XTMP("XPDI",XPDA,"PKG",XP1,0))
+5 ;Get the IEN of the package
SET PE=$$FIND1^DIC(9.4,,"MX",$PIECE(PN,U,2))
+6 SET OLDA=0
SET ROOT=$NAME(^XTMP("XPDI",XPDA,"KRN",8989.5))
+7 FOR
SET OLDA=$ORDER(@ROOT@(OLDA))
IF 'OLDA
QUIT
Begin DoDot:1
+8 SET XP1=@ROOT@(OLDA,0)
+9 ;entity
SET $PIECE(XP1,U,1)=PE_";DIC(9.4,"
+10 SET $PIECE(XP1,U,2)=$$LK^XPDIA($NAME(^XTV(8989.51)),$PIECE(XP1,U,2))
+11 SET DA=$$LKPAR($PIECE(XP1,U),$PIECE(XP1,U,2),$PIECE(XP1,U,3))
+12 ;Remove the current entry if we have one
+13 IF DA>0
SET DIK="^XTV(8989.5,"
DO ^DIK
+14 ;Otherwise Add the zero node, See that we have a IEN
+15 IF DA'>0
DO ADDPAR($PIECE(XP1,U),$PIECE(XP1,U,2),$PIECE(XP1,U,3))
SET DA=$$LKPAR($PIECE(XP1,U),$PIECE(XP1,U,2),$PIECE(XP1,U,3))
+16 ;don't have a entry
IF 'DA
QUIT
+17 ;Merge the date ;with IHS fix
+18 MERGE ^XTV(8989.5,DA)=^XTMP("XPDI",XPDA,"KRN",8989.5,OLDA)
+19 ;zero node with new pointers
SET ^XTV(8989.5,DA,0)=XP1
+20 ;Get Definition and check if Data Type is pointer, then get pointed to global ref.
+21 SET PT=$GET(^XTV(8989.51,+$PIECE(XP1,U,2),1))
IF $PIECE(PT,U)="P"
Begin DoDot:2
+22 SET XP3=$GET(^XTV(8989.5,DA,1))
SET PT=$PIECE(PT,U,2)
+23 ;resolve pointer value
IF PT
SET $PIECE(XP3,U)=$$FIND1^DIC(PT,"","X",$PIECE(XP3,U))
+24 IF $PIECE(XP3,U)
SET ^XTV(8989.5,DA,1)=XP3
End DoDot:2
+25 ;X-ref it
+26 SET DIK="^XTV(8989.5,"
DO IX1^DIK
End DoDot:1
+27 QUIT
+28 ;
LKPAR(ENT,PAR,INST) ;Lookup an entry
+1 QUIT $ORDER(^XTV(8989.5,"AC",PAR,ENT,INST,0))
+2 ;
ADDPAR(ENT,PAR,INST) ;Add a parameter instance
+1 NEW FDA,FDAIEN,DIERR
+2 SET FDA(8989.5,"+1,",.01)=ENT
+3 SET FDA(8989.5,"+1,",.02)=PAR
+4 SET FDA(8989.5,"+1,",.03)=INST
+5 DO UPDATE^DIE("","FDA","FDAIEN","DIERR")
+6 QUIT
+7 ;
PAR1F1 ;PARAMETER File 8989.51: file Pre
+1 QUIT
PAR1E1 ;PARAMETER file 8989.51: entry pre
+1 NEW XP1,XP2,XP3
+2 SET ^TMP($JOB,"XPD",DA)=""
+3 ;if there is a new Description, kill the old Description
+4 IF $ORDER(^XTMP("XPDI",XPDA,"KRN",8989.51,OLDA,20,0))
KILL ^XTV(8989.51,DA,20)
+5 ;Kill any old Allowable entries
+6 IF $ORDER(^XTMP("XPDI",XPDA,"KRN",8989.51,OLDA,30,0))
KILL ^XTV(8989.51,DA,30)
+7 QUIT
PAR1F2 ;PARAMETER file 8989.51: file post
+1 NEW XPD,DIK,DA
+2 SET DA=0
+3 FOR
SET DA=$ORDER(^TMP($JOB,"XPD",DA))
IF 'DA
QUIT
Begin DoDot:1
+4 SET DIK="^XTV(8989.51,"
DO IX1^DIK
End DoDot:1
+5 ;Go load the entries from 8989.5
DO PAR0F2
+6 QUIT
PAR1DEL(RT) ;Delete Parameter Def entries
+1 ;Cleanup pointers
DO DELPTR^XPDUTL1(8989.51,RT)
+2 ;Cleanup entries
DO DELIEN^XPDUTL1(8989.51,RT)
+3 QUIT
+4 ;
PAR2F1 ;PARAMETER File 8989.52: file Pre
+1 KILL ^TMP($JOB,"XPD")
+2 QUIT
PAR2E1 ;PARAMETER file 8989.52: entry Pre
+1 NEW XP1,XP2,ROOT
+2 SET ROOT=$NAME(^XTMP("XPDI",XPDA,"KRN",8989.52))
+3 ;Use instance of
SET XP2=$PIECE(@ROOT@(OLDA,0),U,4)
+4 ;Because we change the transport global see that a restart will work
+5 IF $LENGTH(XP2)
IF XP2?1A.E
SET $PIECE(@ROOT@(OLDA,0),U,4)=$$LK^XPDIA($NAME(^XTV(8989.51)),XP2)
+6 SET XP1=0
+7 FOR
SET XP1=$ORDER(@ROOT@(OLDA,10,XP1))
SET XP2=""
IF 'XP1
QUIT
Begin DoDot:1
+8 ;Parameter
SET XP2=$PIECE(@ROOT@(OLDA,10,XP1,0),U,2)
+9 IF $LENGTH(XP2)
IF XP2?1A.E
SET $PIECE(@ROOT@(OLDA,10,XP1,0),U,2)=$$LK^XPDIA($NAME(^XTV(8989.51)),XP2)
+10 QUIT
End DoDot:1
+11 QUIT
PAR2F2 ;PARAMETER file 8989.52: file Post
+1 QUIT
PAR2DEL(RT) ;Delete Parameter Templates
+1 DO DELIEN^XPDUTL1(8989.52,RT)
+2 QUIT