Makrotyp: S-Typ (E-Form/L-Form/D-Form/C-Form/M-Form) (siehe "Typen von Makroaufrufen")
Der Makro COMPFIL vergleicht, analog zum Kommando COMPARE-DISK-FILES, zwei Plattendateien blockweise (UPAM) oder satzweise (SAM, ISAM) und informiert den Benutzer über das Vergleichsergebnis.
Es können auch temporäre Dateien oder Arbeitsdateien verglichen werden. Die Dateien können auf gemeinschaftlichen Datenträgern, Net-Storage oder Privatplatten liegen.
Die zu vergleichenden Dateien müssen in folgenden Merkmalen übereinstimmen:
Zugriffsmethode (FILE-STRUCTURE bzw. FCBTYPE)
Blockformat (BLOCK-CONTROL-INFO)
Mit BLKCTRL=*IGNORE sind auch unterschiedliche Blockformate zulässig.Codierter Zeichensatz (CODED-CHARACTER-SET, EXTENDED_HOST_CODE)
für SAM-Dateien:
RECORD-SIZE (RECSIZE) bei RECORD-FORM=F (RECFORM=F)
für ISAM-Dateien:
RECORD-SIZE (RECSIZE) bei RECORD-FORM=F (RECFORM=F)
Struktur des ISAM-Schlüssels (KEY-LEN, KEY-POS, LOG-LEN und VAL-FL-LEN)
Struktur des Sekundärschlüssel (KEY-LEN, KEY-POS, DUPKEY) bei NK-ISAM
für UPAM-Dateien:
BUFFER-LENGTH (BLKSIZE)
HIGHEST-USED-PAGE (LPP)
Dateien mit folgenden Eigenschaften können nicht verglichen werden:
leere Dateien
geöffnete Dateien
gesperrte Dateien (z.B. SECURE-Lock)
Kennzeichen REPAIR-NEEDED gesetzt
Kennzeichen NO-DMS-ACCESS gesetzt
Dateigenerationsgruppen als Ganzes können nicht verglichen werden, wohl aber einzelne Dateigenerationen.
PLAM-Bibliotheken können blockweise verglichen werden. Ein Vergleich der enthaltenen Elemente ist nicht möglich.
Zum Vergleich von Banddateien steht das Dienstprogramm TPCOMP2 zur Verfügung, siehe Handbuch „Dienstprogramme“ [14].
Privilegierte Funktionen
Die Systembetreuung (Privileg TSOS) kann Dateien aller Benutzerkennungen vergleichen. Musterzeichen innerhalb der Benutzerkennung sind dabei nicht zulässig.
Format
Operation | Operanden |
|
|
| |
| |
|
Operandenbeschreibung
PATHNM1
Wählt die erste zu vergleichende Datei aus.
=<c-string 1..54: filename 1..54>
Name der ersten Datei.
=<var: char:54>
Nur mit MF=M möglich:
Symbolische Adresse eines Speicherbereichs von 54 Byte, in dem der Name der ersten Datei abgelegt ist.
PATHNM2
Wählt die zweite zu vergleichende Datei aus.
=<c-string 1..54: filename 1..54>
Name der zweiten Datei.
=<var: char:54>
Nur mit MF=M möglich:
Symbolische Adresse eines Speicherbereichs von 54 Byte, in dem der Name der zweiten Datei abgelegt ist.
BLKCTRL=*IGNORE / *INCLUDE
Gibt an, ob das Blockformat der Dateien in den Vergleich mit einbezogen wird (*INCLUDE) oder nicht (*IGNORE).
PAMINFO=*INCLUDE / *IGNORE
Gibt an, ob die Benutzerinformation im PAM-Schlüssel von UPAM-Dateien mit BLOCK-CONTROL-INFO=*PAMKEY in den Vergleich mit einbezogen wird (*INCLUDE) oder nicht (*IGNORE).
OUTAREA=(<address>,<length>)
Bestimmt Adresse und Länge des Ausgabebereichs, in dem die Informationen über den Dateivergleich abgelegt werden sollen.
<address>=NULL / <var: pointer>
Gibt die Adresse des Ausgabebereichs an.
<length>=0 / <integer 0..32767>
Gibt die Länge des Ausgabebereichs an.
<length>=<var: int:4>)
Nur mit MF=M möglich:
Symbolische Adresse eines Speicherbereichs von 4 Byte, in dem die Länge des Ausgabebereichs abgelegt ist.
CALLER
Steuerungs-Operand nur für MF=E und MF=M:
Gibt an, ob beim Funktionsaufruf ein SVC oder ein direkter Aufruf generiert werden soll.
= USER
Der Funktionsaufruf wird über den SVC 144 generiert.
= SYSTEM
Steuerungs-Operand nur für Aufrufer aus TPR:
Es wird ein direkter Aufruf mit BASR generiert. Für die Schnittstelle gelten die DSL-Konventionen. Beim Binden von TU-Programmen kann der generierte Entry nicht befriedigt werden.
EQUATES
Steuerungs-Operand nur für MF=C und MF=D:
Gibt an, ob bei der Expansion des Parameter- oder Ausgabebereichs auch Equates für die Werte der Felder des Parameter- oder Ausgabebereichs generiert werden sollen.
= *YES
Bei der Expansion des Parameter- oder Ausgabebereichs werden auch Equates für die Werte der Felder des Parameter- oder Ausgabebereichs generiert.
= *NO
Bei der Expansion des Parameter- oder Ausgabebereichs werden keine Equates für die Werte der Felder des Parameter- oder Ausgabebereichs generiert.
XPAND
Steuerungs-Operand nur für MF=C und MF=D:
Es wird festgelegt, welche Struktur zu expandieren (erzeugen) ist. Angaben bei diesem Operanden werden bei anderen MF-Werten ignoriert.
= PARAM
Das Layout der Parameterliste wird expandiert.
= OUTPUT
Das Layout des Ausgabebereiches wird expandiert.
Hinweise zur Programmierung
Alle RESERVED-Felder des Parameterbereichs müssen mit binären Nullen gelöscht sein.
Bei allen Änderungen im Parameterbereich, die nicht mithilfe von Makroaufrufen vorgenommen werden, ist der Aufrufer selbst für die Konsistenz des Parameterbereichs verantwortlich.
Das Löschen des Ausgabebereichs obliegt dem Aufrufer.
Beim nichtprivilegierten Aufruf (Funktionszustand TU) zeigt Register 1 auf den Parameterbereich. Beim privilegierten Aufruf (Funktionszustand TPR) ist die Registerbelegung gemäß der DSL-Konvention.
Returncodes
Der Returncode wird im Standardheader des Parameterbereichs abgelegt. Der Parameterbereich darf dann nicht im Read-only-Bereich liegen, sonst erfolgt Programmterminierung.
Folgende Returncodes werden von COMPFIL erzeugt:
X'cc' | X'bb' | X'aaaa' | Erläuterung |
X'00' | X'00' | X'0630' | Kein Fehler. Die Dateien sind gleich. |
X'00' | X'00' | X'0631' | Kein Fehler. Die Dateien sind nicht gleich. |
X'00' | X'40' | X'0501' | Dateikatalog nicht verfügbar |
X'00' | X'40' | X'0505' | Fehler bei der Rechner-Kommunikation |
X'00' | X'40' | X'0512' | Dateikatalog nicht gefunden |
X'00' | X'40' | X'051B' | Benutzerkennung nicht im Pubset |
X'00' | X'20' | X'0531' | Unerwarteter Fehler beim Dateikatalogzugriff |
X'00' | X'01' | X'0554' | Format des Dateinamens unzulässig |
X'00' | X'01' | X'0576' | Fehlerhafte Operandenkombination oder nicht gelöschte UNUSED-Felder |
X'00' | X'82' | X'0594' | Nicht genug virtueller Speicher verfügbar |
X'00' | X'20' | X'05AB' | Adresse des Ausgabebereichs falsch oder nicht angegeben |
X'00' | X'20' | X'05C7' | Interner Fehler im DMS |
X'00' | X'40' | X'05F4' | Angegebene Dateinamen sind gleich |
X'00' | X'40' | X'05FC' | Benutzerkennung nicht im Home-Pubset |
X'00' | X'01' | X'0624' | Ungültiger Dateiname |
X'00' | X'40' | X'0636' | Dateiattribute sind nicht verträglich |
X'02' | X'00' | X'06CB' | Ausgabeinformation nicht vollständig übertragen |
Weitere Returncodes, deren Bedeutung durch Konvention makroübergreifend festgelegt ist, können der Tabelle auf "Standardheader" (Standardheader) entnommen werden.
Layout des Parameterbereichs
Der Parameterbereich muss auf Wortgrenze ausgerichtet sein. Er beginnt mit einen Standardheader, den COMPFIL wie folgt initialisiert:
Function Unit Number | 22 |
Function Number | 33 |
Interface Version Number | 1 |
Returncode | -1 |
Makroauflösung mit MF=D und XPAND=PARAM, sowie Standardwerten für EQUATES, PREFIX und MACID:
COMPFIL MF=D,XPAND=PARAM DMAVGLPL DSECT , DMAVHDR DS 0A DMAVFHE DS 0XL8 0 GENERAL PARAMETER AREA HEADER DMAVIFID DS 0A 0 INTERFACE IDENTIFIER DMAVFCTU DS AL2 0 FUNCTION UNIT NUMBER DMAVFCT DS AL1 2 FUNCTION NUMBER DMAVFCTV DS AL1 3 FUNCTION INTERFACE VERSION NUMBER DMAVRET DS 0A 4 GENERAL RETURN CODE DMAVSRET DS 0AL2 4 SUB RETURN CODE DMAVSR2 DS AL1 4 SUB RETURN CODE 2 DMAVSR1 DS AL1 5 SUB RETURN CODE 1 DMAVMRET DS 0AL2 6 MAIN RETURN CODE DMAVMR2 DS AL1 6 MAIN RETURN CODE 2 DMAVMR1 DS AL1 7 MAIN RETURN CODE 1 DMAVFHL EQU 8 8 GENERAL OPERAND LIST HEADER LENGTH * DMAVPNAM1 DS CL54 Pathname1 DMAVPNAM2 DS CL54 Pathname2 DMAVBCTRL DS FL1 blockctrl operand * values of operand blckctrl_info DMAVBLKIG EQU 0 ignore DMAVBLKIN EQU 1 include * DMAVPINFO DS FL1 paminfo operand * values of operand paminfo DMAVPIIG EQU 0 ignore DMAVPIIN EQU 1 include * DMAVRES1 DS XL6 RESERVED DMAVARAD DS A Outarea=(<addr>,...) DMAVARLN DS F Outarea=(...,<length>) DMAV# EQU *-DMAVHDR
Layout des Ausgabebereichs
Der Ausgabebereich muss auf Wortgrenze ausgerichtet sein.
Makroauflösung mit MF=D und EXPAND=OUTPUT, sowie Standardwerten für EQUATES, PREFIX und MACID:
COMPFIL MF=D,XPAND=OUTPUT DMAVOUTP DSECT , * Compfile Output DMAVMSGNR DS F MESSAGENUMBER * DMAVMSGINF DS 0XL80 MESSAGEINFO DMAVMSG_DETAILS DS 0XL80 MESSAGEDETAILS DMAVPNAM DS CL80 PATHNAME ORG DMAVMSG_DETAILS * DMAVCMPINF DS 0XL12 COMPAREINFO DMAVPAGNR DS F PAGENUMBER DMAVRECNR DS F RECORDNUMBER DMAVBYTENR DS F BYTENUMBER DMAVABSRECNR DS F ABSOLUT RECORDNUMBER FOR SAM * FILES DMAVERRNR DS FL1 ATTRIBUT ERROR * type of file attribut error DMAVBKCTR EQU 1 blk-contr DMAVFISTR EQU 2 file-struc DMAVFITYP EQU 3 file-type DMAVHIUSP EQU 4 high-us-pa DMAVRECFR EQU 5 rec-form DMAVRECSZ EQU 6 rec-size DMAVKEYPO EQU 7 key-pos DMAVKEYLN EQU 8 key-len DMAVVALLN EQU 9 val-len DMAVLOGLN EQU 10 log-len DMAVALTIX EQU 11 alternate-index DMAVLBP EQU 12 last-byte-pointer DMAVBKSZ EQU 13 block-size DMAVPKUI EQU 14 pamkey-user-info DMAVLASTP EQU 14 last-position DMAVABSRECNR63 DS 0XL8 ABSOLUT RECORDNUMBER FOR SAM * FILES big counter DMAVABSRECNRH DS F high cnt DMAVABSRECNRL DS F low cnt * * ORG DMAVMSG_DETAILS+80 * DMAVUNUS DS XL8 UNUSED DMAVOUTPUT# EQU *-DMAVMSGNR
Bei Ausgabe der COMPFIL-Information in den Ausgabebereich des Anwenders werden folgende Fälle unterschieden:
Die Ausgabe war nicht möglich
Vom Aufrufer wurde kein Ausgabebereich zur Verfügung gestellt bzw. der Ausgabebereich war schreibgeschützt. Der Anwender erhält im Standardheader des Parameterbereichs den Returncode X'05AB' nach Validierung des Ausgabebereiches bzw. der Adresse. War der Ausgabebereich zu klein um die Ausgabeinformation zu übertragen, dann erhält der Aufrufer den Returncode X'06CB'.Fehler beim Zugriff auf eine oder beide zu vergleichende Dateien
Die erste Datei, bei der ein Zugriffsfehler auftritt, wird im Feld DMAVPNAM in der Form :<cat-id>:$<user-id>.<filename> ausgegeben. Außerdem erfolgt im Feld DMAVMSGNR die Ausgabe der Meldungsnummer X'0681' für einen allgemeinen Dateizugriffsfehler. Der genaue Grund für diesen Zugriffsfehler kann dem im Standardheader des Parameterbereichs abgelegten Returncode entnommen werden.Vergleich der beiden Dateien ist wegen der Unverträglichkeit ihrer Dateiattribute nicht möglich
Im Standardheader des Parameterbereichs und im Feld DMAVMSGNR des Ausgabebereichs wird die Meldungsnummer X'0636' ausgegeben. Außerdem ist anhand des Feldes DMAVERRNR erkennen, welches Dateiattribut zum Abbruch des Vergleichs geführt hat.Für beide Dateien wurde der gleiche Namen angegeben
Im Standardheader des Parameterbereichs und im Feld DMAVMSGNR des Ausgabebereichs wird der gleiche Returncode ausgegeben.Die beiden Dateien sind gleich
Im Standardheader des Parameterbereiches wird der Returncode X'0630' ausgegeben. Das Feld DMAVMSGNR des Ausgabebereich enthält X'0000'.Die beiden Dateien sind nicht gleich
Im Standardheader des Parameterbereiches wird der Returncode X'0631' ausgegeben. Abhängig von der Zugriffsmethode besteht folgender Zusammenhang zwischen MESSAGENUMBER im Feld DMAVMSGNR und der COMPARINFO in den Feldern
DMAVPAGNR (PAGENUMBER), DMAVRECNR (RECORDNUMBER), DMAVBYTENR (BYTENUMBER) und DMAVABSRECNR (ABSOLUT RECORD NUMBER FOR SAM FILES).
Zugriffs- | MESSAGEN- | PAGEN- | RECORD- | BYTEN- | ABSOLUT | Bedeutung |
SAM | X'0632' | <p> | <r> | <a> | 1 | |
ISAM | X'0633' | <r> | 2 | |||
UPAM | X'0634' | <p> | <b> | 3 | ||
UPAM | X'0635' | <p> | 4 |
1 Die beiden SAM-Dateien unterscheiden sich ab dem <a>-ten Datensatz. Das ist der <r>-te Datensatz innerhalb des <p>-ten 2K-Datenblocks.
2 Die beiden ISAM-Dateien unterscheiden sich ab dem <r>-ten Datensatz
3 Die beiden UPAM-Dateien unterscheiden sich ab dem <b>-ten Datenbyte innerhalb des <p>-ten 2K-Datenblocks
4 Die beiden UPAM-Dateien unterscheiden sich in der Benutzerinformation im PAM-Schlüssel des <p>-ten 2K-Datenblocks, sind aber inhaltlich gleich (Angabe PAMINFO=*INCLUDE)
Beispiel für eine Aufruffolge
MVC COMPMFC(DMAV#),COMPMFL COMPFIL MF=M,OUTAREA=(A(COMPOAC),OUTLEN),PARAM=COMPMFC, - ? PATHNM1=':X:SAM.1',PATHNM2=':X:SAM.2' COMPFIL MF=E,PARAM=COMPMFC . . COMPMFC COMPFIL MF=C,XPAND=PARAM COMPOAC COMPFIL MF=C,XPAND=OUTPUT COMPMFL COMPFIL MF=L,PATHNM1='AAA',PATHNM2='BBB' OUTLEN DC A(DMAVOUTPUT#)