| 1 | RGUTDIC ;CAIRO/DKM - Encapsulated FileMan API;04-Sep-1998 11:26;DKM
 | 
|---|
| 2 |  ;;2.1;RUN TIME LIBRARY;;Mar 22, 1999
 | 
|---|
| 3 |  ;=================================================================
 | 
|---|
| 4 |  ; Parameterized routine to add/edit/extract an entry in a
 | 
|---|
| 5 |  ; FileMan file.  Encapsulates global structure info so no
 | 
|---|
| 6 |  ; need to specify this directly.
 | 
|---|
| 7 |  ; Inputs:
 | 
|---|
| 8 |  ;    %RGDIC = Global root, file number, or bookmark
 | 
|---|
| 9 |  ;    %RGCMD = n    : IEN of entry to process
 | 
|---|
| 10 |  ;             0    : Process last IEN referenced
 | 
|---|
| 11 |  ;             +n   : Move down to subfile n
 | 
|---|
| 12 |  ;             -    : Move up to parent file
 | 
|---|
| 13 |  ;             @n   : Delete IEN #n (or last referenced if missing)
 | 
|---|
| 14 |  ;             =x;y : Lookup y at current level using options in x
 | 
|---|
| 15 |  ;             ?x;y ; Lookup y using RGUTLKP utility with options in x
 | 
|---|
| 16 |  ;             >x;y : Read fields specified in y using options in x
 | 
|---|
| 17 |  ;             <x;y : Write fields specified in y using options in x
 | 
|---|
| 18 |  ;             ~x;y : Same as <, but creates new entry
 | 
|---|
| 19 |  ;             %n   : Force DINUM to n
 | 
|---|
| 20 |  ; Outputs:
 | 
|---|
| 21 |  ;     Returns in the first piece the IEN of the entry or...
 | 
|---|
| 22 |  ;      0 = Entry was deleted
 | 
|---|
| 23 |  ;     -1 = Entry was rejected
 | 
|---|
| 24 |  ;     -2 = Entry locked by another process
 | 
|---|
| 25 |  ;     -3 = Unexpected error
 | 
|---|
| 26 |  ;=================================================================
 | 
|---|
| 27 | ENTRY(%RGDIC,%RGCMD) ;
 | 
|---|
| 28 |  S %RGDIC(0)=+$G(DUZ)
 | 
|---|
| 29 |  N DUZ,DIC,DINUM,DIE,DIQ,DIQUIET,DIK,%RGX,%RGIEN,%RGARG,%RGN1,%RGN2,%RGZ,X,Y
 | 
|---|
| 30 |  N DA,DC,DD,DG,DH,DK,DL,DO,DQ,DR,DU,DV,DW,DY
 | 
|---|
| 31 |  S DUZ=%RGDIC(0),DUZ(0)="@",@$$TRAP^RGZOSF("ERROR^RGUTDIC"),%RGCMD=$G(%RGCMD),%RGIEN="",DIQUIET=1
 | 
|---|
| 32 |  ; Build the bookmark if a global reference or file # passed
 | 
|---|
| 33 |  I %RGDIC'[U D
 | 
|---|
| 34 |  .S:%RGDIC'=+%RGDIC %RGDIC=+$O(^DIC("B",%RGDIC,0))
 | 
|---|
| 35 |  .S %RGDIC=$$ROOT^DILFD(%RGDIC)_U_U_%RGDIC
 | 
|---|
| 36 |  I $P(%RGDIC,U,4)="" D
 | 
