| 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 | 
|---|