18
votes

May I ask, what is the usage of the keyword REDEFINES in COBOL? I can not understand the manual's definition.

What is the meaning of the following code?

 01 WS_CHARGE_TXT_8X                             PIC X(08) VALUE "10000000".  
 01 WS_CHARGE_NUM_8 REDEFINES WS_CHARGE_TXT_8X.  
     05 WS_CHARGE_8                               PIC 9(05)V9(03).  

Thank you!

3

3 Answers

21
votes

Basically Redefines reuses the spaces so in the above example WS_CHARGE_TXT_8X and WS_CHARGE_8 will point to the same block of memory. This allows you to look at a block of memory in different ways, in this case the variable can be viewed as a text PIC X and a signed numeric PIC S9. The -8X to -8 in the variable name is just stylistic to indicate the variable is being recast to another type or format to other programmers.

In the above example

  • the value of WS_CHARGE_TXT_8X is "10000000"
  • the value of WS_CHARGE_8 is of 10000.000.

If you moved 123.456 to WS_CHARGE_8 the value of WS_CHARGE_TXT_8X "00123456".

A more useful example is

  03 Birth-Date-YYYYMMDD    pic 9(8).
  03 filler redefines Birth-Date-YYYYMMDD.
     05 Birth-Date-YYYY     pic 9(4).
     05 Birth-Date-MM       pic 99.
     05 Birth-Date-DD       pic 99.

In this case you can access the whole date Birth-Date-YYYYMMDD or the year / month / day individually (Birth-Date-YYYY etc).

3
votes

It is analogous to union in 'C'. It saves working storage space, and MOVE statements, and is also useful for transposing arrays of PIC(X), or accessing repeated fields as an array. In the OP's case a numeric "type" is being created for the char contents of the prototype field.

1
votes

A REDEFINES allows a different data description for storage which has already been defined.

That might be to allow entirely different data to be held there.

05  RL-AGENT-DATA.
...
05  RL-CUSTOMER-DATA REDEFINES RL-AGENT-DATA.
...

Or to give a description which allows a use of a part of the data, as in Bruce's example.

Or to use a piece of data that is the same, but for a different purpose:

05  INPUT-AMOUNT PIC X(10).
05  INPUT-AMOUNT-NUMERIC REDEFINES PIC 9(8)V99.

Whatever is in INPUT-AMOUNT it can be reported without problem, but only if it is a valid numeric (by testng it for NUMERIC), is INPUT-AMOUNT-NUMERIC used for some purpose.

Note that each 01 subsequent to the first under an FD is an "implicit REDEFINES".

Note also that items in the LINKAGE SECTION have the effect of "redefining" "something", even though if the address of the data is from a CALLing program, the definition is often the same as the original definition, and should usually at least match the PICtures of the original.