История изменений
Исправление vM, (текущая версия) :
следует рассмотреть cmd.exe как пример умственной инвалидности разработчиков M$ альтернативных оболочек в других ОС, которые, тем не менее, тоже используют концепцию кодов возврата и аргументов.
Коды возврата использовались до юникса в системах пакетной обработки, чтобы знать, на каком шаге прервать цепочку в задании Compile-Link-Go, и что делать, если что-то пойдёт не так, без физического присутствия пользователя и без вмешательства оператора.
//ASMFCLG PROC MAC='SYS1.MACLIB',MAC1='SYS1.MACLIB' 00050000
//ASM EXEC PGM=IFOX00,PARM=OBJ,REGION=128K 00100000
//SYSLIB DD DSN=&MAC,DISP=SHR 00150000
// DD DSN=&MAC1,DISP=SHR 00200000
//SYSUT1 DD DSN=&&SYSUT1,UNIT=SYSSQ,SPACE=(1700,(600,100)), 00250000
// SEP=(SYSLIB) 00300000
//SYSUT2 DD DSN=&&SYSUT2,UNIT=SYSSQ,SPACE=(1700,(300,50)), 00350000
// SEP=(SYSLIB,SYSUT1) 00400000
//SYSUT3 DD DSN=&&SYSUT3,UNIT=SYSSQ,SPACE=(1700,(300,50)) 00450000
//SYSPRINT DD SYSOUT=A,DCB=BLKSIZE=1089 00500000
//SYSPUNCH DD SYSOUT=B 00550000
//SYSGO DD DSN=&&OBJSET,UNIT=SYSSQ,SPACE=(80,(200,50)), 00600000
// DISP=(MOD,PASS) 00650000
//LKED EXEC PGM=IEWL,PARM=(XREF,LET,LIST,NCAL),REGION=128K, 00700000
// COND=(8,LT,ASM) 00750000
//SYSLIN DD DSN=&&OBJSET,DISP=(OLD,DELETE) 00800000
// DD DDNAME=SYSIN 00850000
//SYSLMOD DD DSN=&&GOSET(GO),UNIT=SYSDA,SPACE=(1024,(50,20,1)), 00900000
// DISP=(MOD,PASS) 00950000
//SYSUT1 DD DSN=&&SYSUT1,UNIT=(SYSDA,SEP=(SYSLIN,SYSLMOD)), 01000000
// SPACE=(1024,(50,20)) 01050000
//SYSPRINT DD SYSOUT=A 01100000
//GO EXEC PGM=*.LKED.SYSLMOD,COND=((8,LT,ASM),(4,LT,LKED)) 01150000
Если интерактивный пользователь физически присутствует и может наблюдать вывод программы, то ему лучше сообщить об ошибке человечьим языком, а не невидимым RC.
Исходная версия vM, :
следует рассмотреть cmd.exe как пример умственной инвалидности разработчиков M$ альтернативных оболочек в других ОС, которые, тем не менее, тоже используют концепцию кодов возврата и аргументов.
Коды возврата использовались до юникса в системах пакетной обработки, чтобы знать, на каком шаге прервать цепочку в задании Compile-Ling-Go, и что делать, если что-то пойдёт не так, без физического присутствия пользователя и без вмешательства оператора.
//ASMFCLG PROC MAC='SYS1.MACLIB',MAC1='SYS1.MACLIB' 00050000
//ASM EXEC PGM=IFOX00,PARM=OBJ,REGION=128K 00100000
//SYSLIB DD DSN=&MAC,DISP=SHR 00150000
// DD DSN=&MAC1,DISP=SHR 00200000
//SYSUT1 DD DSN=&&SYSUT1,UNIT=SYSSQ,SPACE=(1700,(600,100)), 00250000
// SEP=(SYSLIB) 00300000
//SYSUT2 DD DSN=&&SYSUT2,UNIT=SYSSQ,SPACE=(1700,(300,50)), 00350000
// SEP=(SYSLIB,SYSUT1) 00400000
//SYSUT3 DD DSN=&&SYSUT3,UNIT=SYSSQ,SPACE=(1700,(300,50)) 00450000
//SYSPRINT DD SYSOUT=A,DCB=BLKSIZE=1089 00500000
//SYSPUNCH DD SYSOUT=B 00550000
//SYSGO DD DSN=&&OBJSET,UNIT=SYSSQ,SPACE=(80,(200,50)), 00600000
// DISP=(MOD,PASS) 00650000
//LKED EXEC PGM=IEWL,PARM=(XREF,LET,LIST,NCAL),REGION=128K, 00700000
// COND=(8,LT,ASM) 00750000
//SYSLIN DD DSN=&&OBJSET,DISP=(OLD,DELETE) 00800000
// DD DDNAME=SYSIN 00850000
//SYSLMOD DD DSN=&&GOSET(GO),UNIT=SYSDA,SPACE=(1024,(50,20,1)), 00900000
// DISP=(MOD,PASS) 00950000
//SYSUT1 DD DSN=&&SYSUT1,UNIT=(SYSDA,SEP=(SYSLIN,SYSLMOD)), 01000000
// SPACE=(1024,(50,20)) 01050000
//SYSPRINT DD SYSOUT=A 01100000
//GO EXEC PGM=*.LKED.SYSLMOD,COND=((8,LT,ASM),(4,LT,LKED)) 01150000
Если интерактивный пользователь физически присутствует и может наблюдать вывод программы, то ему лучше сообщить об ошибке человечьим языком, а не невидимым RC.