- DIFGGSB1 ;SFISC/XAK,EDE(OHPRD)-FILEGRAM SPECIAL BLOCK PART 2 ;8/12/98 13:16
- ;;22.0;VA FileMan;;Mar 30, 1999
- ;Per VHA Directive 10-93-142, this routine should not be modified.
- BODY S DIFGSB(DILL,"SPSPEC")=0
- I $D(DIFG(DILL,"FUNC")),"AL"[DIFG(DILL,"FUNC") I 1
- E I $D(DIFG(DILL,"NOKEY"))
- E D SPSPEC^DIFGGSB2
- Q:DIFGSB(DILL,"SPSPEC")
- D P01
- D SPEC
- D IDENT
- Q
- ;
- P01 ; .01 FIELD WHEN IT IS A POINTER
- Q:$P(^DD(DIFG(DILL,"FILE"),.01,0),U,2)'["P"
- S DIFGSB(DILL,"FLD")=.01
- D SETXY
- Q:Y=""
- D PTRCHK^DIFGGSB2
- Q
- ;
- SPEC ; SPECIFIERS
- S DIFGSB(DILL,"SBT")="SPECIFIER:",%=""
- F DIFGSB(DILL,"FLD")=0:0 D SPEC2 Q:DIFGSB(DILL,"FLD")'=+DIFGSB(DILL,"FLD") S %=%_$S(%="":DIFGSB(DILL,"FLD"),1:";"_DIFGSB(DILL,"FLD"))
- I '$D(DIFG(DILL,"MUL")) S DR=% D:%'="" FIELDS I 1
- E S DR(DIFG(DILL,"FILE"))=% D:%'="" FIELDS
- K ^UTILITY("DIQ1",$J,DIFG(DILL,"FILE"))
- I '$D(DIFG(DILL,"MUL")) K DA,DIC,DR
- K % Q
- ;
- SPEC2 S DIFGSB(DILL,"FLD")=$O(^DD(DIFG(DILL,"FILE"),0,"SP",DIFGSB(DILL,"FLD")))
- Q
- ;
- IDENT ; IDENTIFIERS
- S DIFGSB(DILL,"SBT")="IDENTIFIER:",%=""
- N DIXIEN,DIKEY S DIXIEN=0,DIKEY=";"
- I $G(DIAR)=4 S DIXIEN=$O(^DD("KEY","AP",DIFG(DILL,"FILE"),"P",0))
- F DIFGSB(DILL,"FLD")=0:0 D IDENT2 Q:DIFGSB(DILL,"FLD")'=+DIFGSB(DILL,"FLD") D:'$D(^DD(DIFG(DILL,"FILE"),0,"SP",DIFGSB(DILL,"FLD"))) IDENT3
- I '$D(DIFG(DILL,"MUL")) S DR=% D:%'="" FIELDS I 1
- E S DR(DIFG(DILL,"FILE"))=% D:%'="" FIELDS
- K ^UTILITY("DIQ1",$J,DIFG(DILL,"FILE"))
- I '$D(DIFG(DILL,"MUL")) K DA,DIC,DR
- K %
- Q
- ;
- IDENT2 N DIOUT S DIOUT=0
- I DIXIEN F D Q:DIOUT!('DIFGSB(DILL,"FLD"))
- . S DIFGSB(DILL,"FLD")=$O(^DD("KEY",DIXIEN,2,"BB",DIFGSB(DILL,"FLD")))
- . Q:'DIFGSB(DILL,"FLD")!(DIFGSB(DILL,"FLD")=.01)
- . Q:$O(^DD("KEY",DIXIEN,2,"BB",DIFGSB(DILL,"FLD"),0))'=DIFG(DILL,"FILE")
- . Q:'$D(^DD(DIFG(DILL,"FILE"),DIFGSB(DILL,"FLD"),0))
- . S DIOUT=1,DIKEY=DIKEY_DIFGSB(DILL,"FLD")_";" Q
- Q:DIOUT S DIXIEN=0
- F S DIFGSB(DILL,"FLD")=$O(^DD(DIFG(DILL,"FILE"),0,"ID",DIFGSB(DILL,"FLD"))) Q:'DIFGSB(DILL,"FLD") Q:DIKEY'[(";"_DIFGSB(DILL,"FLD"))
- Q
- ;
- IDENT3 S %=%_$S(%="":DIFGSB(DILL,"FLD"),1:";"_DIFGSB(DILL,"FLD"))
- Q
- ;
- FIELDS I $D(DIFGGU(DIFG(DILL,"FILE"),DIFG(DILL,"FE"))) D DRFIX
- I '$D(DIFG(DILL,"MUL")) Q:DR=""
- E Q:DR(DIFG(DILL,"FILE"))=""
- K ^UTILITY("DIQ1",$J,DIFG(DILL,"FILE"))
- S:'$D(DIFG(DILL,"MUL")) DIC=DIFG(DILL,"FILE"),DA=DIFG(DILL,"FE")
- S DIQ(0)="N" D EN^DIQ1 K DIQ
- F DIFGSB(DILL,"FLD")=0:0 D FIELDS2 Q:DIFGSB(DILL,"FLD")'=+DIFGSB(DILL,"FLD") S X=^(DIFGSB(DILL,"FLD")) D FIELDS3
- Q
- ;
- DRFIX ; ADJUST DR FOR MODIFIED/DELETED VALUES
- NEW T
- I '$D(DIFG(DILL,"MUL")) S T=DR
- E S T=DR(DIFG(DILL,"FILE"))
- F %=1:1 S X=$P(T,";",%) Q:X="" S %(X)="" I $D(DIFGGU(DIFG(DILL,"FILE"),DIFG(DILL,"FE"),X)) K %(X) S DIFGSB(DILL,"FLD")=X,X=DIFGGU(DIFG(DILL,"FILE"),DIFG(DILL,"FE"),X) D DRFIX2
- S (T,X)=""
- F %=0:0 S X=$O(%(X)) Q:X="" S T=T_$S(T="":"",1:";")_X
- I '$D(DIFG(DILL,"MUL")) S DR=T
- E S DR(DIFG(DILL,"FILE"))=T
- Q
- ;
- DRFIX2 NEW %,DR,T
- D FIELDS3
- Q
- ;
- FIELDS2 S DIFGSB(DILL,"FLD")=$O(^UTILITY("DIQ1",$J,DIFG(DILL,"FILE"),DIFG(DILL,"FE"),DIFGSB(DILL,"FLD")))
- Q
- ;
- FIELDS3 Q:X=""
- D SETXY
- K F,N,P,W
- S V=DIFGSB(DILL,"SBT")_$P(^DD(DIFG(DILL,"FILE"),DIFGSB(DILL,"FLD"),0),U,1)_U_$S(DIFG("PARM")["N":DIFGSB(DILL,"FLD"),1:"")
- S:DIFGSB(DILL,"SBT")["KEY" V=V_U_$P(DIFGSB(DILL,"SPSPEC"),U,2)
- S V=V_"="_X
- D INCSET^DIFGGU
- D:Y'="" PTRCHK^DIFGGSB2
- K X,Y
- Q
- SETXY ; If previously looked up pointer set @LINK
- S Y=""
- Q:$P(^DD(DIFG(DILL,"FILE"),DIFGSB(DILL,"FLD"),0),U,2)'["P"
- S F=+$P($P(^DD(DIFG(DILL,"FILE"),DIFGSB(DILL,"FLD"),0),U,2),"P",2),W=$P(^(0),U,4),N=$P(W,";",1),P=$P(W,";",2)
- I $D(DIFGGU(DIFG(DILL,"FILE"),DIFG(DILL,"FE"),DIFGSB(DILL,"FLD"),"P")) S Y=DIFGGU(DIFG(DILL,"FILE"),DIFG(DILL,"FE"),DIFGSB(DILL,"FLD"),"P") I 1
- E S Y=$P(@(DIFG(DILL,"FGBL")_DIFG(DILL,"FE")_",N)"),U,P)
- I $D(^UTILITY("DIFGLINK",$J,F,Y)) S X="@"_^UTILITY("DIFGLINK",$J,F,Y),Y="" Q
- S ^UTILITY("DIFGLINK",$J)=$S($D(^UTILITY("DIFGLINK",$J))#2:^UTILITY("DIFGLINK",$J)+1,1:1)
- S ^UTILITY("DIFGLINK",$J,F,Y)=^UTILITY("DIFGLINK",$J)
- S Y="@"_^UTILITY("DIFGLINK",$J)
- Q
- DIFGGSB1 ;SFISC/XAK,EDE(OHPRD)-FILEGRAM SPECIAL BLOCK PART 2 ;8/12/98 13:16
- +1 ;;22.0;VA FileMan;;Mar 30, 1999
- +2 ;Per VHA Directive 10-93-142, this routine should not be modified.
- BODY SET DIFGSB(DILL,"SPSPEC")=0
- +1 IF $DATA(DIFG(DILL,"FUNC"))
- IF "AL"[DIFG(DILL,"FUNC")
- IF 1
- +2 IF '$TEST
- IF $DATA(DIFG(DILL,"NOKEY"))
- +3 IF '$TEST
- DO SPSPEC^DIFGGSB2
- +4 IF DIFGSB(DILL,"SPSPEC")
- QUIT
- +5 DO P01
- +6 DO SPEC
- +7 DO IDENT
- +8 QUIT
- +9 ;
- P01 ; .01 FIELD WHEN IT IS A POINTER
- +1 IF $PIECE(^DD(DIFG(DILL,"FILE"),.01,0),U,2)'["P"
- QUIT
- +2 SET DIFGSB(DILL,"FLD")=.01
- +3 DO SETXY
- +4 IF Y=""
- QUIT
- +5 DO PTRCHK^DIFGGSB2
- +6 QUIT
- +7 ;
- SPEC ; SPECIFIERS
- +1 SET DIFGSB(DILL,"SBT")="SPECIFIER:"
- SET %=""
- +2 FOR DIFGSB(DILL,"FLD")=0:0
- DO SPEC2
- IF DIFGSB(DILL,"FLD")'=+DIFGSB(DILL,"FLD")
- QUIT
- SET %=%_$SELECT(%="":DIFGSB(DILL,"FLD"),1:";"_DIFGSB(DILL,"FLD"))
- +3 IF '$DATA(DIFG(DILL,"MUL"))
- SET DR=%
- IF %'=""
- DO FIELDS
- IF 1
- +4 IF '$TEST
- SET DR(DIFG(DILL,"FILE"))=%
- IF %'=""
- DO FIELDS
- +5 KILL ^UTILITY("DIQ1",$JOB,DIFG(DILL,"FILE"))
- +6 IF '$DATA(DIFG(DILL,"MUL"))
- KILL DA,DIC,DR
- +7 KILL %
- QUIT
- +8 ;
- SPEC2 SET DIFGSB(DILL,"FLD")=$ORDER(^DD(DIFG(DILL,"FILE"),0,"SP",DIFGSB(DILL,"FLD")))
- +1 QUIT
- +2 ;
- IDENT ; IDENTIFIERS
- +1 SET DIFGSB(DILL,"SBT")="IDENTIFIER:"
- SET %=""
- +2 NEW DIXIEN,DIKEY
- SET DIXIEN=0
- SET DIKEY=";"
- +3 IF $GET(DIAR)=4
- SET DIXIEN=$ORDER(^DD("KEY","AP",DIFG(DILL,"FILE"),"P",0))
- +4 FOR DIFGSB(DILL,"FLD")=0:0
- DO IDENT2
- IF DIFGSB(DILL,"FLD")'=+DIFGSB(DILL,"FLD")
- QUIT
- IF '$DATA(^DD(DIFG(DILL,"FILE"),0,"SP",DIFGSB(DILL,"FLD")))
- DO IDENT3
- +5 IF '$DATA(DIFG(DILL,"MUL"))
- SET DR=%
- IF %'=""
- DO FIELDS
- IF 1
- +6 IF '$TEST
- SET DR(DIFG(DILL,"FILE"))=%
- IF %'=""
- DO FIELDS
- +7 KILL ^UTILITY("DIQ1",$JOB,DIFG(DILL,"FILE"))
- +8 IF '$DATA(DIFG(DILL,"MUL"))
- KILL DA,DIC,DR
- +9 KILL %
- +10 QUIT
- +11 ;
- IDENT2 NEW DIOUT
- SET DIOUT=0
- +1 IF DIXIEN
- FOR
- Begin DoDot:1
- +2 SET DIFGSB(DILL,"FLD")=$ORDER(^DD("KEY",DIXIEN,2,"BB",DIFGSB(DILL,"FLD")))
- +3 IF 'DIFGSB(DILL,"FLD")!(DIFGSB(DILL,"FLD")=.01)
- QUIT
- +4 IF $ORDER(^DD("KEY",DIXIEN,2,"BB",DIFGSB(DILL,"FLD"),0))'=DIFG(DILL,"FILE")
- QUIT
- +5 IF '$DATA(^DD(DIFG(DILL,"FILE"),DIFGSB(DILL,"FLD"),0))
- QUIT
- +6 SET DIOUT=1
- SET DIKEY=DIKEY_DIFGSB(DILL,"FLD")_";"
- QUIT
- End DoDot:1
- IF DIOUT!('DIFGSB(DILL,"FLD"))
- QUIT
- +7 IF DIOUT
- QUIT
- SET DIXIEN=0
- +8 FOR
- SET DIFGSB(DILL,"FLD")=$ORDER(^DD(DIFG(DILL,"FILE"),0,"ID",DIFGSB(DILL,"FLD")))
- IF 'DIFGSB(DILL,"FLD")
- QUIT
- IF DIKEY'[(";"_DIFGSB(DILL,"FLD"))
- QUIT
- +9 QUIT
- +10 ;
- IDENT3 SET %=%_$SELECT(%="":DIFGSB(DILL,"FLD"),1:";"_DIFGSB(DILL,"FLD"))
- +1 QUIT
- +2 ;
- FIELDS IF $DATA(DIFGGU(DIFG(DILL,"FILE"),DIFG(DILL,"FE")))
- DO DRFIX
- +1 IF '$DATA(DIFG(DILL,"MUL"))
- IF DR=""
- QUIT
- +2 IF '$TEST
- IF DR(DIFG(DILL,"FILE"))=""
- QUIT
- +3 KILL ^UTILITY("DIQ1",$JOB,DIFG(DILL,"FILE"))
- +4 IF '$DATA(DIFG(DILL,"MUL"))
- SET DIC=DIFG(DILL,"FILE")
- SET DA=DIFG(DILL,"FE")
- +5 SET DIQ(0)="N"
- DO EN^DIQ1
- KILL DIQ
- +6 FOR DIFGSB(DILL,"FLD")=0:0
- DO FIELDS2
- IF DIFGSB(DILL,"FLD")'=+DIFGSB(DILL,"FLD")
- QUIT
- SET X=^(DIFGSB(DILL,"FLD"))
- DO FIELDS3
- +7 QUIT
- +8 ;
- DRFIX ; ADJUST DR FOR MODIFIED/DELETED VALUES
- +1 NEW T
- +2 IF '$DATA(DIFG(DILL,"MUL"))
- SET T=DR
- +3 IF '$TEST
- SET T=DR(DIFG(DILL,"FILE"))
- +4 FOR %=1:1
- SET X=$PIECE(T,";",%)
- IF X=""
- QUIT
- SET %(X)=""
- IF $DATA(DIFGGU(DIFG(DILL,"FILE"),DIFG(DILL,"FE"),X))
- KILL %(X)
- SET DIFGSB(DILL,"FLD")=X
- SET X=DIFGGU(DIFG(DILL,"FILE"),DIFG(DILL,"FE"),X)
- DO DRFIX2
- +5 SET (T,X)=""
- +6 FOR %=0:0
- SET X=$ORDER(%(X))
- IF X=""
- QUIT
- SET T=T_$SELECT(T="":"",1:";")_X
- +7 IF '$DATA(DIFG(DILL,"MUL"))
- SET DR=T
- +8 IF '$TEST
- SET DR(DIFG(DILL,"FILE"))=T
- +9 QUIT
- +10 ;
- DRFIX2 NEW %,DR,T
- +1 DO FIELDS3
- +2 QUIT
- +3 ;
- FIELDS2 SET DIFGSB(DILL,"FLD")=$ORDER(^UTILITY("DIQ1",$JOB,DIFG(DILL,"FILE"),DIFG(DILL,"FE"),DIFGSB(DILL,"FLD")))
- +1 QUIT
- +2 ;
- FIELDS3 IF X=""
- QUIT
- +1 DO SETXY
- +2 KILL F,N,P,W
- +3 SET V=DIFGSB(DILL,"SBT")_$PIECE(^DD(DIFG(DILL,"FILE"),DIFGSB(DILL,"FLD"),0),U,1)_U_$SELECT(DIFG("PARM")["N":DIFGSB(DILL,"FLD"),1:"")
- +4 IF DIFGSB(DILL,"SBT")["KEY"
- SET V=V_U_$PIECE(DIFGSB(DILL,"SPSPEC"),U,2)
- +5 SET V=V_"="_X
- +6 DO INCSET^DIFGGU
- +7 IF Y'=""
- DO PTRCHK^DIFGGSB2
- +8 KILL X,Y
- +9 QUIT
- SETXY ; If previously looked up pointer set @LINK
- +1 SET Y=""
- +2 IF $PIECE(^DD(DIFG(DILL,"FILE"),DIFGSB(DILL,"FLD"),0),U,2)'["P"
- QUIT
- +3 SET F=+$PIECE($PIECE(^DD(DIFG(DILL,"FILE"),DIFGSB(DILL,"FLD"),0),U,2),"P",2)
- SET W=$PIECE(^(0),U,4)
- SET N=$PIECE(W,";",1)
- SET P=$PIECE(W,";",2)
- +4 IF $DATA(DIFGGU(DIFG(DILL,"FILE"),DIFG(DILL,"FE"),DIFGSB(DILL,"FLD"),"P"))
- SET Y=DIFGGU(DIFG(DILL,"FILE"),DIFG(DILL,"FE"),DIFGSB(DILL,"FLD"),"P")
- IF 1
- +5 IF '$TEST
- SET Y=$PIECE(@(DIFG(DILL,"FGBL")_DIFG(DILL,"FE")_",N)"),U,P)
- +6 IF $DATA(^UTILITY("DIFGLINK",$JOB,F,Y))
- SET X="@"_^UTILITY("DIFGLINK",$JOB,F,Y)
- SET Y=""
- QUIT
- +7 SET ^UTILITY("DIFGLINK",$JOB)=$SELECT($DATA(^UTILITY("DIFGLINK",$JOB))#2:^UTILITY("DIFGLINK",$JOB)+1,1:1)
- +8 SET ^UTILITY("DIFGLINK",$JOB,F,Y)=^UTILITY("DIFGLINK",$JOB)
- +9 SET Y="@"_^UTILITY("DIFGLINK",$JOB)
- +10 QUIT