|---|
| 37 |  .S %RGZ=U_$P(%RGDIC,U,2),%RGZ=$E(%RGZ,1,$L(%RGZ)-1),%RGZ=%RGZ_$S(%RGZ["(":")",1:"")
 | 
|---|
| 38 |  .S $P(%RGDIC,U,4)=$P(@%RGZ@(0),U,2)
 | 
|---|
| 39 |  F %RGN1=1:1:$L(%RGCMD,"|") S %RGARG=$P(%RGCMD,"|",%RGN1),%RGZ=$E(%RGARG) D  Q:%RGIEN<0
 | 
|---|
| 40 |  .S %RGN2=$F("-+=@><~?%",%RGZ)
 | 
|---|
| 41 |  .S:%RGN2 %RGN2=%RGN2-1,%RGARG=$E(%RGARG,2,999)
 | 
|---|
| 42 |  .D DA,@%RGN2
 | 
|---|
| 43 |  .S:%RGIEN>0 $P(%RGDIC,U,3)=%RGIEN
 | 
|---|
| 44 |  S $P(%RGDIC,U)=%RGIEN
 | 
|---|
| 45 |  Q %RGDIC
 | 
|---|
| 46 |  ; Set IEN
 | 
|---|
| 47 | 0 S:%RGARG'<0 %RGIEN=$S($D(@%RGDIC(2)@(+%RGARG)):+%RGARG,1:0),$P(%RGDIC,U,3)=%RGIEN
 | 
|---|
| 48 |  Q
 | 
|---|
| 49 |  ; Move up to parent file
 | 
|---|
| 50 | 1 N %RGX,%RGY
 | 
|---|
| 51 |  S $P(%RGDIC,U,4)=$P($P(%RGDIC,U,4),"|",2,999)
 | 
|---|
| 52 |  S %RGY=$P(%RGDIC,U,2),%RGX=$L(%RGY,"|"),$P(%RGDIC,U,2)=$P(%RGY,"|",1,%RGX-1)
 | 
|---|
| 53 |  S %RGIEN=+$P(%RGY,"|",%RGX),$P(%RGDIC,U,3)=%RGIEN
 | 
|---|
| 54 |  D DA
 | 
|---|
| 55 |  Q
 | 
|---|
| 56 |  ; Move down to subfile
 | 
|---|
| 57 | 2 N %RGX,%RGY,%RGZ
 | 
|---|
| 58 |  I $P(%RGDIC,U,3)'>0 S %RGIEN=-1 Q
 | 
|---|
| 59 |  S %RGY=+$P(%RGDIC,U,4)
 | 
|---|
| 60 |  S:%RGARG'=+%RGARG %RGARG=+$O(^DD(%RGY,"B",%RGARG,0)),%RGARG=+$P($G(^DD(%RGY,%RGARG,0)),U,2)
 | 
|---|
| 61 |  S %RGX=+%RGARG,%RGZ=+$O(^DD(%RGY,"SB",%RGX,0)),%RGZ=$P($P(^DD(%RGY,%RGZ,0),U,4),";"),%RGX=$P(^(0),U,2)
 | 
|---|
| 62 |  S:%RGZ'=+%RGZ %RGZ=""""_%RGZ_""""
 | 
|---|
| 63 |  S $P(%RGDIC,U,4)=%RGX_"|"_$P(%RGDIC,U,4),$P(%RGDIC,U,2)=$P(%RGDIC,U,2)_"|"_$P(%RGDIC,U,3)_","_%RGZ_","
 | 
|---|
| 64 |  S %RGIEN="",$P(%RGDIC,U,3)=""
 | 
|---|
| 65 |  D DA
 | 
|---|
| 66 |  Q
 | 
|---|
| 67 |  ; Lookup an entry
 | 
|---|
| 68 | 3 N X,Y
 | 
|---|
| 69 |  I %RGARG[";" S DIC(0)=$P(%RGARG,";"),%RGARG=$P(%RGARG,";",2,999)
 | 
|---|
| 70 |  E  S DIC(0)="XMF"
 | 
|---|
| 71 |  S DIC=%RGDIC(1),X=%RGARG
 | 
|---|
| 72 |  D ^DIC
 | 
|---|
| 73 |  S %RGIEN=+Y
 | 
|---|
| 74 |  Q
 | 
|---|
| 75 |  ; Delete an entry
 | 
|---|
| 76 | 4 N X,Y
 | 
|---|
| 77 |  S:%RGARG DA=%RGARG
 | 
|---|
| 78 |  S DIK=%RGDIC(1),%RGIEN=0
 | 
|---|
| 79 |  D ^DIK
 | 
|---|
| 80 |  Q
 | 
|---|
| 81 |  ; Extract data
 | 
|---|
| 82 | 5 N %RGZ,%RGZ1,%RGX,%RGY
 | 
|---|
| 83 |  I '%RGIEN S %RGIEN=-1 Q
 | 
|---|
| 84 |  S DR=""
 | 
|---|
| 85 |  F %RGX=2:1:$L(%RGARG,";") D
 | 
|---|
| 86 |  .S %RGY=$P(%RGARG,";",%RGX)
 | 
|---|
| 87 |  .I %RGY["=" S %RGZ=$$FLD($P(%RGY,"=",2)),%RGZ1(%RGZ,$P(%RGY,"="))="",%RGY=%RGZ
 | 
|---|
| 88 |  .S DR=DR_$S($L(DR):";",1:"")_%RGY
 | 
|---|
| 89 |  S DIC=%RGDIC(1),DIQ(0)=$P(%RGARG,";")
 | 
|---|
| 90 |  S:DIQ(0)="" DIQ(0)="E"
 | 
|---|
| 91 |  K ^UTILITY("DIQ1",$J)
 | 
|---|
| 92 |  D
 | 
|---|
| 93 |  .N X,Y
 | 
|---|
| 94 |  .D EN^DIQ1
 | 
|---|
| 95 |  F %RGX=0:0 S %RGX=$O(%RGZ1(%RGX)),%RGZ="" Q:'%RGX  D
 | 
|---|
| 96 |  .F  S %RGZ=$O(%RGZ1(%RGX,%RGZ)),%RGZ1="" Q:%RGZ=""  D
 | 
|---|
| 97 |  ..F %RGY="E","I" D
 | 
|---|
| 98 |  ...S:$D(^UTILITY("DIQ1",$J,+$P(%RGDIC,U,4),%RGIEN,%RGX,%RGY)) %RGZ1=%RGZ1_$S($L(%RGZ1):U,1:"")_^(%RGY)
 | 
|---|
| 99 |  ..S @%RGZ=%RGZ1
 | 
|---|
| 100 |  Q
 | 
|---|
| 101 |  ; Edit existing entry
 | 
|---|
| 102 | 6 S DIC(0)=$P(%RGARG,";"),DIC("P")=$P($P(%RGDIC,U,4),"|"),%RGARG=$P(%RGARG,";",2,999)
 | 
|---|
| 103 |  I %RGIEN'>0 S %RGIEN=-1 Q
 | 
|---|
| 104 |  S DIE=%RGDIC(1),DR=%RGARG
 | 
|---|
| 105 |  L +@%RGDIC(2)@(%RGIEN):$S(DIC(0)["!":9999999,1:0)
 | 
|---|
| 106 |  E  S %RGIEN=-2 Q
 | 
|---|
| 107 |  D ^DIE
 | 
|---|
| 108 |  L -@%RGDIC(2)@(%RGIEN)
 | 
|---|
| 109 |  S %RGIEN=+$G(DA)
 | 
|---|
| 110 |  Q
 | 
|---|
| 111 |  ; Create new entry
 | 
|---|
| 112 | 7 N X,Y,DD,DO,DLAYGO
 | 
|---|
| 113 |  S DIC=%RGDIC(1),DIC(0)=$P(%RGARG,";")_"L",DIC("P")=$P($P(%RGDIC,U,4),"|"),Y=$P(%RGARG,";",2),%RGARG=DIC(0)_";"_$P(%RGARG,";",3,999),DLAYGO=DIC("P")\1
 | 
|---|
| 114 |  I +Y'=.01 S %RGIEN=-1 Q
 | 
|---|
| 115 |  S X=$P(Y,"/",4)
 | 
|---|
| 116 |  S:X="" X=$P(Y,"/",5)
 | 
|---|
| 117 |  X:$E(X)=U $E(X,2,999)
 | 
|---|
| 118 |  I $P(^DD(+DIC("P"),.01,0),U,2)["W" D
 | 
|---|
| 119 |  .D WP
 | 
|---|
| 120 |  E  D ^DIC:DIC(0)'["U",FILE^DICN:DIC(0)["U"
 | 
|---|
| 121 |  S %RGIEN=+Y
 | 
|---|
| 122 |  I %RGIEN>0,$P(%RGARG,";",2,99)'="" D DA,6
 | 
|---|
| 123 |  K DINUM
 | 
|---|
| 124 |  Q
 | 
|---|
| 125 | 8 ; Lookup entry
 | 
|---|
| 126 |  N %RGOPT,%RGP,RGFN
 | 
|---|
| 127 |  S %RGOPT=$P(%RGARG,";"),%RGARG=$P(%RGARG,";",2,999),RGFN=+$P(%RGDIC,U,4)
 | 
|---|
| 128 |  S %RGP=+$P(%RGDIC,U,4),%RGP=$P($G(^DD(%RGP,.01,0)),U)
 | 
|---|
| 129 |  S:$L(%RGP) %RGP=%RGP_": "
 | 
|---|
| 130 |  S %RGIEN=$$ENTRY^RGUTLKP(%RGDIC(2),%RGOPT,%RGP,"",%RGARG,"","",$X,$Y,"","","HLP^RGUTDIC")
 | 
|---|
| 131 |  Q
 | 
|---|
| 132 |  ; Force DINUM
 | 
|---|
| 133 | 9 S DINUM=%RGARG
 | 
|---|
| 134 |  Q
 | 
|---|
| 135 | HLP W $G(^DD(+RGFN,.01,3)),!
 | 
|---|
| 136 |  Q
 | 
|---|
| 137 |  ; Word processing field (special case of #7)
 | 
|---|
| 138 | WP N %RGZ,%RGZ1
 | 
|---|
| 139 |  I X="@" D
 | 
|---|
| 140 |  .K @%RGDIC(2)
 | 
|---|
| 141 |  .S Y=0
 | 
|---|
| 142 |  E  D
 | 
|---|
| 143 |  .S %RGZ=$G(@%RGDIC(2)@(0)),Y=$G(DINUM,1+$O(^($C(1)),-1))
 | 
|---|
| 144 |  .S %RGZ1=+$P(%RGZ,U,4),%RGZ=+$P(%RGZ,U,3)
 | 
|---|
| 145 |  .S:Y>%RGZ %RGZ=Y
 | 
|---|
| 146 |  .S:'$D(^(Y)) %RGZ1=%RGZ1+1
 | 
|---|
| 147 |  .S ^(0)=U_U_%RGZ_U_%RGZ1_U_$G(DT),^(Y,0)=X
 | 
|---|
| 148 |  Q:$P(^DD(+DIC("P"),.01,0),U,2)'["a"
 | 
|---|
| 149 |  S %RGIEN=Y
 | 
|---|
| 150 |  D DA,WPAUDIT^RGCODAUD(+DIC("P"),.DA,X,"")
 | 
|---|
| 151 |  Q
 | 
|---|
| 152 |  ; Trap unexpected error
 | 
|---|
| 153 | ERROR S $P(%RGDIC,U)=-3
 | 
|---|
| 154 |  Q %RGDIC
 | 
|---|
| 155 |  ; Return field #
 | 
|---|
| 156 | FLD(X) Q $S(X=+X:X,1:+$O(^DD(+$P(%RGDIC,U,4),"B",X,0)))
 | 
|---|
| 157 |  ; Set up DA array
 | 
|---|
| 158 | DA N %RGZ,%RGZ1,%RGZ2
 | 
|---|
| 159 |  K DA
 | 
|---|
| 160 |  S:'$G(%RGIEN) %RGIEN=$P(%RGDIC,U,3)
 | 
|---|
| 161 |  S %RGZ=$P(%RGDIC,U,2),%RGZ2=$L(%RGZ,"|"),DA=%RGIEN
 | 
|---|
| 162 |  F %RGZ1=2:1:%RGZ2 S DA(%RGZ2-%RGZ1+1)=+$P(%RGZ,"|",%RGZ1)
 | 
|---|
| 163 |  S %RGDIC(1)=U_$TR($P(%RGDIC,U,2),"|"),%RGDIC(2)=$E(%RGDIC(1),1,$L(%RGDIC(1))-1),%RGDIC(2)=%RGDIC(2)_$S(%RGDIC(2)["(":")",1:"")
 | 
|---|
| 164 |  Q
 | 
|---|