[623] | 1 | XGKB ;SFISC/VYD - Read with Escape Processing ;07/10/2002 10:58
|
---|
| 2 | ;;8.0;KERNEL;**34,244**;Jul 10, 1995
|
---|
| 3 | ;;Special thanks to MELDRUM.KEVIN@ISC-SLC.VA.GOV
|
---|
| 4 | ;
|
---|
| 5 | INIT(XGTRM) ;turn escape processing on and passed terminator string if any
|
---|
| 6 | N %,%OS S %OS=^%ZOSF("OS")
|
---|
| 7 | I %OS["VAX DSM" U $I:(NOLINE:ESCAPE) D:'$D(^XUTL("XGKB")) VAXDSM^XGKB1
|
---|
| 8 | I %OS["MSM" U $I:(0::::64) D:'$D(^XUTL("XGKB")) MSM^XGKB1
|
---|
| 9 | I %OS["DTM" U $I:(VT=1:ESCAPE=1) D:'$D(^XUTL("XGKB")) DTM^XGKB1
|
---|
| 10 | I %OS["OpenM" U $I:(:"CT") D:'$D(^XUTL("XGKB")) DTM^XGKB1
|
---|
| 11 | I %OS["GT.M" U $I:(ESCAPE) D:'$D(^XUTL("XGKB")) GTM^XGKB1
|
---|
| 12 | I $G(XGTRM)="*" X ^%ZOSF("TRMON") I 1 ;turn all on
|
---|
| 13 | E I $L($G(XGTRM)) S %=$$SETTRM^%ZOSV(XGTRM) ;turn on passed terminators
|
---|
| 14 | S XGRT=""
|
---|
| 15 | Q
|
---|
| 16 | ;
|
---|
| 17 | ;
|
---|
| 18 | EXIT ; Reset device (disable escape processing, turn terminators off)
|
---|
| 19 | N %OS S %OS=^%ZOSF("OS")
|
---|
| 20 | I %OS["VAX DSM" U $I:(LINE:NOESCAPE)
|
---|
| 21 | I %OS["MSM" U $I:(0:::::64)
|
---|
| 22 | I %OS["DTM" U $I:(ESCAPE=0)
|
---|
| 23 | I %OS["GT.M" U $I:(NOESCAPE)
|
---|
| 24 | X ^%ZOSF("TRMOFF")
|
---|
| 25 | K XGRT
|
---|
| 26 | Q
|
---|
| 27 | ;
|
---|
| 28 | ;
|
---|
| 29 | ACTION(XGKEY,XGACTION) ;add or remove key-action
|
---|
| 30 | ;XGKEY:key mnemonic ("F10","NEXT",etc.)
|
---|
| 31 | ;XGACTION:M executable string
|
---|
| 32 | ;if action is passed ADD mode is assumed otherwise REMOVE
|
---|
| 33 | I $D(XGACTION) S ^TMP("XGKEY",$J,XGKEY)=XGACTION
|
---|
| 34 | E K ^TMP("XGKEY",$J,XGKEY)
|
---|
| 35 | Q
|
---|
| 36 | ;
|
---|
| 37 | ;
|
---|
| 38 | READ(XGCHARS,XGTO) ; read XGCHARS using escape processing. XGTO timeout (optional). Result returned.
|
---|
| 39 | ; Char that terminated the read will be in XGRT
|
---|
| 40 | N S,XGW1,XGT1,XGSEQ ;string,window,timer,timer sequence
|
---|
| 41 | K DTOUT
|
---|
| 42 | S XGRT=""
|
---|
| 43 | D:$G(XGTO)="" ;set timeout value if one wasn't passed
|
---|
| 44 | . I $D(XGT) D Q ;if timers are defined
|
---|
| 45 | . . S XGTO=$O(XGT(0,"")) ;get shortest time left of all timers
|
---|
| 46 | . . S XGW1=$P(XGT(0,XGTO,$O(XGT(0,XGTO,"")),"ID"),U,1) ;get timer's window
|
---|
| 47 | . . S XGT1=$P(XGT(0,XGTO,$O(XGT(0,XGTO,"")),"ID"),U,3) ;get timer's name
|
---|
| 48 | . I $D(XGW) S XGTO=99999999 Q ;in emulation read forever
|
---|
| 49 | . S XGTO=$G(DTIME,600)
|
---|
| 50 | ;
|
---|
| 51 | I $G(XGCHARS)>0 R S#XGCHARS:XGTO S:'$T DTOUT=1 I 1 ;fixed length read
|
---|
| 52 | E R S:XGTO S:'$T DTOUT=1 I 1 ;read as many as possible
|
---|
| 53 | S:$G(DTOUT)&('$D(XGT1)) S=U ;stuff ^
|
---|
| 54 | ;
|
---|
| 55 | S:$L($ZB) XGRT=$G(^XUTL("XGKB",$ZB)) ;get terminator if any
|
---|
| 56 | I $G(DTOUT),$D(XGT1),$D(^TMP("XGW",$J,XGW1,"T",XGT1,"EVENT","TIMER")) D I 1 ;if timed out
|
---|
| 57 | . D E^XGEVNT1(XGW1,"T",XGT1,"","TIMER")
|
---|
| 58 | E I $L(XGRT),$D(^TMP("XGKEY",$J,XGRT)) X ^(XGRT) ;do some action
|
---|
| 59 | ; this really should be handled by keyboard mapping -- later
|
---|
| 60 | Q S
|
---|
| 61 | ;
|
---|
| 62 | ;
|
---|
| 63 | TEST F S X=$$READ Q:X["^" W ?20,X,?40,XGRT,?60,$ZB,!
|
---|
| 64 | Q
|
---|