Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

COMPFIL - Plattendateien vergleichen

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

COMPFIL

,PATHNM1 = <c-string 1..54: filename 1..54> / <var: char:54>

,PATHNM2 = <c-string 1..54: filename 1..54> / <var: char:54>

,BLKCTRL = *IGNORE / *INCLUDE

,PAMINFO = *INCLUDE / *IGNORE

,OUTAREA = (NULL / <var: pointer>,

          0 / <integer 0..32767> / <var: int:4>)

,CALLER = USER / SYSTEM

,EQUATES = YES / NO

,XPAND = PARAM / OUTPUT

MF = L

MF = D,PREFIX = D / <pre>

MF = E,PARAM = <name 1..27>

MF = C / M

,PREFIX = D / <pre>

,MACID = MAM / <macid>

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

  1. Alle RESERVED-Felder des Parameterbereichs müssen mit binären Nullen gelöscht sein.

  2. Bei allen Änderungen im Parameterbereich, die nicht mithilfe von Makroaufrufen vorgenommen werden, ist der Aufrufer selbst für die Konsistenz des Parameterbereichs verantwortlich.

  3. Das Löschen des Ausgabebereichs obliegt dem Aufrufer.

  4. 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-
methode

MESSAGEN-
UMBER

PAGEN-
UMBER

RECORD-
NUMBER

BYTEN-
UMBER

ABSOLUT
RECORD
NUMBER

Bedeutung

SAM

X'0632'

<p>

<r>


<a>

1

ISAM

X'0633'


<r>



2

UPAM

X'0634'

<p>


<b>


3

UPAM

X'0635'

<p>




4

Die beiden SAM-Dateien unterscheiden sich ab dem <a>-ten Datensatz. Das ist der <r>-te Datensatz innerhalb des <p>-ten 2K-Datenblocks.

Die beiden ISAM-Dateien unterscheiden sich ab dem <r>-ten Datensatz

Die beiden UPAM-Dateien unterscheiden sich ab dem <b>-ten Datenbyte innerhalb des <p>-ten 2K-Datenblocks

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#)