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