File:  [Coherent Logic Development] / freem_fileman / USER / DDS1.m
Revision 1.1: download - view: text, annotated - select for diffs
Mon Apr 28 14:13:19 2025 UTC (3 months ago) by snw
Branches: MAIN
CVS tags: HEAD
Restructure repository

    1: DDS1(DDSPG)	;SFISC/MKO-LOAD PAGE ;09:37 AM  20 Oct 1994
    2: 	;;21.0;VA FileMan;;Dec 28, 1994
    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: 	.. Q:$G(DIERR)
   53: 	.. I DA="",'$G(DDS1E),$P($G(@DDSREFT@(DDSPG,DDS1B)),U)]"" S DDSDA=$P(^(DDS1B),U),DA=+DDSDA
   54: 	.. S D0=DA
   55: 	;
   56: 	I $G(DA)]"",$G(@DDSREFT@(DDSPG,DDS1B,DDSDA))<1 D
   57: 	. S $P(@DDSREFT@(DDSPG,DDS1B,DDSDA),U)=1
   58: 	. I $G(DDS1REP)>1 D REP Q
   59: 	. ;
   60: 	. S @DDSREFT@(DDSPG,DDS1B,DDSDA,"GL")=DIE
   61: 	. D ^DDS11(DDS1B)
   62: 	;
   63: 	S $P(@DDSREFT@(DDSPG,DDS1B),U)=$G(DDSDA)
   64: 	Q
   65: 	;
   66: REP	;Load data for repeating block
   67: 	N DDS1DDP,DDS1IND,DDS1INI,DDS1MUL,DDS1PDA,DDS1REF,DDS1RT,DDS1SEL
   68: 	N DDS1SN,DDS1VAL
   69: 	S DDS1REF=$NA(@DDSREFT@(DDSPG,DDS1B))
   70: 	S DDS1DDP=$P(@DDSREFS@(DDSPG,DDS1B),U,3)
   71: 	S DDS1IND=$P(DDS1REP,U,2) S:DDS1IND="" DDS1IND="B"
   72: 	S DDS1INI=$P(DDS1REP,U,3)
   73: 	S DDS1SEL=$P(@DDSREFS@(DDSPG,DDS1B),U,10)
   74: 	S DDS1PDA=DDSDA
   75: 	;
   76: 	S DDS1MUL=$O(^DD(DDP,"SB",DDS1DDP,""))
   77: 	;
   78: 	S $P(@DDS1REF@(DDS1PDA),U,7,10)=DDP_U_DDS1MUL_U_DDS1SEL_U_DDS1IND
   79: 	S @DDS1REF@(DDSDA,"GL")=$S(DDS1MUL:DIE_+DA_","""_$P($P(^DD(DDP,DDS1MUL,0),U,4),";")_""",",1:^DIC(DDS1DDP,0,"GL"))
   80: 	;
   81: 	N DIE,DDP
   82: 	S DIE=@DDS1REF@(DDSDA,"GL"),DDS1RT=$$CREF^DILF(DIE),DDP=DDS1DDP
   83: 	S DDS1SN=0
   84: 	;
   85: 	I DDS1MUL D
   86: 	. D DDA^DDS5(0,.DA,.DDSDL)
   87: 	. S DDSDA=","_DDSDA
   88: 	. S:'$D(@DDS1RT@(DDS1IND)) DDS1IND="!IEN"
   89: 	. I DDS1IND="!IEN" D
   90: 	.. S DA=0 F  S DA=$O(@DDS1RT@(DA)) Q:'DA  D REPLD
   91: 	. E  D
   92: 	.. S DDS1VAL=""
   93: 	.. F  S DDS1VAL=$O(@DDS1RT@(DDS1IND,DDS1VAL)) Q:DDS1VAL=""  D
   94: 	... S DA="" F  S DA=$O(@DDS1RT@(DDS1IND,DDS1VAL,DA)) Q:DA=""  D REPLD
   95: 	;
   96: 	E  S DDS1VAL=DA N D0,DA,DDSDA D
   97: 	. S DDSDA=",",DA=""
   98: 	. F  S DA=$O(@DDS1RT@(DDS1IND,DDS1VAL,DA)) Q:DA=""  D REPLD
   99: 	;
  100: 	;
  101: 	I DDS1INI="l"!(DDS1INI="n") D
  102: 	. N N,T
  103: 	. S N=DDS1INI="n"
  104: 	. S DDS1SN=$O(@DDS1REF@(DDS1PDA," "),-1)+N
  105: 	. S T=DDS1SN-DDS1REP+2-N
  106: 	. S DDS1INI=$S(T<1:1_U_DDS1SN,1:T_U_(DDS1REP-'N))_U_DDS1SN
  107: 	E  S DDS1INI="1^1^1"
  108: 	;
  109: 	S $P(@DDS1REF@(DDS1PDA),U,2,6)=DDS1PDA_U_DDS1INI_U_+DDS1REP
  110: 	;
  111: 	I DDS1MUL D
  112: 	. D UDA^DDS5(.DA,.DDSDL)
  113: 	. S DDSDA=$P(DDSDA,",",2,999)
  114: 	Q
  115: 	;
  116: REPLD	;Load data
  117: 	S DDS1SN=DDS1SN+1,$P(DDSDA,",")=DA,@("D"_DDSDL)=DA
  118: 	S @DDS1REF@(DDS1PDA,DDS1SN)=DDSDA
  119: 	S @DDS1REF@(DDS1PDA,"B",DDSDA)=DDS1SN
  120: 	D ^DDS11(DDS1B)
  121: 	Q
  122: 	;
  123: D0(DL)	;Given DL, return string D0,D1,...,Dn
  124: 	N I,S
  125: 	S S="" F I=0:1:DL S S=S_"D"_I_","
  126: 	S:S?.E1"," S=$E(S,1,$L(S)-1)
  127: 	Q S
  128: 	;
  129: GETD0(DA,DL)	;Given DA array, set D0,D1...
  130: 	N I
  131: 	S @("D"_DL)=DA
  132: 	F I=1:1:DL-1 S @("D"_(DL-I))=DA(I)
  133: 	Q

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>