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 (5 weeks, 5 days ago) by snw
Branches: MAIN
CVS tags: HEAD
Restructure repository

DDS1(DDSPG)	;SFISC/MKO-LOAD PAGE ;09:37 AM  20 Oct 1994
	;;21.0;VA FileMan;;Dec 28, 1994
	;Per VHA Directive 10-93-142, this routine should not be modified.
	;Input:
	;  DDS     = Form number^Form name
	;  DDSPG   = Internal page number
	;  DA      = Record array
	;  DDSREFT = Global location where data (temporarily) is stored
	;  DDP     = Primary file number of form
	;  DIE     = Global root of form
	;  DDSDA   = DA,DA(1),... of form
	;  DDSDL   = Level number
	;Also needed for pointed-to blocks:
	;  DDSDAORG
	;  DDSDLORG
	;Returns:
	;  DIERR
	;
	S U="^"
	;
	;Get header block
	S DDS1B=$P($G(^DIST(.403,+DDS,40,DDSPG,0)),U,2)
	I DDS1B]"" D BLK(DDSPG,DDS1B,"",1) G:$G(DIERR) END
	;
	;Get all other blocks on page
	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
	;
END	K DDS1B,DDS1BO
	Q
	;
BLK(DDSPG,DDS1B,DDS1BO,DDS1H,DDS1E)	;Load block
	;In:  DDS1H  = 1 if a header block
	;     DDS1E  = 1 if we're loading up a pointed-to block and
	;              we want interactive dialog (DIC(0)["E") in the lookup
	;
	I $D(^DIST(.404,DDS1B,0))[0 D BLD^DIALOG(3051,"#"_DDS1B) Q
	;
	N DDS1PTB,DDS1REP S DDS1PTB=""
	I '$G(DDS1H) D
	. S DDS1PTB=$G(^DIST(.403,+DDS,40,DDSPG,40,DDS1B,1)),DDS1REP=$G(^(2))
	. K:DDS1REP<2 DDS1REP
	;
	I DDS1PTB]"" N @$$D0(DDSDL),DA,DDP,DIE,DDSDL,DDSDA D  Q:$G(DIERR)
	. I $G(DDS1REP)>1 D
	.. D BK^DDS10(.DDS1B,.DDP) Q:$G(DIERR)
	.. D GDA^DDS10(DDS1B,$G(DDS1E),.DA) Q:$G(DIERR)
	.. S DDP=$G(^DD(DDP,0,"UP"))
	.. D GL^DDS10(DDP,.DA,.DIE,.DDSDL,.DDSDA,1)
	.. D GETD0(.DA,DDSDL)
	. E  D
	.. D SET^DDS10(DDS1B,$G(DDS1E),.DA,.DDP,.DIE,.DDSDL,.DDSDA)
	.. Q:$G(DIERR)
	.. I DA="",'$G(DDS1E),$P($G(@DDSREFT@(DDSPG,DDS1B)),U)]"" S DDSDA=$P(^(DDS1B),U),DA=+DDSDA
	.. S D0=DA
	;
	I $G(DA)]"",$G(@DDSREFT@(DDSPG,DDS1B,DDSDA))<1 D
	. S $P(@DDSREFT@(DDSPG,DDS1B,DDSDA),U)=1
	. I $G(DDS1REP)>1 D REP Q
	. ;
	. S @DDSREFT@(DDSPG,DDS1B,DDSDA,"GL")=DIE
	. D ^DDS11(DDS1B)
	;
	S $P(@DDSREFT@(DDSPG,DDS1B),U)=$G(DDSDA)
	Q
	;
REP	;Load data for repeating block
	N DDS1DDP,DDS1IND,DDS1INI,DDS1MUL,DDS1PDA,DDS1REF,DDS1RT,DDS1SEL
	N DDS1SN,DDS1VAL
	S DDS1REF=$NA(@DDSREFT@(DDSPG,DDS1B))
	S DDS1DDP=$P(@DDSREFS@(DDSPG,DDS1B),U,3)
	S DDS1IND=$P(DDS1REP,U,2) S:DDS1IND="" DDS1IND="B"
	S DDS1INI=$P(DDS1REP,U,3)
	S DDS1SEL=$P(@DDSREFS@(DDSPG,DDS1B),U,10)
	S DDS1PDA=DDSDA
	;
	S DDS1MUL=$O(^DD(DDP,"SB",DDS1DDP,""))
	;
	S $P(@DDS1REF@(DDS1PDA),U,7,10)=DDP_U_DDS1MUL_U_DDS1SEL_U_DDS1IND
	S @DDS1REF@(DDSDA,"GL")=$S(DDS1MUL:DIE_+DA_","""_$P($P(^DD(DDP,DDS1MUL,0),U,4),";")_""",",1:^DIC(DDS1DDP,0,"GL"))
	;
	N DIE,DDP
	S DIE=@DDS1REF@(DDSDA,"GL"),DDS1RT=$$CREF^DILF(DIE),DDP=DDS1DDP
	S DDS1SN=0
	;
	I DDS1MUL D
	. D DDA^DDS5(0,.DA,.DDSDL)
	. S DDSDA=","_DDSDA
	. S:'$D(@DDS1RT@(DDS1IND)) DDS1IND="!IEN"
	. I DDS1IND="!IEN" D
	.. S DA=0 F  S DA=$O(@DDS1RT@(DA)) Q:'DA  D REPLD
	. E  D
	.. S DDS1VAL=""
	.. F  S DDS1VAL=$O(@DDS1RT@(DDS1IND,DDS1VAL)) Q:DDS1VAL=""  D
	... S DA="" F  S DA=$O(@DDS1RT@(DDS1IND,DDS1VAL,DA)) Q:DA=""  D REPLD
	;
	E  S DDS1VAL=DA N D0,DA,DDSDA D
	. S DDSDA=",",DA=""
	. F  S DA=$O(@DDS1RT@(DDS1IND,DDS1VAL,DA)) Q:DA=""  D REPLD
	;
	;
	I DDS1INI="l"!(DDS1INI="n") D
	. N N,T
	. S N=DDS1INI="n"
	. S DDS1SN=$O(@DDS1REF@(DDS1PDA," "),-1)+N
	. S T=DDS1SN-DDS1REP+2-N
	. S DDS1INI=$S(T<1:1_U_DDS1SN,1:T_U_(DDS1REP-'N))_U_DDS1SN
	E  S DDS1INI="1^1^1"
	;
	S $P(@DDS1REF@(DDS1PDA),U,2,6)=DDS1PDA_U_DDS1INI_U_+DDS1REP
	;
	I DDS1MUL D
	. D UDA^DDS5(.DA,.DDSDL)
	. S DDSDA=$P(DDSDA,",",2,999)
	Q
	;
REPLD	;Load data
	S DDS1SN=DDS1SN+1,$P(DDSDA,",")=DA,@("D"_DDSDL)=DA
	S @DDS1REF@(DDS1PDA,DDS1SN)=DDSDA
	S @DDS1REF@(DDS1PDA,"B",DDSDA)=DDS1SN
	D ^DDS11(DDS1B)
	Q
	;
D0(DL)	;Given DL, return string D0,D1,...,Dn
	N I,S
	S S="" F I=0:1:DL S S=S_"D"_I_","
	S:S?.E1"," S=$E(S,1,$L(S)-1)
	Q S
	;
GETD0(DA,DL)	;Given DA array, set D0,D1...
	N I
	S @("D"_DL)=DA
	F I=1:1:DL-1 S @("D"_(DL-I))=DA(I)
	Q

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