Search code examples
cobolline-numberscobol85

Getting current line number in Cobol


Is it possible to get and display the current line number in the Cobol program? For example, C allows do it by the next way:

...
printf("Current line = %d\n", __LINE__);
...

Solution

  • Short answer: No.
    There is no portable COBOL way in doing this, especially not in all places like __LINE__ does.

    Long answer with potential alternatives:
    COBOL 2002 added intrinsic functions for exception handling. Using these you can get the location where the last error happened, which checks are activated.
    You could hack something by raising a non-fatal exception and ideally in the same line use that function... From the standard:

    The EXCEPTION-LOCATION function returns an alphanumeric character string, part of which is the implementor-defined location of the statement associated with the last exception status.

    So this may provide you with the line number, as the returned value depends on the implementation, additional it seems that - at the time of writing - neither IBM nor MicroFocus nor Fujitsu compilers support that intrinsic function at all. The GnuCOBOL implementation returns a semicolon-separated list with the last entry being the line number.

    The upcoming COBOL standard added the MODULE-NAME intrinsic function - but this will only give the name, not the line reference.

    If you are free to choose which implementation you use, then an addition of an extra register COB_SOURCE_LINE / COB_SOURCE_FILE in GnuCOBOL should be relative easy to add...

    If the intend is a tracing of some kind: many compilers have an extension READY TRACE/ RESET TRACE. With those two statements (and possibly compiler directives / options) they will at least show the name of sections and paragraphs reached, some may also show the line number. Often this could be redirected to a file and will otherwise go to the default error stream.
    If you use GnuCOBOL and compile with -ftrace-all you can also use that for line or statement tracing with self-defined format as specified in COB_TRACE_FORMAT [which can also be adjusted within the COBOL program and limited to the line number].