| 1 | MCARDSE ;WISC/MLH-MEDICINE SCREEN HANDLER-PROCESS FIELD ;5/2/96  13:31
 | 
|---|
| 2 |  ;;2.3;Medicine;;09/13/1996
 | 
|---|
| 3 | RESPONSE(MHX,MHFL,MHDX,MHDY) ;    process a response from the user
 | 
|---|
| 4 |  N DX,DY,MCHAR,MHY,QUIT,X
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  S X=0 X ^%ZOSF("RM") ;    turn off auto wrap
 | 
|---|
| 7 |  X ^%ZOSF("EOFF") ;    turn off echo
 | 
|---|
| 8 |  S DX=MHDX,DY=MHDY X IOXY ;    position cursor
 | 
|---|
| 9 |  S MHY="" ;    the output string
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  ;    read and process characters until the user says quit
 | 
|---|
| 12 |  S QUIT=0
 | 
|---|
| 13 |  F  D RD Q:QUIT  D:MCHAR>31&(MCHAR'=126)&(MCHAR<128) PROC D:MCHAR=27 PCK Q:QUIT  ;    don't process control chars or tilde
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 |  I MCHAR=13,(MHY[U) S MCMASS=1 K MCDID
 | 
|---|
| 16 |  I $E(MHY,1)="?" S MCMASS=1 K MCDID
 | 
|---|
| 17 |  I MHY="^D"!(MHY="^U") S MCMASS=1 K MCDID
 | 
|---|
| 18 |  ;    did user enter anything?
 | 
|---|
| 19 |  I MHY="" S MHY=MHX ;    nope, default to input
 | 
|---|
| 20 |  S X=+$G(IOM) X ^%ZOSF("RM") ;    reset margin
 | 
|---|
| 21 |  X ^%ZOSF("EON") ;    echo on
 | 
|---|
| 22 |  S:$E(MHY,1)=U MHY=$$UPPER(MHY)
 | 
|---|
| 23 |  S:$P(DJJ(V),U,4)["S" MHY=$$UPPER(MHY)
 | 
|---|
| 24 |  QUIT MHY_"~"_(QUIT'=2) ;    second piece indicates a timeout
 | 
|---|
| 25 | UPPER(X) ;CONVERT TO UPPERCASE
 | 
|---|
| 26 |  N Y
 | 
|---|
| 27 |  X ^%ZOSF("UPPERCASE")
 | 
|---|
| 28 |  Q Y
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 | RD ;    read one character
 | 
|---|
| 31 |  R *MCHAR:DTIME
 | 
|---|
| 32 |  I MCHAR'=-1,MCHAR'=13 ;,MCHAR'=27 ;Allow the escape charcter
 | 
|---|
| 33 |  E  S QUIT=$S(MCHAR=-1:2,1:1) ;    bailout (QUIT=1) or timeout (QUIT=2)
 | 
|---|
| 34 |  Q
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 | PROC ;    process one character
 | 
|---|
| 37 |  I MCHAR'=127 D  ;    process ordinary character
 | 
|---|
| 38 |  .  D PROCCHAR
 | 
|---|
| 39 |  E  I MHY'="" D PROCDEL ;    process <DELETE> if possible
 | 
|---|
| 40 |  Q
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 | PROCCHAR ;    process ordinary character
 | 
|---|
| 43 |  IF $L(MHY)<MHFL D  ;    not at the end yet
 | 
|---|
| 44 |  .  W $C(MCHAR)
 | 
|---|
| 45 |  .  I MHDX<79 S MHDX=MHDX+1
 | 
|---|
| 46 |  .  E  S (DY,MHDY)=MHDY+1,(DX,MHDX)=0 X IOXY
 | 
|---|
| 47 |  .  S MHY=MHY_$C(MCHAR)
 | 
|---|
| 48 |  .  Q
 | 
|---|
| 49 |  ELSE  D  ;    we're at the end, start overwriting
 | 
|---|
| 50 |  .  W $C(8,7),$C(MCHAR) ;    get rid of the last char
 | 
|---|
| 51 |  .  S MHY=$$INSERT^MCU(MHY,MHFL,MCHAR)
 | 
|---|
| 52 |  .  Q
 | 
|---|
| 53 |  ;END IF
 | 
|---|
| 54 |  Q
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 | PROCDEL ;    process <DELETE>
 | 
|---|
| 57 |  I MHDX>0 W $C(8,32,8) S MHDX=MHDX-1
 | 
|---|
| 58 |  E  S (DX,MHDX)=79,(DY,MHDY)=MHDY-1 X IOXY W " "
 | 
|---|
| 59 |  S MHY=$E(MHY,1,$L(MHY)-1)
 | 
|---|
| 60 |  Q
 | 
|---|
| 61 |  ;
 | 
|---|
| 62 | MLH ;TEST TAG
 | 
|---|
| 63 |  W @IOF S TEST=$$RESPONSE^MCARDSE($G(TEST),110,0,10)
 | 
|---|
| 64 |  Q
 | 
|---|
| 65 | PCK ;WISC/DCB-Process the escape keys see bottom for mapping
 | 
|---|
| 66 |  N STR,CHR S STR=$C(27) ;Set the String to Escape
 | 
|---|
| 67 |  F  R *CHR:.001 Q:CHR=-1  S STR=STR_$C(CHR) ; Clear the buffer
 | 
|---|
| 68 |  I STR=IOCUD K MCDID S QUIT=1 Q
 | 
|---|
| 69 |  I STR=IOKP4 D JUMP Q
 | 
|---|
| 70 |  S MHY=$S(STR=IOCUB:"^U",STR=IOCUU:"<",STR=IOCUF:"^D",STR=IOPF1:"^T",STR=IOPF2:"^O",STR=IOPF3:"?",STR=IOPF4:"??",STR=IOKP1:"^C",STR=IOKP3:"^",STR=IOKP5:"^R",STR=IOKP6:" ",STR=IOKP9:"@",STR=IOKP7:"^H",1:"")
 | 
|---|
| 71 |  S:MHY'="" QUIT=1
 | 
|---|
| 72 |  Q
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 | JUMP ;This allow the user to type in a field number w/o pressing return
 | 
|---|
| 75 |  N NUM,LOW,HI
 | 
|---|
| 76 |  S LOW=$O(DJJ("")),HI=DJL
 | 
|---|
| 77 |  X DJCP X XY W DJLIN X ^%ZOSF("EON") K MCDID S MCMASS=1
 | 
|---|
| 78 |  W !,"Input a field number",LOW," to ",HI," to jump to."
 | 
|---|
| 79 |  R !,"Field Number: ",NUM:DTIME I ('$T)!(NUM["^") S QUIT=2 Q
 | 
|---|
| 80 |  G:NUM["?" JUMP
 | 
|---|
| 81 |  S NUM=+NUM
 | 
|---|
| 82 |  I (NUM<LOW)!(NUM>HI) S MHY=U_V,QUIT=1 Q
 | 
|---|
| 83 |  S MHY="^"_NUM,QUIT=1
 | 
|---|
| 84 |  Q
 | 
|---|