[613] | 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
|
---|