# COMP and COMP-3 equivalent variables in Easytrieve

I suggest you to read Easytrieve variable declaration first to see how to declare variables in Easytrieve. That will give you a better idea about Easytrieve variable.

COMP in Cobol is a Binary variable.

It can be of 2 bytes, 4 bytes or 8 bytes.

COMP variables are always signed. It is also known as BINARY in cobol.

 COMP or BINARY Number of Bytes Easytrieve variable S9(1) COMP. .. S9(4) COMP. 9(1) COMP. .. 9(4) COMP. S9(1) BINARY. … S9(4) BINARY. 9(1) BINARY. .. 9(4) BINARY. 2 bytes WS-VAR W 2 B S9(5) COMP. .. S9(9) COMP. 9(5) COMP. .. 9(9) COMP. S9(5) BINARY. … S9(9) BINARY. 9(5) BINARY. .. 9(9) BINARY. 4 bytes WS-VAR W 4 B S9(10) COMP. .. S9(18) COMP. 9(10) COMP. .. 9(18) COMP. S9(10) BINARY. … S9(18) BINARY. 9(10) BINARY. .. 9(18) BINARY. 8 bytes WS-VAR W 8 B

COMP-3 or Packed decimal variables.
P stands for Packed – in Easytrieve variable declaration.
Length specified in Easytrieve always specifies the number of bytes occupied and not number of digits.
For eg,

` WS-VAR S9(3) COMP-3.`

will be occupying 2 bytes and the corresponding Easytrieve declaration is

` WS-VAR W 2 P 0 `

The zero after P specifies the number of digits after decimal point (implicit).

Another eg,

` WS-VAR S9(5)V99 COMP-3.`

will be occupying 4 bytes and the corresponding Easytrieve declaration is

` WS-VAR W 4 P 2`

The 2 is for the 2 digits after decimal point, and the 4 still means the total 4 bytes occupied. Note that the 2 is not 2 bytes and just specifies the 2 digits after decimal point.

## 5 thoughts on “COMP and COMP-3 equivalent variables in Easytrieve”

1. Lakshmi says:

Hi Karthik,

I am trying to access a VSAM file and the key for the same is defined as below:

DEFINE WS-vsam-KEY W 29 A
DEFINE WS-f1 WS-vsam-KEY 3 N
DEFINE WS-f2 WS-vsam–KEY +3 19 A
DEFINE WS-f3 WS-vsam–KEY +22 4 B 0
DEFINE WS-REC-TYPE WS-vsam–KEY +26 1 N VALUE 1
DEFINE WS-REC-NUMB WS-vsam–KEY +27 2 B

and I am reading a ps file INPS1 and getting the WS-f1,WS-f2 and WS-f3 values and I am moving 0 to WS-REC-NUMB by decalring a numeric variable.

and I know there is matching keys in the vsam file however the program is showing the file status as ’16’.

GET INPS1
WS-f1 = INPS1-f1
WS-f2 = INPS1-f2
WS-f3 = INPS1-f3

DO WHILE NOT EOF INPS1
if vsam-file : file-status eq 0
———
———
else
DISPLAY ‘FILE-STATUS’ FILE-STATUS

and the output is showing as below:

FILE-STATUS 16
and the ley is dispalyed as below:1411411113765100010800 1

Please suggest me how to handle the binary key fields while accesing a vsam file.I guess there is some issue with the way how I am accessing those because when I am trying to dispaly them using numeric fields the values are displayed correctly however while accessing it is saying the records not found.

Kindly provide some solution for this.

Lakshmi

2. Karthik says:

I’m not sure why it doesn’t work.
Instead of the below assignment statements, can you try MOVE statements?
WS-f1 = INPS1-f1
WS-f2 = INPS1-f2
WS-f3 = INPS1-f3

3. Lakshmy says:

Hi Karthik,

I got the solution,requirment states that the ws-f3 has to be multiplied by -1.After modifying the code as per that I was able to retrieve the records.

Thanks for the help.

Lakshmi

4. Senthil says:

I was getting a error while using Binary of size 8 byte ( s9(18) comp )
XX-SEC-ID 44 8 B
*******B097 LENGTH INVALID FOR TYPE – B

Is easytrieve does not allow binary field of size 8

This site uses Akismet to reduce spam. Learn how your comment data is processed.