PRC0B1 ;WISC/PLT-UTILITY ; 06/30/94  12:40 PM
V ;;5.1;IFCAP;;Oct 20, 2000
 ;Per VHA Directive 10-93-142, this routine should not be modified.
 QUIT  ; invalid entry
 ;
 ;prca=~1 file number;file root;file record id;field # of multiple for adding
 ;     ~2 subfile number;subfile root;subfile RI;field # of multiple for adding
 ;     ~3 ...
 ;.x = .01 value or array of dic and X("DR") to input for other fields
 ;.y = value returned; -1 no new entry added, ^1=ri,^2=.01 value,^3=1 for new if added
ADD(X,Y,PRCA,DINUM) ;add new entry
 N DD,DO,DIC,%,D0,DA,DI,DIE,DLAYGO,DQ,DR,A,B,C,I
 S:PRCA'?.E1"~" PRCA=PRCA_"~" S A=$L(PRCA,"~")-1
 I A>1 F B=1:1:A-1 S C=$P(PRCA,"~",B),DA(A-B)=$P(C,";",3) S:$P(C,";",4)]"" DIC("P")=$$DICP^PRC0B1(+C,$P(C,";",4))
 S B=$P(PRCA,"~",A),DIC=$P(B,";",2)  S:DIC=""&(A=1) DIC=+B
 S DLAYGO=PRCA,DIC(0)="FIL"
 S:$D(X(0)) DIC(0)=X(0) S:$D(X("DR")) DIC("DR")=X("DR") K X(0),X("DR")
 D FILE^DICN
 QUIT
 ;
 ;prca = ~1 file number(option);file root;file record id
 ;       ~2 subfile number(option);subfile root;subfile RI
 ;       ~...
 ;.x = value return; 1 if deleted, 0 if not, -2 if lock fail
DELETE(X,PRCA) ;delete entry
 N %,DA,DIC,Y
 N DIK,DIA,PRCLOCK,A,B,C
 S:PRCA'?.E1"~" PRCA=PRCA_"~" S A=$L(PRCA,"~")-1,PRCLOCK=""
 I A>1 F B=1:1:A-1 S C=$P(PRCA,"~",B),DA(A-B)=$P(C,";",3)
 S B=$P(PRCA,"~",A),DIK=$P(B,";",2),DA=$P(B,";",3),PRCLOCK=DIK_DA_","
 S X=3 D ICLOCK^PRC0B(PRCLOCK,.X) I 'X S X=-2 QUIT
 D ^DIK,DCLOCK^PRC0B(PRCLOCK)
 S X=1
 QUIT
 ;
 ;A=global root (including cross reference) ending with ','
 ;B=start value
FIRST(A,B) ;$O-first node after B-value
 N C
 S @("C=$O("_A_"B))")
 QUIT C
 ;
DICP(A,B) ;EF value=2nd piece of 0-node of the multiple field's dd entry
 QUIT $S(A&B:$P($G(^DD(A,B,0)),"^",2),1:"")
 ;
 ;
DICGL(A) ;EF value=global root ending with ',' for file # A.
 QUIT $G(^DIC(A,0,"GL"))
 ;
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPRC0B1   1884     printed  Sep 23, 2025@19:35:17                                                                                                                                                                                                      Page 2
PRC0B1    ;WISC/PLT-UTILITY ; 06/30/94  12:40 PM
V         ;;5.1;IFCAP;;Oct 20, 2000
 +1       ;Per VHA Directive 10-93-142, this routine should not be modified.
 +2       ; invalid entry
           QUIT 
 +3       ;
 +4       ;prca=~1 file number;file root;file record id;field # of multiple for adding
 +5       ;     ~2 subfile number;subfile root;subfile RI;field # of multiple for adding
 +6       ;     ~3 ...
 +7       ;.x = .01 value or array of dic and X("DR") to input for other fields
 +8       ;.y = value returned; -1 no new entry added, ^1=ri,^2=.01 value,^3=1 for new if added
ADD(X,Y,PRCA,DINUM) ;add new entry
 +1        NEW DD,DO,DIC,%,D0,DA,DI,DIE,DLAYGO,DQ,DR,A,B,C,I
 +2        if PRCA'?.E1"~"
               SET PRCA=PRCA_"~"
           SET A=$LENGTH(PRCA,"~")-1
 +3        IF A>1
               FOR B=1:1:A-1
                   SET C=$PIECE(PRCA,"~",B)
                   SET DA(A-B)=$PIECE(C,";",3)
                   if $PIECE(C,";",4)]""
                       SET DIC("P")=$$DICP^PRC0B1(+C,$PIECE(C,";",4))
 +4        SET B=$PIECE(PRCA,"~",A)
           SET DIC=$PIECE(B,";",2)
           if DIC=""&(A=1)
               SET DIC=+B
 +5        SET DLAYGO=PRCA
           SET DIC(0)="FIL"
 +6        if $DATA(X(0))
               SET DIC(0)=X(0)
           if $DATA(X("DR"))
               SET DIC("DR")=X("DR")
           KILL X(0),X("DR")
 +7        DO FILE^DICN
 +8        QUIT 
 +9       ;
 +10      ;prca = ~1 file number(option);file root;file record id
 +11      ;       ~2 subfile number(option);subfile root;subfile RI
 +12      ;       ~...
 +13      ;.x = value return; 1 if deleted, 0 if not, -2 if lock fail
DELETE(X,PRCA) ;delete entry
 +1        NEW %,DA,DIC,Y
 +2        NEW DIK,DIA,PRCLOCK,A,B,C
 +3        if PRCA'?.E1"~"
               SET PRCA=PRCA_"~"
           SET A=$LENGTH(PRCA,"~")-1
           SET PRCLOCK=""
 +4        IF A>1
               FOR B=1:1:A-1
                   SET C=$PIECE(PRCA,"~",B)
                   SET DA(A-B)=$PIECE(C,";",3)
 +5        SET B=$PIECE(PRCA,"~",A)
           SET DIK=$PIECE(B,";",2)
           SET DA=$PIECE(B,";",3)
           SET PRCLOCK=DIK_DA_","
 +6        SET X=3
           DO ICLOCK^PRC0B(PRCLOCK,.X)
           IF 'X
               SET X=-2
               QUIT 
 +7        DO ^DIK
           DO DCLOCK^PRC0B(PRCLOCK)
 +8        SET X=1
 +9        QUIT 
 +10      ;
 +11      ;A=global root (including cross reference) ending with ','
 +12      ;B=start value
FIRST(A,B) ;$O-first node after B-value
 +1        NEW C
 +2        SET @("C=$O("_A_"B))")
 +3        QUIT C
 +4       ;
DICP(A,B) ;EF value=2nd piece of 0-node of the multiple field's dd entry
 +1        QUIT $SELECT(A&B:$PIECE($GET(^DD(A,B,0)),"^",2),1:"")
 +2       ;
 +3       ;
DICGL(A)  ;EF value=global root ending with ',' for file # A.
 +1        QUIT $GET(^DIC(A,0,"GL"))
 +2       ;