File:  [Coherent Logic Development] / freem_fileman / USER / DDS10.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: DDS10	;SFISC/MKO-BLOCK SETUP ;09:48 AM  18 Nov 1994
    2: 	;;21.0;VA FileMan;;Dec 28, 1994
    3: 	;Per VHA Directive 10-93-142, this routine should not be modified.
    4: 	;
    5: SET(DDS1B,DDS1E,DA,DDP,DIE,DL,DDSDA)	;Get values for pointed-to block
    6: 	;In:
    7: 	;  DDS1B   = Block number or [Block name] (by ref)
    8: 	;  DDS1E   = 1, if we're loading a pointed-to block and we want
    9: 	;               interactive dialog (DIC(0)["E") in the lookup
   10: 	;  DA      = Record array
   11: 	;Returns:
   12: 	;  DDS1B = Block number
   13: 	;  DDP   = File number of block
   14: 	;  DIE   = Global root based on DDP and DA
   15: 	;  DL    = Level number (top=0)
   16: 	;  DDSDA = DA,DA(1),...,
   17: 	;
   18: 	D BK(.DDS1B,.DDP) Q:$G(DIERR)
   19: 	D GDA(DDS1B,DDS1E,.DA) Q:$G(DIERR)
   20: 	D GL(DDP,.DA,.DIE,.DL,.DDSDA,1) Q:$G(DIERR)
   21: 	Q
   22: 	;
   23: BK(DDSBK,DDP)	;Lookup block, get file number
   24: 	;Input:
   25: 	;  DDSBK = Block number or [Block name] (by ref)
   26: 	;Returns:
   27: 	;  DDSBK = Block number
   28: 	;  DDP   = File number
   29: 	;  DIERR
   30: 	;
   31: 	I DDSBK=+$P(DDSBK,"E")  D  Q
   32: 	. I $D(^DIST(.404,DDSBK,0))[0 D BLD^DIALOG(3051,"#"_DDSBK) Q
   33: 	. S DDP=+$P(^DIST(.404,DDSBK,0),U,2)
   34: 	I DDSBK?1"["1.E1"]" D  Q
   35: 	. N X,Y,DIC
   36: 	. S X=$E(DDSBK,2,$L(DDSBK)-1),DIC="^DIST(.404,",DIC(0)="FZ"
   37: 	. D ^DIC I Y<0 D BLD^DIALOG(3051,"named "_X) Q
   38: 	. S DDSBK=+Y,DDP=+$P(Y(0),U,2)
   39: 	D BLD^DIALOG(3051,"#"_DDSBK)
   40: 	Q
   41: 	;
   42: GDA(DDS1B,DDS1E,DA)	;Find new DA
   43: 	;Input:
   44: 	;  DDS1B    = Block number
   45: 	;  DDS1E    = 1:Interactive lookup
   46: 	;  DDSDAORG = Original DA array
   47: 	;  DDSDLORG = Original DL
   48: 	;  DDSPG
   49: 	;Returns:
   50: 	;  DA      = Record number
   51: 	;  DIERR
   52: 	;
   53: 	N DDSDA,DDSI,X
   54: 	;
   55: 	;Set DA array to its original value
   56: 	S DA=DDSDAORG
   57: 	F DDSI=1:1:DDSDLORG S DA(DDSI)=DDSDAORG(DDSI)
   58: 	D DDSDA(.DA,DDSDLORG,.DDSDA)
   59: 	;
   60: 	;Xecute each PTB node
   61: 	F DDSI=1:1 Q:DA=""!'$D(@DDSREFS@(DDSPG,DDS1B,"PTB",DDSI))  X ^(DDSI) S:$G(X)'>0 DA=""
   62: 	;
   63: 	;Kill descendants of DA
   64: 	I '$G(DIERR) S DDSI=DA K DA S DA=DDSI
   65: 	S:DA'>0!$G(DIERR) DA=""
   66: 	Q
   67: 	;
   68: GL(F,DA,DIE,DL,DDSDA,DDSL)	;Get global root, level, and IEN
   69: 	;Input variables:
   70: 	;  F    = file #
   71: 	;  DA   = array
   72: 	;  DDSL = flag to lock record
   73: 	;Returns:
   74: 	;  DIE   = global root of file (null if error)
   75: 	;  DL    = level (top=0) (null if error)
   76: 	;  DDSDA = IEN
   77: 	;  DIERR = Error flag
   78: 	;
   79: 	I '$D(^DD(F)) D BLD^DIALOG(401,F) S (DIE,DL)="" Q
   80: 	I $D(^DIC(F,0,"GL"))#2 S DIE=^("GL"),DL=0
   81: 	E  D SUBGL Q:$G(DIERR)
   82: 	;
   83: 	Q:'$G(DA)
   84: 	D DDSDA(.DA,DL,.DDSDA)
   85: 	;
   86: 	N DDSP S DDSP("FILE")=F,DDSP("IEN")=DDSDA
   87: 	;
   88: 	I $D(@(DIE_DA_",0)"))[0 D BLD^DIALOG(601,"",.DDSP)
   89: 	I $D(@(DIE_DA_",-9)")) D BLD^DIALOG(602,"",.DDSP)
   90: 	;
   91: 	I $G(DDSL),$D(^TMP("DDS",$J,"LOCK",DIE_DA_")"))[0 D  Q:$G(DIERR)
   92: 	. L +@(DIE_DA_")"):0 E  D BLD^DIALOG(110,"",.DDSP) Q
   93: 	. S ^TMP("DDS",$J,"LOCK",DIE_DA_")")=""
   94: 	Q
   95: 	;
   96: SUBGL	;Get root and level for subfile
   97: 	N D,I,S,U1
   98: 	S D=F
   99: 	F DL=0:1 Q:$D(^DD(D,0,"UP"))[0  S U1=^("UP") G:'$D(^DD(U1,"SB",D)) SUBER G:$D(^DD(U1,$O(^(D,"")),0))[0 SUBER S S(DL+1)=""""_$P($P(^(0),U,4),";")_"""",D=U1
  100: 	G:$D(^DIC(D,0,"GL"))[0 SUBER S DIE=^("GL")
  101: 	F I=DL:-1:1 G:$D(DA(I))[0 SUBER S DIE=DIE_DA(I)_","_S(I)_","
  102: 	Q
  103: 	;
  104: SUBER	;Come here if an error is encountered in GL
  105: 	S (DIE,DL)=""
  106: 	D BLD^DIALOG(309)
  107: 	Q
  108: 	;
  109: DDSDA(DA,DL,DDSDA)	;Determine DDSDA
  110: 	;Input:
  111: 	;  DA    = Record array
  112: 	;  DL    = Level number (top=0)
  113: 	;Output:
  114: 	;  DDSDA = DA,DA(1),...,
  115: 	;
  116: 	N I
  117: 	I DA="" S DDSDA="" Q
  118: 	S DDSDA=DA_"," F I=1:1:DL S DDSDA=DDSDA_DA(I)_","
  119: 	Q

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