| 1 | DDS1(DDSPG) ;SFISC/MKO-LOAD PAGE ;11:25 AM  4 Aug 1998
 | 
|---|
| 2 |  ;;22.0;VA FileMan;;Mar 30, 1999
 | 
|---|
| 3 |  ;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;Input:
 | 
|---|
| 5 |  ;  DDS     = Form number^Form name
 | 
|---|
| 6 |  ;  DDSPG   = Internal page number
 | 
|---|
| 7 |  ;  DA      = Record array
 | 
|---|
| 8 |  ;  DDSREFT = Global location where data (temporarily) is stored
 | 
|---|
| 9 |  ;  DDP     = Primary file number of form
 | 
|---|
| 10 |  ;  DIE     = Global root of form
 | 
|---|
| 11 |  ;  DDSDA   = DA,DA(1),... of form
 | 
|---|
| 12 |  ;  DDSDL   = Level number
 | 
|---|
| 13 |  ;Also needed for pointed-to blocks:
 | 
|---|
| 14 |  ;  DDSDAORG
 | 
|---|
| 15 |  ;  DDSDLORG
 | 
|---|
| 16 |  ;Returns:
 | 
|---|
| 17 |  ;  DIERR
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  S U="^"
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 |  ;Get header block
 | 
|---|
| 22 |  S DDS1B=$P($G(^DIST(.403,+DDS,40,DDSPG,0)),U,2)
 | 
|---|
| 23 |  I DDS1B]"" D BLK(DDSPG,DDS1B,"",1) G:$G(DIERR) END
 | 
|---|
| 24 |  ;
 | 
|---|
| 25 |  ;Get all other blocks on page
 | 
|---|
| 26 |  S DDS1BO="" F  S DDS1BO=$O(^DIST(.403,+DDS,40,DDSPG,40,"AC",DDS1BO)) Q:DDS1BO=""  S DDS1B=$O(^(DDS1BO,0)) Q:'DDS1B  D BLK(DDSPG,DDS1B,DDS1BO) G:$G(DIERR) END
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 | END K DDS1B,DDS1BO
 | 
|---|
| 29 |  Q
 | 
|---|
| 30 |  ;
 | 
|---|
| 31 | BLK(DDSPG,DDS1B,DDS1BO,DDS1H,DDS1E) ;Load block
 | 
|---|
| 32 |  ;In:  DDS1H  = 1 if a header block
 | 
|---|
| 33 |  ;     DDS1E  = 1 if we're loading up a pointed-to block and
 | 
