bug-gnucobol
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-GnuCOBOL] Binary allocations - -fbinary-size=2-4-8


From: Bruce Zupek
Subject: Re: [Bug-GnuCOBOL] Binary allocations - -fbinary-size=2-4-8
Date: Mon, 14 May 2018 22:12:08 -0400
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1

Below please find an analysis of BINARY / COMP-5 / COMP-X.
This analysis includes "odd" MF behavior where binary data fields are defined as PIC X(nn) as well as PIC 9(NN). MF wise PIC X(nn) COMP-5 COMP-X data declaration can participate in arithmetic operations.
The first analysis mimes GNU 1-2-4-8 behavior
The second analysis mimes GNU 2-4-8
The attached program will detail the PICTURE specifications as well as explain the displays below.

This attached program needs to be subset to compile successfully via Fujitsu - use of a PIC X(nn) field as a binary type is not understood by Fujitsu.
Bruce Zupek

LENGTH ANALYSIS WITH "NOIBMCOMP" - GNU = 1-2-4-8
LENGTH OF CX1 =0001
LENGTH OF CX2 =0002
LENGTH OF CX3 =0003
LENGTH OF CX4 =0004
LENGTH OF CX5 =0005
LENGTH OF CX6 =0006
LENGTH OF CX7 =0007
LENGTH OF CX8 =0008
LENGTH OF CX91 =0001
LENGTH OF CX92 =0001
LENGTH OF CX93 =0002
LENGTH OF CX94 =0002
LENGTH OF CX95 =0003
LENGTH OF CX96 =0003
LENGTH OF CX97 =0003
LENGTH OF CX98 =0004
LENGTH OF CX9P1 =0004
LENGTH OF CX9P2 =0005
LENGTH OF CX9P3 =0005
LENGTH OF CX9P4 =0005
LENGTH OF CX9P5 =0006
LENGTH OF CX9P6 =0006
LENGTH OF CX9P7 =0007
LENGTH OF CX9P8 =0007
LENGTH OF CX9P9 =0008
LENGTH OF 5CX9PA =0008
LENGTH OF 5CX1 =0001
LENGTH OF 5CX2 =0002
LENGTH OF 5CX3 =0003
LENGTH OF 5CX4 =0004
LENGTH OF 5CX5 =0005
LENGTH OF 5CX6 =0006
LENGTH OF 5CX7 =0007
LENGTH OF 5CX8 =0008
LENGTH OF 5CX91 =0001
LENGTH OF 5CX92 =0001
LENGTH OF 5CX93 =0002
LENGTH OF 5CX94 =0002
LENGTH OF 5CX95 =0003
LENGTH OF 5CX96 =0003
LENGTH OF 5CX97 =0003
LENGTH OF 5CX98 =0004
LENGTH OF 5CX9P1 =0004
LENGTH OF 5CX9P2 =0005
LENGTH OF 5CX9P3 =0005
LENGTH OF 5CX9P4 =0005
LENGTH OF 5CX9P5 =0006
LENGTH OF 5CX9P6 =0006
LENGTH OF 5CX9P7 =0007
LENGTH OF 5CX9P8 =0007
LENGTH OF 5CX9P9 =0008
LENGTH OF 5CX9PA =0008

