DIO0 ;SFISC/GFT,TKW-BUILD SORT AND SUB-HDR ;28SEP2004
;;22.0;VA FileMan;**2,23,138,144**;Mar 30, 1999;Build 5
;Per VHA Directive 2004-038, this routine should not be modified.
;
S C=",",Z=Z+1,DE=$P(DN,C,Z)_"=$O("_DI_$P(DN,C,1,Z)_")),DN="_(Z+1) ;22*138
I Z=1,$G(DPP(DJK,"PTRIX"))]"" D
DIOO1 . S DE="DIOO1=$O("_DPP(DJK,"PTRIX")_"DIOO1)),DN=1.5,DD00=0"
. S DY(1.5)="S DD00=$O("_DPP(DJK,"PTRIX")_"DIOO1,DD00)),DN=2 S:'DD00 DN=1"
. I DPP(DJK,"PTRIX")?.E1"""B""," S DY(1.5)=DY(1.5)_" S:DD00&($G(^(+DD00))!('($D(^(+DD00))=1))) DN=1"
. Q
I DPQ,Z=1,$D(DPP(DJK,"IX")),$O(DPP(DJK,0)) D
.S DXIX=$P(DPP(DJK),U) Q:'DXIX S DXIX(DXIX)=U_$P(DPP(DJK,"IX"),U,2)_$S($D(DPP(DJK,"PTRIX")):"DD00,D0",1:DN)
.S W=0,%(1)="" F %=0:0 S W=$O(DPP(DJK,W)) Q:'W S %=%+1,%(1)=%(1)_C_"D"_%
.S DXIX(DXIX)=DXIX(DXIX)_%(1)
.K %,W Q
I Z<$G(DPP(0)) S Y=$P($G(DPP(Z+1,"F")),U) I Y]""!($G(DPP(Z+1,"T"))]"") S:+$P(Y,"E")'=Y Y=""""_Y_"""" S DE=DE_","_$P(DN,C,Z+1)_"="_Y
I 'DPQ,$D(DPP(Z)) D H
I DPQ,Z=DD S DE=DE_" S:D0 DISTP=DISTP+1 D:'(DISTP#100) CSTP"_$P("^DIO2",1,$D(DIBTPGM))_" Q:'DN "
S X=DE_" I "_$P(DN,C,Z)_$S(DD=Z:"'>0",1:"=""""")
S Y="" D
.I Z=1,$D(DPP(DJK,"T")),$D(DPP(DJK,"IX")) S Y=$P(DPP(DJK,"T"),U)
.I $G(DPP(0)),Z<(DPP(0)+1) S Y=$P($G(DPP(Z,"T")),U)
.I Y]"",Y'="@",Y'="z" S X=X_"!("_$$AFT^DIOC($P(DN,C,Z),Y)_")"
.Q
D0 S X=X_" S DN="_$S(Z=DD&($D(DPP(DJK,"PTRIX"))):1.5,1:(Z-1)),Y=Z-1 I Z=1 S X=X_",D0=-1" I $D(DPP(DJK,"PTRIX")) S X=X_" K DD00",$P(DN,C,1)="DD00"
I 'DPQ,$D(DPP(Y)) S:$P(DPP(Y),U,4)["!" X="DRK=DRK+1,"_X_",DRK=0",DRK=0 D SUB
S DY(Z)="S "_X
I $D(DIBTPGM) D
. S DY(Z)=$S(Z'=1:"DY"_Z,1:"EN")_" Q:'DN "_DY(Z)_$S(Z=1:" Q",Z=2&($D(DPP(DJK,"PTRIX"))):" G DYP",Z=2:" G EN",1:" G DY"_(Z-1))
. I $D(DPP(DJK,"PTRIX")),Z=1 S DY(1.5)="DYP Q:'DN "_DY(1.5)_" G:DN=1 EN"
. Q
G DIO0:Z<DD
F %=1:1 Q:'$D(DPP(%)) K DPP(%,"PTRIX")
S %=$S($G(DIO("SCR"))=1:"O",$D(DIS)<9:"O",$D(DIS)=11:"SCR",1:"SEARCH")
S DY(Z+1)="S DN="_Z_" " I DJ["""B"",^" S DY(Z+1)=DY(Z+1)_"I $D("_DI_$P(DN,C,1,Z)_"))'[0,'^(D0) "
S DY(Z+1)=DY(Z+1)_"D "_%,Y=Z,X=""
I 'DPQ,$D(DPP(Y)),$P(DPP(Y),U,2)=0 D SUB I S DY(Z+1)=DY(Z+1)_" S "_$E(X,2,99)
I A=1 D:$D(DIBTPGM) SETU Q
S X=C F W=1:1:A-1 S ^DOSV(0,IO(0),"BY",W)=DPP(A(W)),X=X_$P(DN,C,A(W))_C,A(W)="Q"
S A(W)="S ^DOSV(0,IO(0)"_C_W_X_"V,DE)=Y"
D:$D(DIBTPGM) SETU Q
;
SUB I $P($G(DPP(Y)),U,4)["+" S A(A)=Y,X=X_",A="_A_" D"_$S($D(DIS)<9:"",1:":$D(DIPASS)")_" ^DIO3"_$S($D(DIS)<9:"",1:" K DIPASS"),A=A+1
Q
;
H S DOP=0 I $D(DNP) F W=1:1 G Q:'$D(DPP(W)) I DPP(W)["+" K DNP S DOP=1 Q
S Y=$P(DN,",",Z),F=$P(DPP(Z),U,5),W=$P(DPP(Z),U,4),X=$P(W,"""",2),V=+$P(DPP(Z),U,2) S:W["-" Y="(-"_Y_")" I F'[""""&'$D(DPQ(+DPP(Z),V+X))&'DOP!(W["@")!(W["'")!$D(DISH) S (Y,V)="" G F:F]"",U
I F[";TXT" S Y="$E("_Y_",2,$L("_Y_"))"
S X=$S($D(^DD(+DPP(Z),V,0)):^(0),1:$P(DPP(Z),U,6,9)) I $P(X,U,2)["D" S Y=" S Y="_Y_" D DT"
E I $G(DPP(Z,"OUT"))]"" S DPP(Z,"OUT")=" S Y="_Y_" "_DPP(Z,"OUT"),Y=",Y"
E I $P(X,U,2)["O"!($P(X,U,4)?.P) S Y=C_Y
E D ^DILL
S V=$P(F,";C",2),V="?"_$S(V:V-1,1:Z*3+5)
F I F[";S" S %=$P(F,";S",2) S:'% %=1 S V=$E("!!!!!!!!!!!!!!!!!!!!!!!!!!!!",1,%)_V,M=M+%
S F=$P(F,";""",2),%=$S(W["@":"",W["'":"",F]"":$P(F,"""",1,$L(F,"""")-1),Y]"":$P($P(DPP(Z),U,3),"""",1)_": ",1:""),Y=V_$S(%_Y]"":$E(",",V]"")_""""_%_"""",1:"")_Y I Y]"" S Y=" D T"_$G(DPP(Z,"OUT"))_" W "_Y
U S W=W'["#" I W,Y="",$D(DPP(Z+1)) G E
S ^UTILITY($J,"H",Z)="X ^UTILITY($J,1)"_$P(":$Y>"_(DIOSL-M-2-DD+Z)_"!(DC["","")",U,W)_Y,Y="D H:DI<DN ",DE=DE_$S(Z=1:",DI=0",1:" S:DI>"_Z_" DI="_Z)
S:^UTILITY($J,99,0)'[Y ^(0)=Y_^(0)
E I DOP S DNP=""
Q K DOP Q
;
SETU ;PUT DY ARRAY INTO ^UTILITY FOR LATER COMPILATION
N DN
F DN=0:0 S DN=$O(DY(DN)) Q:'DN D
.S ^TMP("DIBTC",$J,0,DICNT)=$E(" ",'$O(DY(DN)))_DY(DN),DICNT=DICNT+1
.I '$O(DY(DN)) S ^TMP("DIBTC",$J,0,DICNT)=$S(DN>2:" G DY"_(DN-1),1:" G EN"),DICNT=DICNT+1
.Q
Q
DIO0 ;SFISC/GFT,TKW-BUILD SORT AND SUB-HDR ;28SEP2004
+1 ;;22.0;VA FileMan;**2,23,138,144**;Mar 30, 1999;Build 5
+2 ;Per VHA Directive 2004-038, this routine should not be modified.
+3 ;
+4 ;22*138
SET C=","
SET Z=Z+1
SET DE=$PIECE(DN,C,Z)_"=$O("_DI_$PIECE(DN,C,1,Z)_")),DN="_(Z+1)
+5 IF Z=1
IF $GET(DPP(DJK,"PTRIX"))]""
Begin DoDot:1
DIOO1 SET DE="DIOO1=$O("_DPP(DJK,"PTRIX")_"DIOO1)),DN=1.5,DD00=0"
+1 SET DY(1.5)="S DD00=$O("_DPP(DJK,"PTRIX")_"DIOO1,DD00)),DN=2 S:'DD00 DN=1"
+2 IF DPP(DJK,"PTRIX")?.E1"""B"","
SET DY(1.5)=DY(1.5)_" S:DD00&($G(^(+DD00))!('($D(^(+DD00))=1))) DN=1"
+3 QUIT
End DoDot:1
+4 IF DPQ
IF Z=1
IF $DATA(DPP(DJK,"IX"))
IF $ORDER(DPP(DJK,0))
Begin DoDot:1
+5 SET DXIX=$PIECE(DPP(DJK),U)
IF 'DXIX
QUIT
SET DXIX(DXIX)=U_$PIECE(DPP(DJK,"IX"),U,2)_$SELECT($DATA(DPP(DJK,"PTRIX")):"DD00,D0",1:DN)
+6 SET W=0
SET %(1)=""
FOR %=0:0
SET W=$ORDER(DPP(DJK,W))
IF 'W
QUIT
SET %=%+1
SET %(1)=%(1)_C_"D"_%
+7 SET DXIX(DXIX)=DXIX(DXIX)_%(1)
+8 KILL %,W
QUIT
End DoDot:1
+9 IF Z<$GET(DPP(0))
SET Y=$PIECE($GET(DPP(Z+1,"F")),U)
IF Y]""!($GET(DPP(Z+1,"T"))]"")
IF +$PIECE(Y,"E")'=Y
SET Y=""""_Y_""""
SET DE=DE_","_$PIECE(DN,C,Z+1)_"="_Y
+10 IF 'DPQ
IF $DATA(DPP(Z))
DO H
+11 IF DPQ
IF Z=DD
SET DE=DE_" S:D0 DISTP=DISTP+1 D:'(DISTP#100) CSTP"_$PIECE("^DIO2",1,$DATA(DIBTPGM))_" Q:'DN "
+12 SET X=DE_" I "_$PIECE(DN,C,Z)_$SELECT(DD=Z:"'>0",1:"=""""")
+13 SET Y=""
Begin DoDot:1
+14 IF Z=1
IF $DATA(DPP(DJK,"T"))
IF $DATA(DPP(DJK,"IX"))
SET Y=$PIECE(DPP(DJK,"T"),U)
+15 IF $GET(DPP(0))
IF Z<(DPP(0)+1)
SET Y=$PIECE($GET(DPP(Z,"T")),U)
+16 IF Y]""
IF Y'="@"
IF Y'="z"
SET X=X_"!("_$$AFT^DIOC($PIECE(DN,C,Z),Y)_")"
+17 QUIT
End DoDot:1
D0 SET X=X_" S DN="_$SELECT(Z=DD&($DATA(DPP(DJK,"PTRIX"))):1.5,1:(Z-1))
SET Y=Z-1
IF Z=1
SET X=X_",D0=-1"
IF $DATA(DPP(DJK,"PTRIX"))
SET X=X_" K DD00"
SET $PIECE(DN,C,1)="DD00"
+1 IF 'DPQ
IF $DATA(DPP(Y))
IF $PIECE(DPP(Y),U,4)["!"
SET X="DRK=DRK+1,"_X_",DRK=0"
SET DRK=0
DO SUB
+2 SET DY(Z)="S "_X
+3 IF $DATA(DIBTPGM)
Begin DoDot:1
+4 SET DY(Z)=$SELECT(Z'=1:"DY"_Z,1:"EN")_" Q:'DN "_DY(Z)_$SELECT(Z=1:" Q",Z=2&($DATA(DPP(DJK,"PTRIX"))):" G DYP",Z=2:" G EN",1:" G DY"_(Z-1))
+5 IF $DATA(DPP(DJK,"PTRIX"))
IF Z=1
SET DY(1.5)="DYP Q:'DN "_DY(1.5)_" G:DN=1 EN"
+6 QUIT
End DoDot:1
+7 IF Z<DD
GOTO DIO0
+8 FOR %=1:1
IF '$DATA(DPP(%))
QUIT
KILL DPP(%,"PTRIX")
+9 SET %=$SELECT($GET(DIO("SCR"))=1:"O",$DATA(DIS)<9:"O",$DATA(DIS)=11:"SCR",1:"SEARCH")
+10 SET DY(Z+1)="S DN="_Z_" "
IF DJ["""B"",^"
SET DY(Z+1)=DY(Z+1)_"I $D("_DI_$PIECE(DN,C,1,Z)_"))'[0,'^(D0) "
+11 SET DY(Z+1)=DY(Z+1)_"D "_%
SET Y=Z
SET X=""
+12 IF 'DPQ
IF $DATA(DPP(Y))
IF $PIECE(DPP(Y),U,2)=0
DO SUB
IF $TEST
SET DY(Z+1)=DY(Z+1)_" S "_$EXTRACT(X,2,99)
+13 IF A=1
IF $DATA(DIBTPGM)
DO SETU
QUIT
+14 SET X=C
FOR W=1:1:A-1
SET ^DOSV(0,IO(0),"BY",W)=DPP(A(W))
SET X=X_$PIECE(DN,C,A(W))_C
SET A(W)="Q"
+15 SET A(W)="S ^DOSV(0,IO(0)"_C_W_X_"V,DE)=Y"
+16 IF $DATA(DIBTPGM)
DO SETU
QUIT
+17 ;
SUB IF $PIECE($GET(DPP(Y)),U,4)["+"
SET A(A)=Y
SET X=X_",A="_A_" D"_$SELECT($DATA(DIS)<9:"",1:":$D(DIPASS)")_" ^DIO3"_$SELECT($DATA(DIS)<9:"",1:" K DIPASS")
SET A=A+1
+1 QUIT
+2 ;
H SET DOP=0
IF $DATA(DNP)
FOR W=1:1
IF '$DATA(DPP(W))
GOTO Q
IF DPP(W)["+"
KILL DNP
SET DOP=1
QUIT
+1 SET Y=$PIECE(DN,",",Z)
SET F=$PIECE(DPP(Z),U,5)
SET W=$PIECE(DPP(Z),U,4)
SET X=$PIECE(W,"""",2)
SET V=+$PIECE(DPP(Z),U,2)
IF W["-"
SET Y="(-"_Y_")"
IF F'[""""&'$DATA(DPQ(+DPP(Z),V+X))&'DOP!(W["@")!(W["'")!$DATA(DISH)
SET (Y,V)=""
IF F]""
GOTO F
GOTO U
+2 IF F[";TXT"
SET Y="$E("_Y_",2,$L("_Y_"))"
+3 SET X=$SELECT($DATA(^DD(+DPP(Z),V,0)):^(0),1:$PIECE(DPP(Z),U,6,9))
IF $PIECE(X,U,2)["D"
SET Y=" S Y="_Y_" D DT"
+4 IF '$TEST
IF $GET(DPP(Z,"OUT"))]""
SET DPP(Z,"OUT")=" S Y="_Y_" "_DPP(Z,"OUT")
SET Y=",Y"
+5 IF '$TEST
IF $PIECE(X,U,2)["O"!($PIECE(X,U,4)?.P)
SET Y=C_Y
+6 IF '$TEST
DO ^DILL
+7 SET V=$PIECE(F,";C",2)
SET V="?"_$SELECT(V:V-1,1:Z*3+5)
F IF F[";S"
SET %=$PIECE(F,";S",2)
IF '%
SET %=1
SET V=$EXTRACT("!!!!!!!!!!!!!!!!!!!!!!!!!!!!",1,%)_V
SET M=M+%
+1 SET F=$PIECE(F,";""",2)
SET %=$SELECT(W["@":"",W["'":"",F]"":$PIECE(F,"""",1,$LENGTH(F,"""")-1),Y]"":$PIECE($PIECE(DPP(Z),U,3),"""",1)_": ",1:"")
SET Y=V_$SELECT(%_Y]"":$EXTRACT(",",V]"")_""""_%_"""",1:"")_Y
IF Y]""
SET Y=" D T"_$GET(DPP(Z,"OUT"))_" W "_Y
U SET W=W'["#"
IF W
IF Y=""
IF $DATA(DPP(Z+1))
GOTO E
+1 SET ^UTILITY($JOB,"H",Z)="X ^UTILITY($J,1)"_$PIECE(":$Y>"_(DIOSL-M-2-DD+Z)_"!(DC["","")",U,W)_Y
SET Y="D H:DI<DN "
SET DE=DE_$SELECT(Z=1:",DI=0",1:" S:DI>"_Z_" DI="_Z)
+2 IF ^UTILITY($JOB,99,0)'[Y
SET ^(0)=Y_^(0)
E IF DOP
SET DNP=""
Q KILL DOP
QUIT
+1 ;
SETU ;PUT DY ARRAY INTO ^UTILITY FOR LATER COMPILATION
+1 NEW DN
+2 FOR DN=0:0
SET DN=$ORDER(DY(DN))
IF 'DN
QUIT
Begin DoDot:1
+3 SET ^TMP("DIBTC",$JOB,0,DICNT)=$EXTRACT(" ",'$ORDER(DY(DN)))_DY(DN)
SET DICNT=DICNT+1
+4 IF '$ORDER(DY(DN))
SET ^TMP("DIBTC",$JOB,0,DICNT)=$SELECT(DN>2:" G DY"_(DN-1),1:" G EN")
SET DICNT=DICNT+1
+5 QUIT
End DoDot:1
+6 QUIT