|---|
| 34 |  ;              we want interactive dialog (DIC(0)["E") in the lookup
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 |  I $D(^DIST(.404,DDS1B,0))[0 D BLD^DIALOG(3051,"#"_DDS1B) Q
 | 
|---|
| 37 |  ;
 | 
|---|
| 38 |  N DDS1PTB,DDS1REP S DDS1PTB=""
 | 
|---|
| 39 |  I '$G(DDS1H) D
 | 
|---|
| 40 |  . S DDS1PTB=$G(^DIST(.403,+DDS,40,DDSPG,40,DDS1B,1)),DDS1REP=$G(^(2))
 | 
|---|
| 41 |  . K:DDS1REP<2 DDS1REP
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 |  I DDS1PTB]"" N @$$D0(DDSDL),DA,DDP,DIE,DDSDL,DDSDA D  Q:$G(DIERR)
 | 
|---|
| 44 |  . I $G(DDS1REP)>1 D
 | 
|---|
| 45 |  .. D BK^DDS10(.DDS1B,.DDP) Q:$G(DIERR)
 | 
|---|
| 46 |  .. D GDA^DDS10(DDS1B,$G(DDS1E),.DA) Q:$G(DIERR)
 | 
|---|
| 47 |  .. S DDP=$G(^DD(DDP,0,"UP"))
 | 
|---|
| 48 |  .. D GL^DDS10(DDP,.DA,.DIE,.DDSDL,.DDSDA,1)
 | 
|---|
| 49 |  .. D GETD0(.DA,DDSDL)
 | 
|---|
| 50 |  . E  D
 | 
|---|
| 51 |  .. D SET^DDS10(DDS1B,$G(DDS1E),.DA,.DDP,.DIE,.DDSDL,.DDSDA)
 | 
|---|
| 52 |  .. I +$G(DIERR)=1,$G(^TMP("DIERR",$J,1))=601 D  Q
 | 
|---|
| 53 |  ... L -@(DIE_DA_")")
 | 
|---|
| 54 |  ... K ^TMP("DDS",$J,"LOCK",DIE_DA_")")
 | 
|---|
| 55 |  ... D CLEAN^DILF
 | 
|---|
| 56 |  ... S (DA,D0,DDSDA)=""
 | 
|---|
| 57 |  .. Q:$G(DIERR)
 | 
|---|
| 58 |  .. I DA="",'$G(DDS1E),$P($G(@DDSREFT@(DDSPG,DDS1B)),U)]"" S DDSDA=$P(^(DDS1B),U),DA=+DDSDA
 | 
|---|
| 59 |  .. S D0=DA
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 |  I $G(DA)!'$G(DDSDAORG),$G(@DDSREFT@(DDSPG,DDS1B,DDSDA))<1 D
 | 
|---|
| 62 |  . S $P(@DDSREFT@(DDSPG,DDS1B,DDSDA),U)=1
 | 
|---|
| 63 |  . I $G(DDS1REP)>1 D REP Q
 | 
|---|
| 64 |  . ;
 | 
|---|
| 65 |  . S @DDSREFT@(DDSPG,DDS1B,DDSDA,"GL")=DIE
 | 
|---|
| 66 |  . D ^DDS11(DDS1B)
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 |  S $P(@DDSREFT@(DDSPG,DDS1B),U)=$G(DDSDA)
 | 
|---|
| 69 |  Q
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 | REP ;Load data for repeating block
 | 
|---|
| 72 |  N DDS1DDP,DDS1IND,DDS1INI,DDS1MUL,DDS1PDA,DDS1REF,DDS1RT,DDS1SEL
 | 
|---|
| 73 |  N DDS1SN,DDS1VAL,DDS1FSCR,DDS1SCNT,DDS1STRT,DDS1Q
 | 
|---|
| 74 |  S DDS1REF=$NA(@DDSREFT@(DDSPG,DDS1B))
 | 
|---|
| 75 |  S DDS1DDP=$P(@DDSREFS@(DDSPG,DDS1B),U,3)
 | 
|---|
| 76 |  S DDS1IND=$P(DDS1REP,U,2) S:DDS1IND="" DDS1IND="B"
 | 
|---|
| 77 |  S DDS1INI=$P(DDS1REP,U,3)
 | 
|---|
| 78 |  S DDS1SEL=$P(@DDSREFS@(DDSPG,DDS1B),U,10)
 | 
|---|
| 79 |  S DDS1PDA=DDSDA
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 |  S DDS1MUL=$O(^DD(DDP,"SB",DDS1DDP,""))
 | 
|---|
| 82 |  S:$G(^DD(DDS1DDP,0,"SCR"))]"" DDS1FSCR=^("SCR")
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 |  S $P(@DDS1REF@(DDS1PDA),U,7,10)=DDP_U_DDS1MUL_U_DDS1SEL_U_DDS1IND
 | 
