1 | XGSA ;SFISC/VYD - screen attribute primitives ;03/15/95 13:50
|
---|
2 | ;;8.0;KERNEL;;Jul 10, 1995
|
---|
3 | SET(XGNEWATR) ;set screen attributes return only the ESC codes
|
---|
4 | ;ABSOLUTE setting of screen attributes to new attributes regadless
|
---|
5 | ;of prev state. For relative change use CHG
|
---|
6 | ;XGNEWATR=char represents what all attributes should become ex: R1B0
|
---|
7 | ;XGCURATR=state of all current attributes in form of a char
|
---|
8 | S XGCURATR=XGNEWATR ;set curr attr var
|
---|
9 | Q ^XUTL("XGATR",XGNEWATR)
|
---|
10 | ;
|
---|
11 | CHG99(XGATR) ;XGATR=passed attribute string ie: R1B0G1
|
---|
12 | ;RELATIVE change of screen attributes to the new ones. Only changes attributes that were passed, retains others. For ABSOLUTE set use SET
|
---|
13 | N X,%,XGATRLTR,XGATRNO,XGCURBIN,XGESC,XGONOFF
|
---|
14 | ;S XGCURBIN=$$CNV(XGCURATR)
|
---|
15 | S XGCURBIN=^XUTL("XGATR1",XGCURATR)
|
---|
16 | ;parse passed string, generate ESC codes
|
---|
17 | F %=1:2:$L(XGATR) S XGATRLTR=$E(XGATR,%),XGONOFF=$E(XGATR,%+1) D
|
---|
18 | . I XGATRLTR'="E" D ;continue if not EMPTY
|
---|
19 | . . S XGATRNO=$F("BIRDGU",XGATRLTR) ;get attr # to match in XGATRSET
|
---|
20 | . . S $E(XGCURBIN,XGATRNO)=XGONOFF ;chg bin str
|
---|
21 | . E S XGCURBIN="00000001" ;EMPTY attr clears everything
|
---|
22 | ;in case all prev attr got turned off, turn on EMPTY attr
|
---|
23 | S $E(XGCURBIN,8)=$S($E(XGCURBIN,1,7)[1:0,1:1)
|
---|
24 | ;S XGCURATR=$$CNV(XGCURBIN)
|
---|
25 | S XGCURATR=^XUTL("XGATR1",XGCURBIN)
|
---|
26 | Q ^XUTL("XGATR",XGCURATR) ;return escape sequence
|
---|
27 | ;
|
---|
28 | ;
|
---|
29 | CHG(XGATR) ;XGATR=passed attribute string ie: R1B0G1
|
---|
30 | ;RELATIVE change of screen attributes to the new ones. Only changes attributes that were passed, retains others. For ABSOLUTE set use SET
|
---|
31 | N X,%,XGATRLTR,XGATRASC,XGBIT,XGONOFF
|
---|
32 | S XGATRASC=$A(XGCURATR)
|
---|
33 | F %=1:2:$L(XGATR) S XGATRLTR=$E(XGATR,%),XGONOFF=$E(XGATR,%+1) D
|
---|
34 | . I XGATRLTR'="E" D ;continue if not EMPTY
|
---|
35 | . . S XGBIT=2**($F("UGDRIB",XGATRLTR)-1) ;bit mask
|
---|
36 | . . ;if attribute bit needs to change add/subtract the mask
|
---|
37 | . . S:(XGATRASC\XGBIT#2)'=XGONOFF XGATRASC=XGATRASC+$S(XGONOFF=0:-XGBIT,1:XGBIT)
|
---|
38 | . E S XGATRASC=1 ;EMPTY attr clears everything
|
---|
39 | S:XGATRASC=0 XGATRASC=1 ;if all attr got turned off, turn on EMPTY attr
|
---|
40 | S XGCURATR=$C(XGATRASC)
|
---|
41 | Q ^XUTL("XGATR",XGCURATR) ;return escape sequence
|
---|
42 | ;
|
---|
43 | ;
|
---|
44 | STAT(XGATR) ;returns the state of a specific attribute
|
---|
45 | ;XGATR is the attribute mnemonic character. Possible values are
|
---|
46 | ;B-blinking, I-high intensity, R-reverse, D-double wide, G-graphics
|
---|
47 | ;U-underline, E-empty
|
---|
48 | Q $A(XGCURATR)\(2**($F("EUGDRIB",XGATR)-2))#2
|
---|
49 | ;
|
---|
50 | ;
|
---|
51 | ESC(XGATR) ;return ESC codes of all attributes in XGATR
|
---|
52 | ;XGATR=char represents what all attributes should be ex: R1B0
|
---|
53 | N %,XGESC,X,XGBIN
|
---|
54 | I XGATR'=XGEMPATR D ;if setting to other than EMPTY attribute
|
---|
55 | .;get binary representation of CURRENTATTRIBUTES and NEWATTRIBUTES
|
---|
56 | .S XGBIN=$$CNV(XGATR)
|
---|
57 | .S XGESC=IORESET D ;turn off all attr & process only 1s to turn on
|
---|
58 | ..F %=2:1:7 S X=$E(XGBIN,%) S:X XGESC=XGESC_$P(XGATRSET(%),U,2)
|
---|
59 | E S XGESC=IORESET
|
---|
60 | Q XGESC
|
---|
61 | ;
|
---|
62 | ;
|
---|
63 | CNV(ATR) ;convert attribute from character to binary and vice-versa
|
---|
64 | ;if $L(ATR)=8 then binary format is passed and character returned
|
---|
65 | ;if $L(ATR)=1 then character format is passed and binary str returned
|
---|
66 | N X,Y
|
---|
67 | I $L(ATR)=1 S X=$A(ATR),Y="" F S Y=(X#2)_Y,X=X\2 I 'X S Y=$E(100000000+Y,2,9) Q
|
---|
68 | E S Y="" F X=1:1:8 S Y=Y*2+$E(ATR,X)
|
---|
69 | E S Y=$C(Y)
|
---|
70 | Q Y
|
---|