Re: Alternative COBOL "telco" source program

From: Robert Wagner (robert.deletethis_at_wagner.net)
Date: 05/30/04

  • Next message: docdwarf_at_panix.com: "Re: OT: big whoops"
    Date: Sun, 30 May 2004 11:55:20 GMT
    
    

    LX-i <lxi0007@netscape.net> wrote:

    > when I
    >discovered that I could put a value clause on a group item, it changed
    >the way I defined tables (and other 01-level items). With my compiler,
    >there is a caveat (not sure if it's standard-imposed or not) - you can't
    >use a usage clause under a group level item with a value clause. So,
    >for my bit-switches, I can't say...
    >
    >01 MySwitches value zeroes.
    > 12 pic 1 binary-1.
    >
    >...which kind of stinks, but I can understand the limitation as well.

    Group names are implicitly pic x. It's an error to initialize bit/binary/packed
    variables with F0 (EBCDIC) or 30 (ASCII). It's common for compilers to disallow
    that value while permitting 'move zeroes to MySwitches'. Go figure.

    I use Value only to initialize constants i.e. fields that will never change.
    With regular variables, there are at least two potential bugtraps. One is the
    Initialize verb which, according to the '85 Standard, does not use your Values.
    The other is the operating system or Cobol runtime handling of called programs.
    If the caller does a Cancel, Values will be there on the next Call. But if the
    caller forgets or abends or someone else calls your .dll, they probably won't
    be.

    A third, less common, problem is Local-Storage. As discussed here, Micro Focus
    used to leave it uninitialized. It didn't issue a warning about Value clauses,
    as it would in Linkage-Section, it just didn't use them. That's now fixed, but
    there's a chance the shop's production compiler is older than its development
    version, or another shop is using an old one.

    For these reasons, I put 'individual' variables under a group name (rather than
    using 77 or 01) and initialize it with 'move low-values to
    unqualified-variables'.

    FWIW, 'pic 1' seems like sufficient information for the compiler to define one
    bit. It is on the AS/400. If your compiler makes you also write 'binary-1', that
    seems redundant.


  • Next message: docdwarf_at_panix.com: "Re: OT: big whoops"

    Relevant Pages

    • Re: Alternative COBOL "telco" source program
      ... >>use a usage clause under a group level item with a value clause. ... > I use Value only to initialize constants i.e. fields that will never change. ... > If the caller does a Cancel, Values will be there on the next Call. ... 'pic 1' seems like sufficient information for the compiler to define one ...
      (comp.lang.cobol)
    • Re: INITIALIZE
      ... INITIALIZE D99 ALL TO VALUE ... creates a unique data item; ... not have a VALUE clause. ...
      (comp.lang.cobol)
    • Re: "User-Defined Assignment" question
      ... Per clause 10, Initialize is only called on objects that are initialized by default, not when they're explicitly initialized. ... omb jor ers @sv ge. ... r o.b n.p son eri nu ...
      (comp.lang.ada)
    • Re: Default rep specs for record types - documented??
      ... Most importantly, the compiler ... This representation clause requires that Field_1 ... > that a record layout matches some external data format. ...
      (comp.lang.ada)
    • Re: D7 Order of Initialization
      ... Delphi's compiler attempts to resolve scope in function calls. ... clause works backwards for resolving scope. ... > I'm am getting the reverse order of initialization routines on program ...
      (borland.public.delphi.language.objectpascal)