|---|
| 85 |  S @DDS1REF@(DDSDA,"GL")=$S(DDS1MUL:DIE_+DA_","""_$P($P(^DD(DDP,DDS1MUL,0),U,4),";")_""",",1:^DIC(DDS1DDP,0,"GL"))
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 |  N DIE,DDP
 | 
|---|
| 88 |  S DIE=@DDS1REF@(DDSDA,"GL"),DDS1RT=$$CREF^DILF(DIE),DDP=DDS1DDP
 | 
|---|
| 89 |  S DDS1SN=0
 | 
|---|
| 90 |  ;
 | 
|---|
| 91 |  I DDS1MUL D
 | 
|---|
| 92 |  . D DDA^DDS5(0,.DA,.DDSDL)
 | 
|---|
| 93 |  . S DDSDA=","_DDSDA
 | 
|---|
| 94 |  . S:'$D(@DDS1RT@(DDS1IND)) DDS1IND="!IEN"
 | 
|---|
| 95 |  . I DDS1IND="!IEN" D
 | 
|---|
| 96 |  .. S DA=0 F  S DA=$O(@DDS1RT@(DA)) Q:'DA  D REPLD
 | 
|---|
| 97 |  . E  D
 | 
|---|
| 98 |  .. S (DDS1Q,DDS1STRT)=$NA(@DDS1RT@(DDS1IND)),DDS1SCNT=$QL(DDS1Q)
 | 
|---|
| 99 |  .. F  S DDS1Q=$Q(@DDS1Q) Q:DDS1Q=""  Q:$NA(@DDS1Q,DDS1SCNT)'=DDS1STRT  D
 | 
|---|
| 100 |  ... S DA=$QS(DDS1Q,$QL(DDS1Q)) D REPLD
 | 
|---|
| 101 |  ;
 | 
|---|
| 102 |  E  S DDS1VAL=DA N D0,DA,DDSDA D
 | 
|---|
| 103 |  . S DDSDA=","
 | 
|---|
| 104 |  . S (DDS1Q,DDS1STRT)=$NA(@DDS1RT@(DDS1IND,DDS1VAL)),DDS1SCNT=$QL(DDS1Q)
 | 
|---|
| 105 |  . F  S DDS1Q=$Q(@DDS1Q) Q:DDS1Q=""  Q:$NA(@DDS1Q,DDS1SCNT)'=DDS1STRT  D
 | 
|---|
| 106 |  .. S DA=$QS(DDS1Q,$QL(DDS1Q)) D REPLD
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 |  I DDS1INI="l"!(DDS1INI="n") D
 | 
|---|
| 109 |  . N N,T
 | 
|---|
| 110 |  . S N=DDS1INI="n"
 | 
|---|
| 111 |  . S DDS1SN=$O(@DDS1REF@(DDS1PDA," "),-1)+N
 | 
|---|
| 112 |  . S T=DDS1SN-DDS1REP+2-N
 | 
|---|
| 113 |  . S DDS1INI=$S(T<1:1_U_DDS1SN,1:T_U_(DDS1REP-'N))_U_DDS1SN
 | 
|---|
| 114 |  E  S DDS1INI="1^1^1"
 | 
|---|
| 115 |  ;
 | 
|---|
| 116 |  S $P(@DDS1REF@(DDS1PDA),U,2,6)=DDS1PDA_U_DDS1INI_U_+DDS1REP
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 |  I DDS1MUL D
 | 
|---|
| 119 |  . D UDA^DDS5(.DA,.DDSDL)
 | 
|---|
| 120 |  . S DDSDA=$P(DDSDA,",",2,999)
 | 
|---|
| 121 |  Q
 | 
|---|
| 122 |  ;
 | 
|---|
| 123 | REPLD ;Load data
 | 
|---|
| 124 |  Q:'$D(@DDS1RT@(DA,0))  I $D(DDS1FSCR) N Y S Y=DA X DDS1FSCR Q:'$T
 | 
|---|
| 125 |  S DDS1SN=DDS1SN+1,$P(DDSDA,",")=DA,@("D"_DDSDL)=DA
 | 
|---|
| 126 |  S @DDS1REF@(DDS1PDA,DDS1SN)=DDSDA
 | 
|---|
| 127 |  S @DDS1REF@(DDS1PDA,"B",DDSDA)=DDS1SN
 | 
|---|
| 128 |  D ^DDS11(DDS1B)
 | 
|---|
| 129 |  Q
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 | D0(DL) ;Given DL, return string D0,D1,...,Dn
 | 
|---|
| 132 |  N I,S
 | 
|---|
| 133 |  S S="" F I=0:1:DL S S=S_"D"_I_","
 | 
|---|
| 134 |  S:S?.E1"," S=$E(S,1,$L(S)-1)
 | 
|---|
| 135 |  Q S
 | 
|---|
| 136 |  ;
 | 
|---|
| 137 | GETD0(DA,DL) ;Given DA array, set D0,D1...
 | 
|---|
| 138 |  N I
 | 
|---|
| 139 |  S @("D"_DL)=DA
 | 
|---|
| 140 |  F I=1:1:DL-1 S @("D"_(DL-I))=DA(I)
 | 
|---|
| 141 |  Q
 | 
|---|