Errorlevel in Programmiersprache checken

Viele Programmiersprachen bieten eine komfortable DOS-Shell, damit Sie z. B. in eigenen Anwendungen beliebige DOS-Kommandos ausführen können. Leider wurde jedoch häufig ein wichtiger Punkt vergessen: Das Überprüfen des Errorlevels ist nur auf der DOS-Ebene, beispielsweise in Stapeljobs möglich. In einigen Hochsprachen haben Sie keine Chance, an den Errorlevel heranzukommen. ERRORCHK.DEB ruft ein beliebiges Programm mit gleichzeitiger Übergabe zusätzlicher Parameter auf und ermittelt nach seiner Beendigung den Errorlevel. Das Ergebnis gelangt als Dezimalzahl mit abschließenden Return in den Tastaturpuffer, den Sie bei Bedarf mit einer beliebigen Eingaberoutine, beispielsweise mit dem INPUT-Befehl in Basic auswerten können. In GW-Basic könnte ein Aufruf z. B. so aussehen:</p>

10 SHELL "ERRORCHK DSKSPACE.COM A:4711"
20 INPUT ERGEBNIS$
30 IF ERGEBNIS$="-1"  PRINT "Fehler!"
40 IF ERGEBNIS$="0"   GOSUB 1000
50 IF ERGEBNIS$="255" GOSUB 1255
60 END
1000 PRINT "UPrg. für ERRORLEVEL 0"  :RETURN
1255 PRINT "UPrg. für ERRORLEVEL 255":RETURN

Das Basic-Programm ruft also über die DOS-Shell ein anderes ausführbares Programm aus und wertet nach seiner Beendigung den Errorlevel aus. Ein auf einen bestimmten Errorlevel fixitiertes Unterprogramm kann nun in Aktion treten. ERRORCHK löscht übrigens vor dem Schreiben des Ergebnisses den Tastaturpuffer, sodaß bei einer Ergebnisabfrage mit INPUT in aller Regel nichts schiefgehen kann. ERRORCHK ruft über die DOS-Funktion 4Bh das als ersten Parameter übergebene Programm auf und ermittelt anschließend mit der Funktion 4Dh den Returncode (Errorlevel). Danach wandelt es das Ergebnis ins Dezimalformat um und schreibt die die Zahl in den Tastaturpuffer.

Name: ERRORCHK.DEB
Funktion: Schreibt den Errorlevel eines Programms in den Tastaturpuffer.
Übersetzung: DEBUG <ERRORCHK.DEB
Prüfsumme: 2FA0
Anwendung: ERRORCHK Programm (mit Extension)Auswertung z. B. in GW-Basic: 10 IF ERGEBNIS$ = „-1“ THEN 20 PRINT „Programm nicht gefunden“ 30 ELSE PRINT „Errorlevel: „;

40 ERGEBNIS$

Einschränkungen: ./.
A
MOV BX,20           ;100
MOV AH,4A           ;103
INT 21              ;105
JB 157              ;107
CLD                 ;109
MOV AL,[80]         ;10A
MOV SI,82           ;10D
MOV DI,1A2          ;110
MOV DX,DI           ;113
MOVSB               ;115
DEC AL              ;116
CMP By[DI-1],D      ;118
JZ 124              ;11C
CMP By[DI-1],20     ;11E
JNZ 115             ;122
MOV By[DI-1],0      ;124
SUB SI,2            ;128
MOV [196],SI        ;12B
MOV [SI-1],AL       ;12F
INC SI              ;132
MOV AX,2901         ;133
MOV DI,5C           ;136
INT 21              ;139
MOV DI,6C           ;13B
MOV AX,2901         ;13E
INT 21              ;141
MOV [198],CS        ;143
MOV [19C],CS        ;147
MOV [1A0],CS        ;14B
MOV BX,194          ;14F
MOV AX,4B00         ;152
INT 21              ;155
MOV AX,40           ;157
MOV ES,AX           ;15A
ES:MOV DI,[80]      ;15C
ES:MOV [1A],DI      ;161
JNB 172             ;166
MOV AX,2D           ;168
STOSW               ;16B
MOV AX,31           ;16C
STOSW               ;16F
JMP 179             ;170
MOV AH,4D           ;172
INT 21              ;174
CALL 182            ;176
MOV AL,D            ;179
STOSW               ;17B
ES:MOV [1C],DI      ;17C
RET                 ;181
AAM                 ;182
CMP AH,0            ;184
JZ 190              ;187
PUSH AX             ;189
MOV AL,AH           ;18A
CALL 182            ;18C
POP AX              ;18F
ADD AL,30           ;190
STOSW               ;192
RET                 ;193
DW 0,0,0,5C,0,6C,0

RCX
A2
NERRORCHK.COM
W
Q

Quelle: 200 Utilities für PC-/MS-DOS von Gerhard Schild und Thomas Jannot