Parameter in DOS auswerten 4

FCOMP vergleicht die Textausgabe eines Programms mit dem Inhalt einer Datei. Der Parameter des Filters ist also nicht wie bei PCOMP- und PCOMPCR.DEB der direkt zu vergleichende Text, sondern eine Datei, die den Vergleichstext enthält. Der Vorteil gegenüber den anderen Vergleichsfiltern liegt in der höheren Flexibilität. Wenn Sie z. B. die überdurchschnittlich lange Textausgabe eines Programmes in eine Datei umleiten und mit der ebenfalls lange Ausgabe des nächsten Programms vergleichen wollen, verwenden Sie FCOMP:

@ECHO OFF
CD >\TMP\AKTUELL.DIR
ECHO Sie lassen jetzt eine beliebige andere
ECHO Anwendung arbeiten, die unter anderem
ECHO z. B. in ein sehr tiefes Unterverzeichnis
ECHO wechselt, oder auch nicht...
CD | FCOMP \TMP\AKTUELL.DIR
IF ERRORLEVEL 255 GOTO FEHLER
IF ERRORLEVEL 1   GOTO UNGLEICH
ECHO Das aktuelle Verzeichnis
ECHO ist gleichgeblieben...
GOTO ENDE
:UNGLEICH
ECHO Das aktuelle Verzeichnis
ECHO hat sich geändert...
GOTO ENDE
:FEHLER
ECHO Die Datei \TMP\AKTUELL.DIR
ECHO existiert nicht (mehr)...
:ENDE

Wie bei PCOMP(CR) können Sie bei FCOMP die Wildcard »?« verwenden. Seien Sie aber vorsichtig, wenn Sie die Vergleichsdatei editieren. Sehr leicht gelangt nämlich ein zusätzliches Zeichen, und sei es nur das Dateiendezeichen [Strg]-Z oder ein zusätzlicher Zeilenvorschub am Ende, in die Datei, und der gesamte Vergleich endet mit einem Fehler. Verwenden Sie daher am besten den Debugger, um ein oder mehrere Zeichen durch die Wildcard zu ersetzen. Wollen Sie z.B. überprüfen, ob Sie sich gerade im Hauptinhaltsverzeichnis eines beliebigen Laufwerks befinden, gehen Sie folgendermaßen vor, um die benötigte Vergleichsdatei mit dem Inhalt »?:\« zu erhalten:

CD \
CD >C:\ROOT.DIR
DEBUG C:\ROOT.DIR
E 100 "?"
W
Q

Die zugehörige Stapeldatei sieht dann folgendermaßen aus:

CD | FCOMP C:\ROOT.DIR
IF ERRORLEVEL 1 GOTO FEHLER
ECHO Sie sind im Hauptinhaltsverzeichnis
GOTO ENDE
:FEHLER
ECHO Sie sind nicht im Hauptinhaltsverzeichnis!
:ENDE

Natürlich könnten Sie diese Anwendung viel leichter mit »PCOMPCR ?:\« realisieren – uns ging es hierbei nur ums Prinzip.

Name: FCOMP.DEB
Funktion: Vergleicht empfangene Zeichen mit dem Inhalt einer Datei.
Übersetzung: DEBUG <FCOMP.DEB
Prüfsumme: E298
Anwendung: FCOMP Datei1 <Datei2IF ERRORLEVEL # (? als Wildcard in Datei1 erlaubt) # = 255: Datei1 existiert nicht # = 1: Inhalt von Datei1 ist nicht mit Datei2 identisch

# = 0: Inhalt von Datei1 ist mit Datei2 identisch

Einschränkungen: Für jedes Fragezeichen als Wildcard muß genau ein Zeichen kommen.
A
MOV BX,[80]         ;100
MOV By[BX+E081],0   ;104
MOV DX,82           ;109
MOV AX,3D00         ;10C
CALL 139            ;10F
MOV BX,AX           ;112
MOV CX,1            ;114
MOV DX,FF           ;117
MOV AH,3F           ;11A
CALL 139            ;11C
AND AX,AX           ;11F
JZ 142              ;121
MOV AH,6            ;123
INT 21              ;125
JZ 136              ;127
CMP AL,[FF]         ;129
JZ 114              ;12D
CMP By[FF],3F       ;12F
JZ 114              ;134
MOV AX,4C01         ;136
INT 21              ;139
JNB 142             ;13B
MOV AX,4CFF         ;13D
INT 21              ;140
RET                 ;142

RCX
43
NFCOMP.COM
W
Q

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