| 1 | DENTDSE ;WISC/MLH-DENTAL SCREEN HANDLER-PROCESS FIELD > 80 CHAR IN LENGTH ;9/1/92  10:26 | 
|---|
| 2 | ;;1.2;DENTAL;***15**;Oct 08, 1992 | 
|---|
| 3 | RESPONSE(MHX,MHFL,MHDX,MHDY) ;    process a response from the user | 
|---|
| 4 | N DX,DY,DEHAR,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 | FOR  D RD Q:QUIT  D:DEHAR>31!(DEHAR=126) PROC Q:QUIT  ;    don't process control chars or tilde | 
|---|
| 14 | ; | 
|---|
| 15 | ;    did user enter anything? | 
|---|
| 16 | I MHY="" S MHY=MHX ;    nope, default to input | 
|---|
| 17 | S X=+$G(IOM) X ^%ZOSF("RM") ;    reset margin | 
|---|
| 18 | X ^%ZOSF("EON") ;    echo on | 
|---|
| 19 | QUIT MHY_"~"_(QUIT'=2) ;    second piece indicates a timeout | 
|---|
| 20 | ; | 
|---|
| 21 | RD ;    read one character | 
|---|
| 22 | R *DEHAR:DTIME | 
|---|
| 23 | IF DEHAR'=-1,DEHAR'=13,DEHAR'=27 | 
|---|
| 24 | E  S QUIT=$S(DEHAR=-1:2,1:1) ;    bailout (QUIT=1) or timeout (QUIT=2) | 
|---|
| 25 | Q | 
|---|
| 26 | ; | 
|---|
| 27 | PROC ;    process one character | 
|---|
| 28 | I DEHAR'=127 D  ;    process ordinary character | 
|---|
| 29 | .  D PROCCHAR | 
|---|
| 30 | E  I MHY'="" D PROCDEL ;    process <DELETE> if possible | 
|---|
| 31 | ;I $L(MHY)'<MHFL S QUIT=1 | 
|---|
| 32 | Q | 
|---|
| 33 | ; | 
|---|
| 34 | PROCCHAR ;    process ordinary character | 
|---|
| 35 | IF $L(MHY)<MHFL D  ;    not at the end yet | 
|---|
| 36 | .  W $C(DEHAR) | 
|---|
| 37 | .  I MHDX<79 S MHDX=MHDX+1 | 
|---|
| 38 | .  E  S (DY,MHDY)=MHDY+1,(DX,MHDX)=0 X IOXY | 
|---|
| 39 | .  S MHY=MHY_$C(DEHAR) | 
|---|
| 40 | .  Q | 
|---|
| 41 | ELSE  D  ;    we're at the end, start overwriting | 
|---|
| 42 | .  W *8,*7,$C(DEHAR) ;    get rid of the last char | 
|---|
| 43 | .  S $E(MHY,MHFL)=$C(DEHAR) | 
|---|
| 44 | .  Q | 
|---|
| 45 | ;END IF | 
|---|
| 46 | ; | 
|---|
| 47 | Q | 
|---|
| 48 | ; | 
|---|
| 49 | PROCDEL ;    process <DELETE> | 
|---|
| 50 | I MHDX>0 W $C(8,32,8) S MHDX=MHDX-1 | 
|---|
| 51 | E  S (DX,MHDX)=79,(DY,MHDY)=MHDY-1 X IOXY W " " | 
|---|
| 52 | S MHY=$E(MHY,1,$L(MHY)-1) | 
|---|
| 53 | Q | 
|---|
| 54 | ; | 
|---|
| 55 | MLH ;TEST TAG | 
|---|
| 56 | W @IOF S TEST=$$^DENTDSE($G(TEST),110,0,10) | 
|---|
| 57 | Q | 
|---|