LEXAR ;ISA/FJF/KER-Look-up (Interpret User Response) ; 05/14/2003
 ;;2.0;LEXICON UTILITY;**3,19,25**;Sep 23, 1996
 ;
 ; User Responses
 ;
 ; Numeric  -----------------------------------------------
 ;
 ; #             Select Entry
 ;
 ; Numeric^Comment ----------------------------------------
 ;
 ; IEN^COMMENT   Application comment about term
 ;
 ; Up-Arrow -----------------------------------------------
 ;
 ; ^#            Jump to # on list
 ; ^             End dialog with the user
 ; ^^            End dialog with the application
 ;
 ; Question -----------------------------------------------
 ;
 ; ?             Standard help in LEX("HLP")
 ; ??            Extended help in LEX("HLP")
 ; ?#            Definition for # in LEX("HLP")
 ;
 ; Null ---------------------------------------------------
 ;
 ;               Advance the selection list
 ;
 ; String -------------------------------------------------
 ;
 ; Narrative     Return and store Unresolved Narrative
 ;
 ; --------------------------------------------------------
EN(LEXUR,LEXVDT) ; Interpret user response
 I '$D(LEX) D APN Q
 K LEX("HLP")
 N LEXLL,LEXMAX
 I $D(LEX("LIST",0)),+$G(^TMP("LEXSCH",$J,"NUM",0))>0 D
 .S LEX=+$G(^TMP("LEXSCH",$J,"NUM",0))
 I LEXUR="END",+LEX>0 S LEXUR="^"_LEX
 S LEXLL=+$G(^TMP("LEXSCH",$J,"LEN",0))
 S:LEXLL=0 LEXLL=5
 S LEXMAX=+$G(^TMP("LEXSCH",$J,"LST",0))
 S LEXUR=$G(LEXUR)
 S (LEX("RES"),^TMP("LEXSCH",$J,"RES",0))=LEXUR
 S ^TMP("LEXSCH",$J,"RES",1)="User Response"
 ; Timed out/Quit
 I LEXUR="DTOUT"!(LEXUR="QUIT") D EDA Q
 ; Yes/No response list has one entry
 I $G(LEX)=1,+LEXUR=0,LEXUR'["^" D
 .I $E(LEXUR,1)="Y"!($E(LEXUR,1)="y") S LEXUR=1 Q
 .I LEXUR["?" D HLP^LEXAR3 Q
 .S LEXUR=""
 ; Null (Page Down)
 I LEXUR="" D NULL^LEXAR2 D END Q
 ; Minus (Page Up)
 I $E(LEXUR,1)="-" D LIST^LEXAL2("PGUP") D END Q
 ; Help
 I LEXUR["?" D HLP^LEXAR3 D END Q
 ; Up Arrow
 I LEXUR["^",$D(^TMP("LEXSCH",$J)) D UPA^LEXAR2(LEXUR) D END Q
 ; Select
 I +LEXUR>0,+LEXUR'>LEXMAX D SEL^LEXAR4(+LEXUR,$G(LEXVDT)) D END Q
 ; User Unresolved Narrative
 I LEXUR=$G(^TMP("LEXSCH",$J,"NAR",0)),+$G(^TMP("LEXSCH",$J,"UNR",0))=1 D  D END Q
 .D SAVE^LEXAR6
APN ; Application Unresolved Narrative
 I LEXUR["^",'$D(^TMP("LEXSCH",$J)),+LEXUR>0,$D(^LEX(757.01,+LEXUR,0)),$L($P(LEXUR,"^",2)) D  Q
 .K LEX
 .D COM^LEXAR6(LEXUR)
 D END
 Q
END ; End of Interpretation of the Users Response
 I $D(^TMP("LEXSCH",$J)) D
 .S (LEX("RES"),^TMP("LEXSCH",$J,"RES",0))=LEXUR
 .S ^TMP("LEXSCH",$J,"RES",1)="User Response"
 I $D(LEX("LIST",0)),+$G(^TMP("LEXSCH",$J,"NUM",0))>0 D
 .S LEX=+$G(^TMP("LEXSCH",$J,"NUM",0))
 Q
SEL ; Selection made
 K LEX("RES"),LEX("ERR"),LEX("LIST"),LEX("MIN"),LEX("MAX"),LEX("MAT"),LEX("HLP")
 D NAR,EMF,KLST,KSCH
 S:$D(LEX("SEL")) LEX=0
 Q
EDU ; End Dialog with the User
 D NAR,EMF,KLST,KARL,KSCH
 S LEX=0
 Q
EDA ; End Dialog with the Application
 K LEX
 D KLST,KSCH
 Q
LST ; List exist
 D NAR,MAX,MIN,MAT,EML
 Q
 ;
KLST ; Kill Global List 
 ;      ^TMP("LEXFND",$J)
 ;      ^TMP("LEXHIT",$J)
 K ^TMP("LEXFND",$J),^TMP("LEXHIT",$J)
 Q
KSCH ; Kill Search Variables
 ;      ^TMP("LEXSCH",$J)
 I +$G(LEX)'=0 K ^TMP("LEXSCH",$J)  ; PCH 3 Do not kill if not found condition exist
 Q
KARL ; Kill Array List and supporting variables
 ;       LEX("LIST"),LEX("MAT"),LEX("MIN"),LEX("MAX")
 K LEX("LIST"),LEX("MAT"),LEX("MIN"),LEX("MAX")
 K LEX("EXC"),LEX("EXM")
 Q
LEX ; Set LEX to the number of entries on the list
 S:+$G(^TMP("LEXSCH",$J,"NUM",0))>0 LEX=+$G(^TMP("LEXSCH",$J,"NUM",0))
 Q
NAR ; Set LEX("NAR") to the user narrative
 K LEX("NAR")
 S:$L($G(^TMP("LEXSCH",$J,"NAR",0))) LEX("NAR")=$G(^TMP("LEXSCH",$J,"NAR",0))
 Q
MAX ; Set LEX("MAX") to the last entry reviewed by the user
 K LEX("MAX")
 S:+$G(^TMP("LEXSCH",$J,"LST",0))>0 LEX("MAX")=+$G(^TMP("LEXSCH",$J,"LST",0))
 Q
MIN ; Set LEX("MIN") to the first entry reviewed by the user
 K LEX("MIN")
 S:+$G(LEX("MAX"))>0 LEX("MIN")=1
 Q
EML ; Set LEX("EXM") post-selection IEN^Expression text
 K LEX("EXM")
 S:$L($G(^TMP("LEXSCH",$J,"EXM",2))) LEX("EXM")=$G(^TMP("LEXSCH",$J,"EXM",2))
 Q
EMF ; Set LEX("EXM") pre-selection LIST#^Expression text
 K LEX("EXM")
 I $L($G(^TMP("LEXSCH",$J,"EXM",0))),$L($G(^TMP("LEXSCH",$J,"EXM",1))) D
 .S LEX("EXM")=$G(^TMP("LEXSCH",$J,"EXM",0))_"^"_$G(^TMP("LEXSCH",$J,"EXM",1))
 Q
MAT ; Set "matches found" string and top of list flag
 ;       LEX("MAT")                 # Matches found
 ;       ^TMP("LEXSCH",$J,"TOL",0)  1 - Top of list
 ;                                   0 - Not top of list
 K LEX("MAT")
 I $D(LEX("SEL"))!('$D(^TMP("LEXSCH",$J)))!('$D(LEX("LIST"))) Q
 N LEXOL,LEXL
 S LEXOL=$G(^TMP("LEXSCH",$J,"TOL",0))
 S LEXL=$O(LEX("LIST",0))
 I LEXOL'=0,LEXL=1 S ^TMP("LEXSCH",$J,"TOL",0)=1
 I LEXOL'=0,LEXL'=1 S ^TMP("LEXSCH",$J,"TOL",0)=0
 I LEXOL=1,$L($G(^TMP("LEXSCH",$J,"MAT",0))) D
 .S LEX("MAT")=$G(^TMP("LEXSCH",$J,"MAT",0))
 Q
