DIR ;SFISC/XAK - READER, HELP ;3NOV2016
 ;;22.2;VA FileMan;**4,2**;Jan 05, 2016;Build 139
 ;;Per VA Directive 6402, this routine should not be modified.
 ;;Submitted to OSEHRA 5 January 2015 by the VISTA Expertise Network.
 ;;Based on Medsphere Systems Corporation's MSC FileMan 1051.
 ;;Licensed under the terms of the Apache License, Version 2.0.
 ;;GFT;**30,170,999,1004,1037,1038,1044,1046**
 ;
 N %,%A,%B,%B1,%B2,%B3,%BA,%C,%E,%G,%H,%I,%J,%N,%P,%S,%T,%W,%X,%Y,A0,C,D,DD,DDH,DDQ,DDSV,DG,DH,DIC,DIFLD,DIRO,DO,DP,DQ,DU,DZ,X1,XQH,DIX,DIY,DISYS,%BU,%J1,%A0,%W0,%D1,%D2,%DT,%K,%M,DIRCOUNT
 S:$D(DDH)[0 DDH=0 Q:'$D(DIR(0))  D ^DIR2 G Q:%T=""
 I $D(DIR("V"))#2 D ^DIR1 S DDER=%E G Q
A I $D(DDM) K:DDM DDQ S:'DDM DDQ=$G(DDSHBX,IOSL-7) ;RETURN TO THIS LINE AFTER A "?" HELP
 I $G(DDH) D LIST^DDSU
 D W:%A'["V" I $D(DDS),$D(DIR0) S DDACT=Y I DDO=.5 S DDM=1 G Q
TOOMANY S DIRCOUNT=$G(DIRCOUNT)+1 I DIRCOUNT>49 S (X,Y)=U,(DUOUT,DIRUT)=1 G Q
 I %A'["V",%E D QUES S A0="" D MSG D:$G(DDH) LIST^DDSU G A
 I $D(DTOUT) K Y S DIRUT=1,Y="" G Q
 I %T'="E",X?1."^".E K Y S (DUOUT,DIRUT)=1,Y=X S:X="^^" DIROUT=1 S:%T="Y" %=-1 G Q
 I %T'="E","@"[X,%A["O" S Y="",DIRUT=1 S:%T="P" Y=-1 G Q
 I %A'["O","@"[X,%T'="E" S A0=$C(7)_%A0 D MSG G A ;IF NOT OPTIONAL, A RESPONSE IS REQUIRED,  SO LOOP!
 I $D(DDS),$D(DIR0),DIR0N G Q
 I $D(%G),$D(DIR("B")),X=DIR("B") S Y=%G G Q
X I X'?1."?" K DDQ D ^DIR1 D
 .I $D(DICQRETA) S DIR0N=1,%E=0,X="",DDACT=DICQRETA K DICQRETA Q
 .I '%E,$P(DIR(0),U,3)]"" S %X=X D  S:'$D(X) %E=1 S X=%X ;^DIR1 will evaluate input
 ..N %A,%B,%B1,%B2,%B3,%E,%N,%P,%T,%X,%W,%W0
 ..X $P(DIR(0),U,3,99) ;INPUT TRANSFORM if any
 I %A["V" K:%E Y G Q
 I X'?1."?",'%E G Q ;If no error or "?", quit
 D QUES:%E'<0&'$G(DUOUT)&'$G(DTOUT) S A0="" D MSG D:$G(DDH) LIST^DDSU ;**170
 ;VARIABLES DICQRETV & DICQRETA ARE SET IN DDSU ROUTINE
 I $D(DICQRETV) S (X,DIR0A)=DICQRETV,DDSREPNT=1,DDACT="" K DICQRETV,DICQRETA G X ;RETURN VALUE from drop-down list is sent back for evaluation (and echoing)
 I $D(DICQRETA) S DIR0N=1,DDACT=DICQRETA K DICQRETA G Q
 G A
 ;
 ;
 ;
W ; write the prompt and read the user's response.  Called from A+2 above
 S %W=%W0,%N=$E(%W)=U
SCREEN K DTOUT,DUOUT,DIRUT,DIROUT S %E=0 I $D(DDS),$D(DIR0) D ^DIR0 Q:'$D(DIR("PRE"))  X DIR("PRE") S:'$D(X) %E=1,X="" Q  ;READ in DIR01 via DIR0
 I %T="S",%A'["A",%A'["B" D S
 I $D(DIR("A"))=11 F %=0:0 S %=$O(DIR("A",%)) Q:%'>0  W !,DIR("A",%)
 W ! W:$L(%P) %P
 I $L($G(DIR("B")))>19,%A'["r",%T'="D",%T'="S",(%B'["D"&%T)!'%T,%B'["P"!'$P(%A,",",2) W DIR("B") S Y=DIR("B") D RW^DIR2 S:X="" X=DIR("B") Q  ;NOV2009: NO REPLACE-WITH FOR POINTERS
DIRB N DIRB I $D(DIR("B")) S DIRB=DIR("B") D  W DIRB_"// " ;**
 .I %T="Y",$G(DUZ("LANG"))>1,$G(%B)]"" N X S X=$F("YN",$$UP^DILIBF($E(DIRB))) S:X DIRB=$P($P(%B,";",X-1),":",2) ;YES/NO in FOREIGN LANGUAGE
 R X:$S($D(DIR("T")):DIR("T"),'$D(DTIME):300,1:DTIME) I '$T S DTOUT=1 ;>>>HERE IS THE READER'S 'READ'!<<<
 I $D(DIR("PRE")) X DIR("PRE") I '$D(X) S %E=1,X="" Q
 I X="",$D(DIRB) S X=DIRB I %T'="D",%B'["D"&%T W X
 I X'?.ANP S X="?"
 Q
 ;
QU I %E!(X="?")!($O(^DD(%B1,%B2,21,0))'>0) K %Y S A0="" D MSG S X1=$$HELP^DIALOGZ(%B1,%B2) D   I $D(^DD(%B1,%B2,12)) S X1=^(12) D  ;** FIELD HELP FOR A FIELD-TYPE QUESTION
 .S %J=75,%Y=1 D W1
 N DIPB,DIPA
 S DIPB=$P(^DD(%B1,%B2,0),U,2) I $D(^(4)) S A0=^(4),A0(0)=1 D MSG
 I DIPB["t" S A0=$$XHELP^DIETLIBF(%B1,%B2),A0(0)=1 D MSG N DIPB,%T S (%T,DIPB)="S" D  ;XECUTABLE HELP FOR EXTENDED DATA TYPE
 .I DIPB="S" S $P(%B3,U,3)=$$GETPROP^DIETLIBF(%B1,%B2,"SET OF CODES")
 I X?1"??".E D
 . I $D(DDS) N DDC,DDSQ S DDC=7
 . S A0="" D MSG S %C=0
 . F  S %C=$O(^DD(%B1,%B2,21,%C)) Q:'%C!$D(DDSQ)  S A0=^(%C,0) D
 .. I $D(DDS),$G(DDH),'(DDH#DDC) D LIST^DDSU Q:$D(DDSQ)
 .. D MSG
 I %B["P" K DO S DIC=U_$P(%B3,U,3),DIC(0)="M"_$E("L",%B'["'") D AST:%B["*",DQ
 I %B["D" S %DT=$P($P(%B3,U,5,99),"%DT=""",2) I %DT]"" S %DT=$P(%DT,"""") D HELP^%DTC ;EXTENDED TYPE LIKE 'YEAR' SHOULDN'T GIVE STANDARD DATE HELP MESSAGE
FLDSET I %B["S" D  ;SET-VALUED PROMPT
 .D SETSCR(%B1,%B2) S A0=$$EZBLD^DIALOG(8068)_" " D MSG
 .I $D(^DD(%B1,%B2,0)),$G(DUZ("LANG"))>1 N %B3 S $P(%B3,U,3)=$$SETIN^DIALOGZ
 .F %C=1:1 S Y=$P($P(%B3,U,3),";",%C) Q:Y=""  D
 ..S %I=$P(Y,":",2),Y=$P(Y,":") I 1 X:$D(DIC("S")) DIC("S") E  Q
 ..I $G(DDS),$G(DDSMOUSY) S DDH=$G(DDH)+1,DDH(DDH,"XT")="W ! D WRITMOUS("""_Y_""") W ""    "" D WRITMOUS("""_%I_""")" Q  ;MOUSE REMEMBERS SET VALUES
 ..S A0=Y_$E("         ",$L(Y)+1,999)_%I D MSG
 I %B["V" S A0="" D MSG S X1=X,DU=%B1,D=%B2,DZ=X D V^DIEQ S X=X1
 Q
 ;
AST F %=" D ^DIC"," D IX^DIC"," D MIX^DIC1" S Y=$F(%B3,%),%=$L(%)+1 Q:Y
 Q:'Y
 I $D(DDS) S A0=" " D MSG
 X $P($E(%B3,1,Y-%),U,5,99)
 Q
 ;
SETSCR(DIRFIL,DIRFLD) ;SET UP DIC("S")
 Q:'$D(^DD(DIRFIL,DIRFLD,12.1))
 X ^(12.1)
 Q:$G(DUZ("LANG"))'>1!'$D(DIC("S"))
 S DIC("S",1.007)=$P(^DD(DIRFIL,DIRFLD,0),U,3),DIC("S",0)=";"_$$SETIN^DIALOGZ,DIC("S",2.007)=DIC("S")
 S DIC("S")="N S,I S S=DIC(""S"",0),I=$L($E(S,1,$F(S,"";""_Y_"":"")),"";"")-1,S=$P($P(DIC(""S"",1.007),"";"",I),"":"") N Y S Y=S X DIC(""S"",2.007)"
 Q
 ;
 ;
DQ N %W K DICQRETV
 S:$D(D)[0 D="B" S (X1,DZ)=X D DQ^DICQ S DDSV=DIC K DD,% S:$D(X1) X=X1
 Q
 ;
QUES ;
 I %T D QU I $D(DICQRETV)!$D(DICQRETA) Q
 I X="??",$D(DIR("??")) D:$P(DIR("??"),U)]"" HF S:$P(DIR("??"),U,2)]"" A0(0)=1,A0=$P(DIR("??"),U,2,99) D:$P(DIR("??"),U,2)]"" MSG Q
 I X="??",%T="D" D  Q
 . N DIHELP,DIJUNK,DILINE,DIROOT
 . D DT^DILF(%DT,"?",.DIJUNK,"","DIROOT")
 . S A0="" D MSG
 . F DILINE=1:1:DIHELP S A0=DIROOT("DIHELP",DILINE) D MSG
 I %T="P" S DIC=%B1,DIC(0)=%B2 S:$D(DIR("S"))#2 DIC("S")=DIR("S") D DQ K DIC("S")
 I '%N S A0="" D MSG
 I X'["?" W $C(7)
 I %N S A0(0)=1,A0=$E(%W,2,999) D MSG
 D:'%N WRAP:%W]"" I %T["S",(%A["A"!(%A["B")) D S
 Q
 ;
WRAP I $D(DIR("?"))=11 F %I=1:1 Q:'$D(DIR("?",%I))  S A0=DIR("?",%I) D MSG
 K %Y S %J=$S($G(IOM,80)>6:$G(IOM,80)-6,IOM>1:IOM,1:2),%Y=1 S X1=$S(($D(DIR("?"))&'%N):DIR("?"),1:%W)
 I '%N,$D(DIR("?"))'=11,$E(X1,$L(X1))'="." S X1=X1_"."
W1 I $L(X1)<%J S %Y(%Y)=X1
 E  D  G W1
 . I $E(X1,1,%J-1)'?.E1P.E S %I=%J-1
 . E  F %I=%J-1:-1:1 Q:$E(X1,%I)?1P
 . S %Y(%Y)=$E(X1,1,%I),X1=$E(X1,%I+1,999),%Y=%Y+1
 F %I=1:1:%Y S A0=%Y(%I) D MSG
 I $D(DDS),%T="S" D
SET . S A0=$$EZBLD^DIALOG(8068) D MSG
 . F %I=1:1 Q:$P(%B,";",%I,999)=""  D
 .. S %Y=$P(%B,";",%I),Y=$P(%Y,":") Q:Y=""
 .. I $D(DIR("S"))#2 X DIR("S") E  Q
 ..I $G(DDS),$G(DDSMOUSY) S DDH=$G(DDH)+1,DDH(DDH,"XT")="D WRITMOUS("""_Y_""") W ""   "" D WRITMOUS("""_$P(%Y,":",2)_""")" Q  ;MOUSE REMEMBERS FORM-ONLY SET VALUE!
 .. S A0=Y_$J("",9-$L(Y))_$P(%Y,":",2) D MSG
 K %Y,%,X1
 Q
HF S XQH=$P(DIR("??"),U) N %A,%B,%E,DIR D EN1^XQH
 Q
MSG ;WRITE OUT 'A0'
 I $D(DDS),A0]"" D
 . S DDH=$G(DDH)+1
 . I $D(A0)>9 S DDH(DDH,"T")="",DDH=DDH+1,DDH(DDH,"X")=A0
 . E  S DDH(DDH,"T")=A0
 I '$D(DDS),$D(A0)>9 W:$X ! X A0
 I '$D(DDS),$D(A0)=1 W !,A0
 K A0
 Q
 ;
 ;
S W:$G(X)'?1."?"!(%A["A") !
 I $D(DIR("L"))#2 D
 . I $D(DIR("L"))=11 F %=0:0 S %=$O(DIR("L",%)) Q:%'>0  W !,DIR("L",%)
 . W !,DIR("L")
 E  I %B'[":",$O(DIR("C",""))]"" D
 . W !?5,$$EZBLD^DIALOG(8046),! ;**
 . S %I="" F  S %I=$O(DIR("C",%I)) Q:%I=""  D
 .. S Y=$P(DIR("C",%I),":")
 .. I $D(DIR("S"))#2 X DIR("S") E  Q
 .. W !?10,Y,?20,$P(DIR("C",%I),":",2)
 E  D
 . W !?5,$$EZBLD^DIALOG(8046),! ;**
 . F %I=1:1 Q:$P(%B,";",%I,999)=""  D
 .. S Y=$P($P(%B,";",%I),":") Q:'$L($P(%B,";",%I,999))
 .. I $D(DIR("S"))#2 X DIR("S") E  Q
 .. W !?10,Y,?20,$P($P(%B,";",%I),":",2)
 W:%A'["A" !
 Q
Q G ^DIRQ
 ;
 ;#8068  Choose from
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HDIR   7524     printed  Sep 23, 2025@20:29:52                                                                                                                                                                                                         Page 2
DIR       ;SFISC/XAK - READER, HELP ;3NOV2016
 +1       ;;22.2;VA FileMan;**4,2**;Jan 05, 2016;Build 139
 +2       ;;Per VA Directive 6402, this routine should not be modified.
 +3       ;;Submitted to OSEHRA 5 January 2015 by the VISTA Expertise Network.
 +4       ;;Based on Medsphere Systems Corporation's MSC FileMan 1051.
 +5       ;;Licensed under the terms of the Apache License, Version 2.0.
 +6       ;;GFT;**30,170,999,1004,1037,1038,1044,1046**
 +7       ;
 +8        NEW %,%A,%B,%B1,%B2,%B3,%BA,%C,%E,%G,%H,%I,%J,%N,%P,%S,%T,%W,%X,%Y,A0,C,D,DD,DDH,DDQ,DDSV,DG,DH,DIC,DIFLD,DIRO,DO,DP,DQ,DU,DZ,X1,XQH,DIX,DIY,DISYS,%BU,%J1,%A0,%W0,%D1,%D2,%DT,%K,%M,DIRCOUNT
 +9        if $DATA(DDH)[0
               SET DDH=0
           if '$DATA(DIR(0))
               QUIT 
           DO ^DIR2
           if %T=""
               GOTO Q
 +10       IF $DATA(DIR("V"))#2
               DO ^DIR1
               SET DDER=%E
               GOTO Q
A         ;RETURN TO THIS LINE AFTER A "?" HELP
           IF $DATA(DDM)
               if DDM
                   KILL DDQ
               if 'DDM
                   SET DDQ=$GET(DDSHBX,IOSL-7)
 +1        IF $GET(DDH)
               DO LIST^DDSU
 +2        if %A'["V"
               DO W
           IF $DATA(DDS)
               IF $DATA(DIR0)
                   SET DDACT=Y
                   IF DDO=.5
                       SET DDM=1
                       GOTO Q
TOOMANY    SET DIRCOUNT=$GET(DIRCOUNT)+1
           IF DIRCOUNT>49
               SET (X,Y)=U
               SET (DUOUT,DIRUT)=1
               GOTO Q
 +1        IF %A'["V"
               IF %E
                   DO QUES
                   SET A0=""
                   DO MSG
                   if $GET(DDH)
                       DO LIST^DDSU
                   GOTO A
 +2        IF $DATA(DTOUT)
               KILL Y
               SET DIRUT=1
               SET Y=""
               GOTO Q
 +3        IF %T'="E"
               IF X?1."^".E
                   KILL Y
                   SET (DUOUT,DIRUT)=1
                   SET Y=X
                   if X="^^"
                       SET DIROUT=1
                   if %T="Y"
                       SET %=-1
                   GOTO Q
 +4        IF %T'="E"
               IF "@"[X
                   IF %A["O"
                       SET Y=""
                       SET DIRUT=1
                       if %T="P"
                           SET Y=-1
                       GOTO Q
 +5       ;IF NOT OPTIONAL, A RESPONSE IS REQUIRED,  SO LOOP!
           IF %A'["O"
               IF "@"[X
                   IF %T'="E"
                       SET A0=$CHAR(7)_%A0
                       DO MSG
                       GOTO A
 +6        IF $DATA(DDS)
               IF $DATA(DIR0)
                   IF DIR0N
                       GOTO Q
 +7        IF $DATA(%G)
               IF $DATA(DIR("B"))
                   IF X=DIR("B")
                       SET Y=%G
                       GOTO Q
X          IF X'?1."?"
               KILL DDQ
               DO ^DIR1
               Begin DoDot:1
 +1                IF $DATA(DICQRETA)
                       SET DIR0N=1
                       SET %E=0
                       SET X=""
                       SET DDACT=DICQRETA
                       KILL DICQRETA
                       QUIT 
 +2       ;^DIR1 will evaluate input
                   IF '%E
                       IF $PIECE(DIR(0),U,3)]""
                           SET %X=X
                           Begin DoDot:2
 +3                            NEW %A,%B,%B1,%B2,%B3,%E,%N,%P,%T,%X,%W,%W0
 +4       ;INPUT TRANSFORM if any
                               XECUTE $PIECE(DIR(0),U,3,99)
                           End DoDot:2
                           if '$DATA(X)
                               SET %E=1
                           SET X=%X
               End DoDot:1
 +5        IF %A["V"
               if %E
                   KILL Y
               GOTO Q
 +6       ;If no error or "?", quit
           IF X'?1."?"
               IF '%E
                   GOTO Q
 +7       ;**170
           if %E'<0&'$GET(DUOUT)&'$GET(DTOUT)
               DO QUES
           SET A0=""
           DO MSG
           if $GET(DDH)
               DO LIST^DDSU
 +8       ;VARIABLES DICQRETV & DICQRETA ARE SET IN DDSU ROUTINE
 +9       ;RETURN VALUE from drop-down list is sent back for evaluation (and echoing)
           IF $DATA(DICQRETV)
               SET (X,DIR0A)=DICQRETV
               SET DDSREPNT=1
               SET DDACT=""
               KILL DICQRETV,DICQRETA
               GOTO X
 +10       IF $DATA(DICQRETA)
               SET DIR0N=1
               SET DDACT=DICQRETA
               KILL DICQRETA
               GOTO Q
 +11       GOTO A
 +12      ;
 +13      ;
 +14      ;
W         ; write the prompt and read the user's response.  Called from A+2 above
 +1        SET %W=%W0
           SET %N=$EXTRACT(%W)=U
SCREEN    ;READ in DIR01 via DIR0
           KILL DTOUT,DUOUT,DIRUT,DIROUT
           SET %E=0
           IF $DATA(DDS)
               IF $DATA(DIR0)
                   DO ^DIR0
                   if '$DATA(DIR("PRE"))
                       QUIT 
                   XECUTE DIR("PRE")
                   if '$DATA(X)
                       SET %E=1
                       SET X=""
                   QUIT 
 +1        IF %T="S"
               IF %A'["A"
                   IF %A'["B"
                       DO S
 +2        IF $DATA(DIR("A"))=11
               FOR %=0:0
                   SET %=$ORDER(DIR("A",%))
                   if %'>0
                       QUIT 
                   WRITE !,DIR("A",%)
 +3        WRITE !
           if $LENGTH(%P)
               WRITE %P
 +4       ;NOV2009: NO REPLACE-WITH FOR POINTERS
           IF $LENGTH($GET(DIR("B")))>19
               IF %A'["r"
                   IF %T'="D"
                       IF %T'="S"
                           IF (%B'["D"&%T)!'%T
                               IF %B'["P"!'$PIECE(%A,",",2)
                                   WRITE DIR("B")
                                   SET Y=DIR("B")
                                   DO RW^DIR2
                                   if X=""
                                       SET X=DIR("B")
                                   QUIT 
DIRB      ;**
           NEW DIRB
           IF $DATA(DIR("B"))
               SET DIRB=DIR("B")
               Begin DoDot:1
 +1       ;YES/NO in FOREIGN LANGUAGE
                   IF %T="Y"
                       IF $GET(DUZ("LANG"))>1
                           IF $GET(%B)]""
                               NEW X
                               SET X=$FIND("YN",$$UP^DILIBF($EXTRACT(DIRB)))
                               if X
                                   SET DIRB=$PIECE($PIECE(%B,";",X-1),":",2)
               End DoDot:1
               WRITE DIRB_"// "
 +2       ;>>>HERE IS THE READER'S 'READ'!<<<
           READ X:$SELECT($DATA(DIR("T")):DIR("T"),'$DATA(DTIME):300,1:DTIME)
           IF '$TEST
               SET DTOUT=1
 +3        IF $DATA(DIR("PRE"))
               XECUTE DIR("PRE")
               IF '$DATA(X)
                   SET %E=1
                   SET X=""
                   QUIT 
 +4        IF X=""
               IF $DATA(DIRB)
                   SET X=DIRB
                   IF %T'="D"
                       IF %B'["D"&%T
                           WRITE X
 +5        IF X'?.ANP
               SET X="?"
 +6        QUIT 
 +7       ;
QU        ;** FIELD HELP FOR A FIELD-TYPE QUESTION
           IF %E!(X="?")!($ORDER(^DD(%B1,%B2,21,0))'>0)
               KILL %Y
               SET A0=""
               DO MSG
               SET X1=$$HELP^DIALOGZ(%B1,%B2)
               Begin DoDot:1
 +1                SET %J=75
                   SET %Y=1
                   DO W1
               End DoDot:1
               IF $DATA(^DD(%B1,%B2,12))
                   SET X1=^(12)
                   Begin DoDot:1
                   End DoDot:1
 +2        NEW DIPB,DIPA
 +3        SET DIPB=$PIECE(^DD(%B1,%B2,0),U,2)
           IF $DATA(^(4))
               SET A0=^(4)
               SET A0(0)=1
               DO MSG
 +4       ;XECUTABLE HELP FOR EXTENDED DATA TYPE
           IF DIPB["t"
               SET A0=$$XHELP^DIETLIBF(%B1,%B2)
               SET A0(0)=1
               DO MSG
               NEW DIPB,%T
               SET (%T,DIPB)="S"
               Begin DoDot:1
 +5                IF DIPB="S"
                       SET $PIECE(%B3,U,3)=$$GETPROP^DIETLIBF(%B1,%B2,"SET OF CODES")
               End DoDot:1
 +6        IF X?1"??".E
               Begin DoDot:1
 +7                IF $DATA(DDS)
                       NEW DDC,DDSQ
                       SET DDC=7
 +8                SET A0=""
                   DO MSG
                   SET %C=0
 +9                FOR 
                       SET %C=$ORDER(^DD(%B1,%B2,21,%C))
                       if '%C!$DATA(DDSQ)
                           QUIT 
                       SET A0=^(%C,0)
                       Begin DoDot:2
 +10                       IF $DATA(DDS)
                               IF $GET(DDH)
                                   IF '(DDH#DDC)
                                       DO LIST^DDSU
                                       if $DATA(DDSQ)
                                           QUIT 
 +11                       DO MSG
                       End DoDot:2
               End DoDot:1
 +12       IF %B["P"
               KILL DO
               SET DIC=U_$PIECE(%B3,U,3)
               SET DIC(0)="M"_$EXTRACT("L",%B'["'")
               if %B["*"
                   DO AST
               DO DQ
 +13      ;EXTENDED TYPE LIKE 'YEAR' SHOULDN'T GIVE STANDARD DATE HELP MESSAGE
           IF %B["D"
               SET %DT=$PIECE($PIECE(%B3,U,5,99),"%DT=""",2)
               IF %DT]""
                   SET %DT=$PIECE(%DT,"""")
                   DO HELP^%DTC
FLDSET    ;SET-VALUED PROMPT
           IF %B["S"
               Begin DoDot:1
 +1                DO SETSCR(%B1,%B2)
                   SET A0=$$EZBLD^DIALOG(8068)_" "
                   DO MSG
 +2                IF $DATA(^DD(%B1,%B2,0))
                       IF $GET(DUZ("LANG"))>1
                           NEW %B3
                           SET $PIECE(%B3,U,3)=$$SETIN^DIALOGZ
 +3                FOR %C=1:1
                       SET Y=$PIECE($PIECE(%B3,U,3),";",%C)
                       if Y=""
                           QUIT 
                       Begin DoDot:2
 +4                        SET %I=$PIECE(Y,":",2)
                           SET Y=$PIECE(Y,":")
                           IF 1
                               if $DATA(DIC("S"))
                                   XECUTE DIC("S")
                              IF '$TEST
                                   QUIT 
 +5       ;MOUSE REMEMBERS SET VALUES
                           IF $GET(DDS)
                               IF $GET(DDSMOUSY)
                                   SET DDH=$GET(DDH)+1
                                   SET DDH(DDH,"XT")="W ! D WRITMOUS("""_Y_""") W ""    "" D WRITMOUS("""_%I_""")"
                                   QUIT 
 +6                        SET A0=Y_$EXTRACT("         ",$LENGTH(Y)+1,999)_%I
                           DO MSG
                       End DoDot:2
               End DoDot:1
 +7        IF %B["V"
               SET A0=""
               DO MSG
               SET X1=X
               SET DU=%B1
               SET D=%B2
               SET DZ=X
               DO V^DIEQ
               SET X=X1
 +8        QUIT 
 +9       ;
AST        FOR %=" D ^DIC"," D IX^DIC"," D MIX^DIC1"
               SET Y=$FIND(%B3,%)
               SET %=$LENGTH(%)+1
               if Y
                   QUIT 
 +1        if 'Y
               QUIT 
 +2        IF $DATA(DDS)
               SET A0=" "
               DO MSG
 +3        XECUTE $PIECE($EXTRACT(%B3,1,Y-%),U,5,99)
 +4        QUIT 
 +5       ;
SETSCR(DIRFIL,DIRFLD) ;SET UP DIC("S")
 +1        if '$DATA(^DD(DIRFIL,DIRFLD,12.1))
               QUIT 
 +2        XECUTE ^(12.1)
 +3        if $GET(DUZ("LANG"))'>1!'$DATA(DIC("S"))
               QUIT 
 +4        SET DIC("S",1.007)=$PIECE(^DD(DIRFIL,DIRFLD,0),U,3)
           SET DIC("S",0)=";"_$$SETIN^DIALOGZ
           SET DIC("S",2.007)=DIC("S")
 +5        SET DIC("S")="N S,I S S=DIC(""S"",0),I=$L($E(S,1,$F(S,"";""_Y_"":"")),"";"")-1,S=$P($P(DIC(""S"",1.007),"";"",I),"":"") N Y S Y=S X DIC(""S"",2.007)"
 +6        QUIT 
 +7       ;
 +8       ;
DQ         NEW %W
           KILL DICQRETV
 +1        if $DATA(D)[0
               SET D="B"
           SET (X1,DZ)=X
           DO DQ^DICQ
           SET DDSV=DIC
           KILL DD,%
           if $DATA(X1)
               SET X=X1
 +2        QUIT 
 +3       ;
QUES      ;
 +1        IF %T
               DO QU
               IF $DATA(DICQRETV)!$DATA(DICQRETA)
                   QUIT 
 +2        IF X="??"
               IF $DATA(DIR("??"))
                   if $PIECE(DIR("??"),U)]""
                       DO HF
                   if $PIECE(DIR("??"),U,2)]""
                       SET A0(0)=1
                       SET A0=$PIECE(DIR("??"),U,2,99)
                   if $PIECE(DIR("??"),U,2)]""
                       DO MSG
                   QUIT 
 +3        IF X="??"
               IF %T="D"
                   Begin DoDot:1
 +4                    NEW DIHELP,DIJUNK,DILINE,DIROOT
 +5                    DO DT^DILF(%DT,"?",.DIJUNK,"","DIROOT")
 +6                    SET A0=""
                       DO MSG
 +7                    FOR DILINE=1:1:DIHELP
                           SET A0=DIROOT("DIHELP",DILINE)
                           DO MSG
                   End DoDot:1
                   QUIT 
 +8        IF %T="P"
               SET DIC=%B1
               SET DIC(0)=%B2
               if $DATA(DIR("S"))#2
                   SET DIC("S")=DIR("S")
               DO DQ
               KILL DIC("S")
 +9        IF '%N
               SET A0=""
               DO MSG
 +10       IF X'["?"
               WRITE $CHAR(7)
 +11       IF %N
               SET A0(0)=1
               SET A0=$EXTRACT(%W,2,999)
               DO MSG
 +12       if '%N
               if %W]""
                   DO WRAP
           IF %T["S"
               IF (%A["A"!(%A["B"))
                   DO S
 +13       QUIT 
 +14      ;
WRAP       IF $DATA(DIR("?"))=11
               FOR %I=1:1
                   if '$DATA(DIR("?",%I))
                       QUIT 
                   SET A0=DIR("?",%I)
                   DO MSG
 +1        KILL %Y
           SET %J=$SELECT($GET(IOM,80)>6:$GET(IOM,80)-6,IOM>1:IOM,1:2)
           SET %Y=1
           SET X1=$SELECT(($DATA(DIR("?"))&'%N):DIR("?"),1:%W)
 +2        IF '%N
               IF $DATA(DIR("?"))'=11
                   IF $EXTRACT(X1,$LENGTH(X1))'="."
                       SET X1=X1_"."
W1         IF $LENGTH(X1)<%J
               SET %Y(%Y)=X1
 +1       IF '$TEST
               Begin DoDot:1
 +2                IF $EXTRACT(X1,1,%J-1)'?.E1P.E
                       SET %I=%J-1
 +3               IF '$TEST
                       FOR %I=%J-1:-1:1
                           if $EXTRACT(X1,%I)?1P
                               QUIT 
 +4                SET %Y(%Y)=$EXTRACT(X1,1,%I)
                   SET X1=$EXTRACT(X1,%I+1,999)
                   SET %Y=%Y+1
               End DoDot:1
               GOTO W1
 +5        FOR %I=1:1:%Y
               SET A0=%Y(%I)
               DO MSG
 +6        IF $DATA(DDS)
               IF %T="S"
                   Begin DoDot:1
SET                    SET A0=$$EZBLD^DIALOG(8068)
                       DO MSG
 +1                    FOR %I=1:1
                           if $PIECE(%B,";",%I,999)=""
                               QUIT 
                           Begin DoDot:2
 +2                            SET %Y=$PIECE(%B,";",%I)
                               SET Y=$PIECE(%Y,":")
                               if Y=""
                                   QUIT 
 +3                            IF $DATA(DIR("S"))#2
                                   XECUTE DIR("S")
                                  IF '$TEST
                                       QUIT 
 +4       ;MOUSE REMEMBERS FORM-ONLY SET VALUE!
                               IF $GET(DDS)
                                   IF $GET(DDSMOUSY)
                                       SET DDH=$GET(DDH)+1
                                       SET DDH(DDH,"XT")="D WRITMOUS("""_Y_""") W ""   "" D WRITMOUS("""_$PIECE(%Y,":",2)_""")"
                                       QUIT 
 +5                            SET A0=Y_$JUSTIFY("",9-$LENGTH(Y))_$PIECE(%Y,":",2)
                               DO MSG
                           End DoDot:2
                   End DoDot:1
 +6        KILL %Y,%,X1
 +7        QUIT 
HF         SET XQH=$PIECE(DIR("??"),U)
           NEW %A,%B,%E,DIR
           DO EN1^XQH
 +1        QUIT 
MSG       ;WRITE OUT 'A0'
 +1        IF $DATA(DDS)
               IF A0]""
                   Begin DoDot:1
 +2                    SET DDH=$GET(DDH)+1
 +3                    IF $DATA(A0)>9
                           SET DDH(DDH,"T")=""
                           SET DDH=DDH+1
                           SET DDH(DDH,"X")=A0
 +4                   IF '$TEST
                           SET DDH(DDH,"T")=A0
                   End DoDot:1
 +5        IF '$DATA(DDS)
               IF $DATA(A0)>9
                   if $X
                       WRITE !
                   XECUTE A0
 +6        IF '$DATA(DDS)
               IF $DATA(A0)=1
                   WRITE !,A0
 +7        KILL A0
 +8        QUIT 
 +9       ;
 +10      ;
S          if $GET(X)'?1."?"!(%A["A")
               WRITE !
 +1        IF $DATA(DIR("L"))#2
               Begin DoDot:1
 +2                IF $DATA(DIR("L"))=11
                       FOR %=0:0
                           SET %=$ORDER(DIR("L",%))
                           if %'>0
                               QUIT 
                           WRITE !,DIR("L",%)
 +3                WRITE !,DIR("L")
               End DoDot:1
 +4       IF '$TEST
               IF %B'[":"
                   IF $ORDER(DIR("C",""))]""
                       Begin DoDot:1
 +5       ;**
                           WRITE !?5,$$EZBLD^DIALOG(8046),!
 +6                        SET %I=""
                           FOR 
                               SET %I=$ORDER(DIR("C",%I))
                               if %I=""
                                   QUIT 
                               Begin DoDot:2
 +7                                SET Y=$PIECE(DIR("C",%I),":")
 +8                                IF $DATA(DIR("S"))#2
                                       XECUTE DIR("S")
                                      IF '$TEST
                                           QUIT 
 +9                                WRITE !?10,Y,?20,$PIECE(DIR("C",%I),":",2)
                               End DoDot:2
                       End DoDot:1
 +10      IF '$TEST
               Begin DoDot:1
 +11      ;**
                   WRITE !?5,$$EZBLD^DIALOG(8046),!
 +12               FOR %I=1:1
                       if $PIECE(%B,";",%I,999)=""
                           QUIT 
                       Begin DoDot:2
 +13                       SET Y=$PIECE($PIECE(%B,";",%I),":")
                           if '$LENGTH($PIECE(%B,";",%I,999))
                               QUIT 
 +14                       IF $DATA(DIR("S"))#2
                               XECUTE DIR("S")
                              IF '$TEST
                                   QUIT 
 +15                       WRITE !?10,Y,?20,$PIECE($PIECE(%B,";",%I),":",2)
                       End DoDot:2
               End DoDot:1
 +16       if %A'["A"
               WRITE !
 +17       QUIT 
Q          GOTO ^DIRQ
 +1       ;
 +2       ;#8068  Choose from