Thursday, January 11, 2024

Set screen field attribute using P Field


DSPATR(&program-to-system-field)

The program-to-system-field parameter is required and specifies that the named field must be defined in the record format, alphanumeric (A in position 35), length of one, and usage P (P in position 38). The program uses this P-field to set the display attribute for the field this DSPATR keyword applies to.The name P-field is used for multiple fields with the record being defined. One DSPATR P-field is allowed per field. The P-field contains the display attribute and identifies whether the field should be protected.

Valid P-field values

The DSPATR P-field does not support the following display attributes:

  • MDT - Set changed data tag when displayed
  • OID   - Operator identification
  • PC     - Position cursor
  • SP      - Select by light pen

Valid P-field values (nonprotect)

Hex

Limited color

Full color

20

Normal

Green

21

Reverse image

Green, reverse image

22

High intensity

White

23

High intensity, reverse image

White, reverse image

24

Underscore

Green, underscore

25

Underscore, reverse image

Green, underscore, reverse image

26

Underscore, high intensity

White, underscore

27

Nondisplay

Nondisplay

28

Blink

Red

29

Blink, reverse image

Red, reverse image

2A

Blink, high intensity

Red, high intensity

2B

Blink, high intensity, reverse image

Red, high intensity, reverse image

2C

Blink, underscore

Red, underscore

2D

Blink, underscore, reverse image

Red, underscore, reverse image

2E

Blink, underscore, high intensity

Red, underscore, blink

2F

Nondisplay

Nondisplay

30

Column separator

Turquoise, column separator

31

Reverse image, column separator

Turquoise, column separator, reverse image

32

High intensity, column separator

Yellow, column separator

33

High intensity, reverse image, column separator

White, reverse image, column separator

34

Underscore, column separator

Turquoise, underscore, column separator

35

Underscore, reverse image, column separator

Turquoise, underscore, reverse image, column separator

36

Underscore, high intensity, column separator

Yellow, underscore, column separator

37

Nondisplay

Nondisplay

38

Blink, column separator

Pink

39

Blink, reverse image, column separator

Pink, reverse image

3A

Blink, high intensity, column separator

Blue

3B

Blink, high intensity, reverse image, column separator

Blue, reverse image

3C

Blink, underscore, column separator

Pink, underscore

3D

Blink, underscore, reverse image, column separator

Pink, underscore, reverse image

3E

Blink, underscore, high intensity, column separator

Blue, underscore

3F

Nondisplay

Nondisplay    


Valid P-field values (protect)

Hex

Limited color

Full color

A0

Normal

Green

A1

Reverse image

Green, reverse image

A2

High intensity

White

A3

High intensity, reverse image

White, reverse image

A4

Underscore

Green, underscore

A5

Underscore, reverse image

Green, underscore, reverse image

A6

Underscore, high intensity

White, underscore

A7

Nondisplay

Nondisplay

A8

Blink

Red

A9

Blink, reverse image

Red, reverse image

AA

Blink, high intensity

Red, high intensity

AB

Blink, high intensity, reverse image

Red, high intensity, reverse image

AC

Blink, underscore

Red, underscore

AD

Blink, underscore, reverse image

Red, underscore, reverse image

AE

Blink, underscore, high intensity

Red, underscore, blink

AF

Nondisplay

Nondisplay

B0

Column separator

Turquoise, column separator

B1

Reverse image, column separator

Turquoise, column separator, reverse image

B2

High intensity, column separator

Yellow, column separator

B3

High intensity, reverse image, column separator

White, reverse image, column separator

B4

Underscore, column separator

Turquoise, underscore, column separator

B5

Underscore, reverse image, column separator

Turquoise, underscore, reverse image, column separator

B6

Underscore, high intensity, column separator

Yellow, underscore, column separator

B7

Nondisplay

Nondisplay

B8

Blink, column separator

Pink

B9

Blink, reverse image, column separator

