> Am 20.03.2025 um 21:50 schrieb James K. Lowden:
>> On Mar 13, 2025, at 8:04 AM, Simon Sobisch <simonsobi...@gnu.org> wrote:
>>>
>>> exit() allows us to "pass to the operating system" directly; but it doesn't 
>>> directly say "success" or "fail".
>>>
>>>
>>> Obviously the statements
>>>    STOP RUN WITH NORMAL STATUS 41
>>> and
>>>    STOP RUN ERROR 41
>>>
>>> Should have a different result for the operating system.
>> Or, obviously not.
>> For OSes I'm familiar with, there is no *definition* of
>> success/failure.  There's just convention: 0 is success and nonzero
>> failure.  Even that is honored in the breach, see diff(1).
>> IMO unless the OS defines success/failure outside the value of the
>> exit status value (above, 41), the COBOL compiler cannot supply
>> meaning to STOP RUN NORMAL or ERROR.  It has no meaning in COBOL
>> because it has no meaning outside COBOL.
>> By that reasoning, the two statements above both return 41 because
>> there is no way to say more.  It is for the caller to decide what to
>> do.
>> I do not think -41 is an option; the compiler should not make
>> arbitrary changes to the user's data.
>> It is temping to raise(SIG_TERM) for error, but again the 41 is
>> lost.
>> 
>>> STOP RUN WITH ERROR "Don't do that, Jon!"
>> When no numeric value is supplied, IMO:
>>      • STOP RUN WITH NORMAL STATUS becomes exit(EXIT_SUCCESS)
>>      • STOP RUN WITH ERROR becomes exit(EXIT_FAILURE)
>> That satisfies the Principle of Least Astonishment.  BTW those
>> values are defined by C, not POSIX.
>> --jkl
>
>
> I agree that this could be a reasonable approach:
> * STOP RUN WITH NORMAL STATUS becomes exit(EXIT_SUCCESS)
> * STOP RUN WITH ERROR becomes exit(EXIT_FAILURE)
> * Any text given goes to an internal DISPLAY (_possibly_ WITH ERROR
>   doing a DISPLAY UPON SYSERR)
>
> If I'd not now that "some heavy business applications" actually pass
> the error using specific values (one for deadlock, another for general
> db issues, one for logic issues, ...) I'd say "screw the numbers -
> just DISPLAY them".

So:

  STOP RUN
  EXIT PROGRAM

  should:

  exit (EXIT_SUCCESS).

Then:

  STOP RUN WITH NORMAL STATUS <number>

  should:

  fprintf (stderr, "STOPPED WITH NORMAL STATUS %d", number);
  exit (EXIT_SUCCESS);

Then:

  STOP RUN WITH ERROR STATUS <number>

  should:

  fprintf (stderr, "STOPPED WITH ERROR STATUS %d", number);
  exit (EXIT_FAILURE);

?

> But a combined option would be possible as well:
>
> * output a text of "STOP ... WITH ERROR" is then noted by still doing
>   exit(number_given_if_none_then_EXIT_FAILURE), but always after an
>   internal DISPLAY "STOP WITH ERROR[ nr][: message]" UPON SYSERR"
> * output a text of "STOP ... WITH NORMAL STATUS" is then noted by
>   still doing  exit(number_given_if_none_then_EXIT_SUCCESS),
>   and (possibly only in case of a text or number given) an internal
>   DISPLAY "STOP WITH NORMAL STATUS[ nr][: message]" UPON SYSOUT"
>
> Opinions?

Reply via email to