- DIS0 ;SFISC/GFT-SEARCH, IF STATEMENT AND MULTIPLE COMBO'S ;30JAN2005
- ;;22.0;VA FileMan;**144**;Mar 30, 1999;Build 5
- ;Per VHA Directive 2004-038, this routine should not be modified.
- W ! K R,N,DL,DE,DJ
- S O=0,E=$D(DC(2)),N="IF: A// ",DE=$S(E:"IF: ",1:N),DL=0
- S C=","
- R W !,DE K DV R X:DTIME S:'$T DTOUT=1 G Q:X[U!'$T
- I X="" S DV=1,DU=X G 1:DL S DQ="TYPE '^' TO EXIT",Y="^1^",DL=1 G BAD:E D ASKQ G L
- S Y=U,P=0,DU="",D="",DL=DL+1
- P S P=P+1,DQ=$E(X,P) I DQ="" G BAD:Y=U,L
- I DQ?.A S DV=$A(DQ)-64 I $D(DC(DV)) D ASKQ G CHK
- G P:"&+ "[DQ I DU="","'-"[DQ S DU="'" G P
- BAD D W !! K DJ(DL),DE(DL) S DL=DL-1 G R
- .I DQ?."?" D BLD^DIALOG($S($D(DC(2)):8004.2,1:8004.1)),MSG^DIALOG("WH") Q ;HELP depending on whether there is a CONDITION B
- .W " <",DQ,">??"
- ;
- ASKQ S J=DC(DV),%=J["?."" """,I=J["^'"+(DU["'")#2 I J["W^" S DV(DV)=$S(I:2-%,1:%+%+1) S:% DC(DV)=$E(J,1,$L(J)-5)_"=""""" Q
- S:$P(J,U)[C DV(DV)=J?.E1",.01^".E&%+(I+%#2) Q
- ;
- CHK S %=$F(Y,U_DV) I % S %=$P($E(Y,%),U,1)'=DU,DQ=""""_DQ_""" AND """_$E("'",%)_DQ_""" IS "_$P("REDUNDANT^CONTRADICTORY",U,%+1) G BAD
- S %=1,Y=Y_DV_DU_U,DU="",J=$P(DC(DV),U,1) G P:J'[C F Z=2:1 I $P(J,C,Z,99)'[C S J=$P(J,C,1,Z-1)_C Q
- I J=D D SAMEQ S:%=1 DJ(DL,DV)=DX(DV)
- S D=J,DJ=DV G P:%>0
- Q G Q^DIS2
- ;
- SAMEQ I J<0,$P(DY(-J),U,3)="" Q
- W !?8,"CONDITION -"_$C(DV+64)_"- WILL APPLY TO THE SAME MULTIPLE AS CONDITION -"_$C(DJ+64)_"-",!?8,"...OK" G YN^DICN
- ;
- L S P=O,DL(DL)=Y,DE="OR: " F %=2:1 S X=$P(Y,U,%) Q:X="" S O=O+1,^UTILITY($J,O,0)=$S(%>2:$S($D(DJ(DL,+X)):" together with ",1:" and "),O=1:"",1:" Or ")_$P("not ",U,X["'")_O(+X)
- W:$X>18 ! W " " F %=P+1:1 Q:'$D(^UTILITY($J,%,0)) S X=^(0) W:$L(X)+$X>77 !?13 W " "_$P(X,U) I $P(X,U,2)'="" W " ("_$P(X,U,2)_")"
- S DV=0
- DV S DV=$O(DV(DV)) S:DV="" DV=-1 G:DV'>0 R:E,1 G DV:$D(DJ(DL,DV)) S I=$P(DC(DV),U,1),D=DK,DN=0,Y="DO YOU WANT THIS SEARCH SPECIFICATION TO BE CONSIDERED TRUE FOR CONDITION -"_$C(DV+64)_"-"
- G S DN=DN+1,P=$P(I,C,1),I=$P(I,C,2,99) G W:P["W",DV:I="" I P<0 S J=DY(-P),D=+J,R=" '"_$P(^DIC(D,0),U,1)_"' ENTRIES " G G:'$P(J,U,3)
- E S D=+$P(^DD(D,P,0),U,2),R=" '"_$O(^DD(D,0,"NM",0))_"' MULTIPLES "
- HOW W !!,Y,!?8,"1) WHEN AT LEAST ONE OF THE"_R_"SATISFIES IT"
- W !?8,"2) WHEN ALL OF THE"_R_"SATISFY IT" S X=2
- I DV(DV) W !?8,"3) WHEN ALL OF THE"_R_"SATISFY IT,",!?16,"OR WHEN THERE ARE NO"_R S X=3
- W !?4,"CHOOSE 1-"_X_": " I DV(DV)>1 W 3 S %1=3
- E W 1 S %1=1
- R "// ",%:DTIME,! S:'$T DTOUT=1 S:%="" %=%1 K %1 G Q:%=U!'$T,HOW:%>X!'% I %>1 S DE(DL,DV,DN)=%,O=O+1,^UTILITY($J,O,0)=" for all"_R_$P(", or when no"_R_"exist",U,%>2)
- G G
- ;
- W I DV(DV)-2 S DE(DL,DV,DN)=DV(DV) G DV
- W !!,Y,!?7,"WHEN THERE IS NO '"_$P(^DD(D,+P,0),U,1)_"' TEXT AT ALL"
- S %=1 D YN^DICN G Q:%<0,W:'% S DE(DL,DV,DN)=4-% G DV
- ;
- 1 K O,DX,Y G ^DIS1
- DIS0 ;SFISC/GFT-SEARCH, IF STATEMENT AND MULTIPLE COMBO'S ;30JAN2005
- +1 ;;22.0;VA FileMan;**144**;Mar 30, 1999;Build 5
- +2 ;Per VHA Directive 2004-038, this routine should not be modified.
- +3 WRITE !
- KILL R,N,DL,DE,DJ
- +4 SET O=0
- SET E=$DATA(DC(2))
- SET N="IF: A// "
- SET DE=$SELECT(E:"IF: ",1:N)
- SET DL=0
- +5 SET C=","
- R WRITE !,DE
- KILL DV
- READ X:DTIME
- IF '$TEST
- SET DTOUT=1
- IF X[U!'$TEST
- GOTO Q
- +1 IF X=""
- SET DV=1
- SET DU=X
- IF DL
- GOTO 1
- SET DQ="TYPE '^' TO EXIT"
- SET Y="^1^"
- SET DL=1
- IF E
- GOTO BAD
- DO ASKQ
- GOTO L
- +2 SET Y=U
- SET P=0
- SET DU=""
- SET D=""
- SET DL=DL+1
- P SET P=P+1
- SET DQ=$EXTRACT(X,P)
- IF DQ=""
- IF Y=U
- GOTO BAD
- GOTO L
- +1 IF DQ?.A
- SET DV=$ASCII(DQ)-64
- IF $DATA(DC(DV))
- DO ASKQ
- GOTO CHK
- +2 IF "&+ "[DQ
- GOTO P
- IF DU=""
- IF "'-"[DQ
- SET DU="'"
- GOTO P
- BAD Begin DoDot:1
- +1 ;HELP depending on whether there is a CONDITION B
- IF DQ?."?"
- DO BLD^DIALOG($SELECT($DATA(DC(2)):8004.2,1:8004.1))
- DO MSG^DIALOG("WH")
- QUIT
- +2 WRITE " <",DQ,">??"
- End DoDot:1
- WRITE !!
- KILL DJ(DL),DE(DL)
- SET DL=DL-1
- GOTO R
- +3 ;
- ASKQ SET J=DC(DV)
- SET %=J["?."" """
- SET I=J["^'"+(DU["'")#2
- IF J["W^"
- SET DV(DV)=$SELECT(I:2-%,1:%+%+1)
- IF %
- SET DC(DV)=$EXTRACT(J,1,$LENGTH(J)-5)_"="""""
- QUIT
- +1 IF $PIECE(J,U)[C
- SET DV(DV)=J?.E1",.01^".E&%+(I+%#2)
- QUIT
- +2 ;
- CHK SET %=$FIND(Y,U_DV)
- IF %
- SET %=$PIECE($EXTRACT(Y,%),U,1)'=DU
- SET DQ=""""_DQ_""" AND """_$EXTRACT("'",%)_DQ_""" IS "_$PIECE("REDUNDANT^CONTRADICTORY",U,%+1)
- GOTO BAD
- +1 SET %=1
- SET Y=Y_DV_DU_U
- SET DU=""
- SET J=$PIECE(DC(DV),U,1)
- IF J'[C
- GOTO P
- FOR Z=2:1
- IF $PIECE(J,C,Z,99)'[C
- SET J=$PIECE(J,C,1,Z-1)_C
- QUIT
- +2 IF J=D
- DO SAMEQ
- IF %=1
- SET DJ(DL,DV)=DX(DV)
- +3 SET D=J
- SET DJ=DV
- IF %>0
- GOTO P
- Q GOTO Q^DIS2
- +1 ;
- SAMEQ IF J<0
- IF $PIECE(DY(-J),U,3)=""
- QUIT
- +1 WRITE !?8,"CONDITION -"_$CHAR(DV+64)_"- WILL APPLY TO THE SAME MULTIPLE AS CONDITION -"_$CHAR(DJ+64)_"-",!?8,"...OK"
- GOTO YN^DICN
- +2 ;
- L SET P=O
- SET DL(DL)=Y
- SET DE="OR: "
- FOR %=2:1
- SET X=$PIECE(Y,U,%)
- IF X=""
- QUIT
- SET O=O+1
- SET ^UTILITY($JOB,O,0)=$SELECT(%>2:$SELECT($DATA(DJ(DL,+X)):" together with ",1:" and "),O=1:"",1:" Or ")_$PIECE("not ",U,X["'")_O(+X)
- +1 IF $X>18
- WRITE !
- WRITE " "
- FOR %=P+1:1
- IF '$DATA(^UTILITY($JOB,%,0))
- QUIT
- SET X=^(0)
- IF $LENGTH(X)+$X>77
- WRITE !?13
- WRITE " "_$PIECE(X,U)
- IF $PIECE(X,U,2)'=""
- WRITE " ("_$PIECE(X,U,2)_")"
- +2 SET DV=0
- DV SET DV=$ORDER(DV(DV))
- IF DV=""
- SET DV=-1
- IF DV'>0
- IF E
- GOTO R
- GOTO 1
- IF $DATA(DJ(DL,DV))
- GOTO DV
- SET I=$PIECE(DC(DV),U,1)
- SET D=DK
- SET DN=0
- SET Y="DO YOU WANT THIS SEARCH SPECIFICATION TO BE CONSIDERED TRUE FOR CONDITION -"_$CHAR(DV+64)_"-"
- G SET DN=DN+1
- SET P=$PIECE(I,C,1)
- SET I=$PIECE(I,C,2,99)
- IF P["W"
- GOTO W
- IF I=""
- GOTO DV
- IF P<0
- SET J=DY(-P)
- SET D=+J
- SET R=" '"_$PIECE(^DIC(D,0),U,1)_"' ENTRIES "
- IF '$PIECE(J,U,3)
- GOTO G
- +1 IF '$TEST
- SET D=+$PIECE(^DD(D,P,0),U,2)
- SET R=" '"_$ORDER(^DD(D,0,"NM",0))_"' MULTIPLES "
- HOW WRITE !!,Y,!?8,"1) WHEN AT LEAST ONE OF THE"_R_"SATISFIES IT"
- +1 WRITE !?8,"2) WHEN ALL OF THE"_R_"SATISFY IT"
- SET X=2
- +2 IF DV(DV)
- WRITE !?8,"3) WHEN ALL OF THE"_R_"SATISFY IT,",!?16,"OR WHEN THERE ARE NO"_R
- SET X=3
- +3 WRITE !?4,"CHOOSE 1-"_X_": "
- IF DV(DV)>1
- WRITE 3
- SET %1=3
- +4 IF '$TEST
- WRITE 1
- SET %1=1
- +5 READ "// ",%:DTIME,!
- IF '$TEST
- SET DTOUT=1
- IF %=""
- SET %=%1
- KILL %1
- IF %=U!'$TEST
- GOTO Q
- IF %>X!'%
- GOTO HOW
- IF %>1
- SET DE(DL,DV,DN)=%
- SET O=O+1
- SET ^UTILITY($JOB,O,0)=" for all"_R_$PIECE(", or when no"_R_"exist",U,%>2)
- +6 GOTO G
- +7 ;
- W IF DV(DV)-2
- SET DE(DL,DV,DN)=DV(DV)
- GOTO DV
- +1 WRITE !!,Y,!?7,"WHEN THERE IS NO '"_$PIECE(^DD(D,+P,0),U,1)_"' TEXT AT ALL"
- +2 SET %=1
- DO YN^DICN
- IF %<0
- GOTO Q
- IF '%
- GOTO W
- SET DE(DL,DV,DN)=4-%
- GOTO DV
- +3 ;
- 1 KILL O,DX,Y
- GOTO ^DIS1