Pink, reverse image

BA

Blink, high intensity, column separator

Blue

BB

Blink, high intensity, reverse image, column separator

Blue, reverse image

BC

Blink, underscore, column separator

Pink, underscore

BD

Blink, underscore, reverse image, column separator

Pink, underscore, reverse image

BE

Blink, underscore, high intensity, column separator

Blue, underscore

BF

Nondisplay

Nondisplay


In DDSSRC:
A* First declare the variable 
 A                PFLD1           1A  P
 A*
 A* then, after the display field in function limit you assign it
 A*
 A                FIELD01       14Y 2B 17 42EDTCDE(1)    
 A                                          DSPATR(&PFLD1)

In RPGSRC, just set or clear when you need it:
C* 
C* Set the hex value in the QDDSSRC variable
C                       EVAL      PFLD1 = x'A0'
C*
C* Clear the variable
C                   CLEAR                   PFLD1              1

The following example shows how to specify the DSPATR keyword with P-field usage:
|...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
     A          R RECORD                   
     A            FLD1           5A     2  6DSPATR(&PFLD1)
     A            FLD2           5A     2  6DSPATR(&PFLD2)
     A            PFLD1          1A  P
     A            PFLD2          1A  P
     A

There is another technique which might interest you, and that is the DDS keyword DSPATR() used with a program to system field.  Instead of communicating with the display file via indicators, you can set the attributes .

Sample source code:

A                                      CF03(03 'Exit')
A*
A          R DSPFR                     TEXT('Display file examples')
A                                      BLINK
A*
A                                  9  2'Some input'
A                                      DSPATR(HI UL)
A            FLDA          10   B 10  2TEXT('Generic input/output')
A                                      DSPATR(&FLDAATR)
A            FLDB          20   B 11  2TEXT('Generic input/output')
A                                      DSPATR(&FLDBATR)
A            FLDAATR        1   P
A            FLDBATR        1   P

*****************************************************
H debug option(*srcstmt: *nodebugio)
H actgrp('QILE') dftactgrp(*no)
 * dbgview(*list)

 * Show use of program to system attribute field

fdspfatr   cf   e             workstn

 * work variables
d atr             s                   like(fldaatr)

 * field attribute bit patterns
d NO              s              1a   inz(x'00')
no attrs
d RI              s              1a   inz(x'01')
reverse
d HI              s              1a   inz(x'02')
highlight
d UL              s              1a   inz(x'04')
underline
d ND              s              1a   inz(x'07')
non display
d BL              s              1a   inz(x'08')
blink
d NP              s              1a   inz(x'20')
non protect
d CS              s              1a   inz(x'30')
column sep
d PR              s              1a   inz(x'80')
protect

d setAtr          pr                  like(atr)
d  inpFld                       50    const

c                   dow       *in03 = *off
c                   exfmt     dspfr
c   03              leave
c                   exsr      process
c                   enddo

c                   eval      *inLR = *On

 * ===========================================================
c     process   begsr

 * Top field to specify the colour of the bottom field, vice versa
c                   eval      FLDAATR = setAtr(FLDB)
c                   eval      FLDBATR = setAtr(FLDA)
c                   endsr

 * ===========================================================
p setAtr          b
d setAtr          pi                  like(atr)
d  inpFld                       50    const

d Wrk_fld         s                   like(atr)

 * reset all attributes
c                   eval      Wrk_fld         = NP

c                   select
c                   when      inpFld = 'RI'
c                   biton     RI            Wrk_fld         
c                   when      inpFld = 'HI'
c                   biton     HI            Wrk_fld         
c                   when      inpFld = 'UL'
c                   biton     UL            Wrk_fld         
c                   when      inpFld = 'BL'
c                   biton     BL            Wrk_fld         
c                   when      inpFld = 'CS'
c                   biton     CS            Wrk_fld         
c                   endsl

c                   return    Wrk_fld         

 p                 e