ANALYSIS WITH IBMCOMP
GNU = 2-4-8
LENGTH OF CX1 =0001
LENGTH OF CX2 =0002
LENGTH OF CX3 =0003
LENGTH OF CX4 =0004
LENGTH OF CX5 =0005
LENGTH OF CX6 =0006
LENGTH OF CX7 =0007
LENGTH OF CX8 =0008
LENGTH OF CX91 =0001
LENGTH OF CX92 =0001
LENGTH OF CX93 =0002
LENGTH OF CX94 =0002
LENGTH OF CX95 =0003
LENGTH OF CX96 =0003
LENGTH OF CX97 =0003
LENGTH OF CX98 =0004
LENGTH OF CX9P1 =0004
LENGTH OF CX9P2 =0005
LENGTH OF CX9P3 =0005
LENGTH OF CX9P4 =0005
LENGTH OF CX9P5 =0006
LENGTH OF CX9P6 =0006
LENGTH OF CX9P7 =0007
LENGTH OF CX9P8 =0007
LENGTH OF CX9P9 =0008
LENGTH OF 5CX9PA =0008
LENGTH OF 5CX1 =0002
LENGTH OF 5CX2 =0002
LENGTH OF 5CX3 =0004
LENGTH OF 5CX4 =0004
LENGTH OF 5CX5 =0008
LENGTH OF 5CX6 =0008
LENGTH OF 5CX7 =0008
LENGTH OF 5CX8 =0016
LENGTH OF 5CX91 =0002
LENGTH OF 5CX92 =0002
LENGTH OF 5CX93 =0002
LENGTH OF 5CX94 =0002
LENGTH OF 5CX95 =0004
LENGTH OF 5CX96 =0004
LENGTH OF 5CX97 =0004
LENGTH OF 5CX98 =0004
LENGTH OF 5CX9P1 =0004
LENGTH OF 5CX9P2 =0008
LENGTH OF 5CX9P3 =0008
LENGTH OF 5CX9P4 =0008
LENGTH OF 5CX9P5 =0008
LENGTH OF 5CX9P6 =0008
LENGTH OF 5CX9P7 =0008
LENGTH OF 5CX9P8 =0008
LENGTH OF 5CX9P9 =0008
LENGTH OF 5CX9PA =0008


GNU Cobol Doucumentation

# Binary byte size - defines the allocated bytes according to PIC
# Value:         signed  unsigned  bytes
#                ------  --------  -----
# '2-4-8'        1 -  4    same        2
#                5 -  9    same        4
#               10 - 18    same        8
#
# '1-2-4-8'      1 -  2    same        1
#                3 -  4    same        2
#                5 -  9    same        4
#               10 - 18    same        8


On 5/14/2018 6:38 PM, Sergey Kashyrin wrote:

Hi Folks,

As a fastfix

In field.c in
validate_field_1
...
/* Validate USAGE */
for those:
        case CB_USAGE_SIGNED_CHAR:
        case CB_USAGE_UNSIGNED_CHAR:
instead of:
        f->usage = CB_USAGE_COMP_5;
do:
        f->usage = CB_USAGE_BINARY;
(we don't care about byteorder - it is 1 byte)

and then in compute_binary_size change
        if(f->flag_real_binary && size <= 2) {
to
        if(f->flag_real_binary && size <= 2 && f->usage != CB_USAGE_COMP_5) {


I think it should work, even looks not nice :-)

Regards,
Sergey


On 5/14/2018 12:49 PM, Simon Sobisch wrote:
I haven't checked IBMs docs on this but I assume the correct thing to do for std ibm and bs2000 would be to implement COMP-5 as different comp type. What does MicroFocus do in ibm mode?

Simon





On 5/14/2018 6:38 PM, Sergey Kashyrin wrote:

Hi Folks,

As a fastfix

In field.c in
validate_field_1
...
/* Validate USAGE */
for those:
        case CB_USAGE_SIGNED_CHAR:
        case CB_USAGE_UNSIGNED_CHAR:
instead of:
        f->usage = CB_USAGE_COMP_5;
do:
        f->usage = CB_USAGE_BINARY;
(we don't care about byteorder - it is 1 byte)

and then in compute_binary_size change
        if(f->flag_real_binary && size <= 2) {
to
        if(f->flag_real_binary && size <= 2 && f->usage != CB_USAGE_COMP_5) {


I think it should work, even looks not nice :-)

Regards,
Sergey


On 5/14/2018 12:49 PM, Simon Sobisch wrote:
I haven't checked IBMs docs on this but I assume the correct thing to do for std ibm and bs2000 would be to implement COMP-5 as different comp type. What does MicroFocus do in ibm mode?

Simon



Attachment: COMPLEN.CBL
Description: Text document


reply via email to

[Prev in Thread] Current Thread [Next in Thread]