11. Anlage
 
zurück
11.2.3 COBOL-Schnittstellenpaket

Das COBOL-Schnittstellenpaket erlaubt es einem Ada-Programm, Daten als Parameter einem COBOL-Programm zu übergeben. Ein Ada-Programm ist in der Lage, Datensätze zu lesen, die von einem COBOL-Programm erzeugt und in Dateien oder Datenbanken abgelegt wurden. Es können auch Datensätze im COBOL-Format ausgegeben werden. Dezimale Festpunkttypen eines Ada-Programms (decimal_fixed_point_definition <BNF>) können in oder von einer Darstellung in COBOL konvertiert werden. Damit ein existierendes COBOL-Programm aufgerufen und diesem Parameter übergeben werden können, stellt das Paket "Interfaces.COBOL" Typen zur Verfügung, die in einem Ada-Programm zur Deklaration von Parametern von Unterprogrammen verwendet werden können, deren Rümpfe in COBOL implementiert sind. Diese Typen stellen eine Abbildung auf die alphanumerischen und numerischen Daten in COBOL dar.

Für alphanumerische Daten werden verschiedene Typen zur Verfügung gestellt.

Da der Typ "character" in COBOL nicht unbedingt dem Typ "character" in Ada entsprechen muß, ist im Paket "Interfaces.COBOL" ein eigener COBOL-Typ "cobol_character" definiert. Für die Abbildung von Instanzen des Ada-Typs "character" auf Instanzen des Typs "cobol_character" wird ein Reihungstyp "Ada_To_COBOL" bereitgestellt. Die Elemente dieses Reihungstyps entsprechen dem Zeichensatz des COBOL-Typs "character". Um das zu einem Ada-Zeichen korrespondierende COBOL-Zeichen zu erhalten, wird das Ada-Zeichen als Index auf die Variable "Ada_To_COBOL" angewendet. Für die umgekehrte Richtung existiert die Reihung COBOL_To_Ada", die entsprechend angewendet wird. In COBOL können numerische Daten in einer "Display"-Darstellung und in einer "Computational"-Darstellung vorliegen. Die dezimalen Festpunkttypen von Ada (decimal_fixed_point_definition <BNF>) eignen sich zur Repräsentation numerischer Daten. Um numerische Daten in Ada an ein COBOL-Programm zu übergeben, müssen diese von der dezimalen Ada-Darstellung in die entsprechende Darstellung konvertiert werden, die auf der COBOL-Seite erwartet wird.


Computational-Darstellung

kommadarstellungen in COBOL wie "floating" bzw. "long_floating" werden durch Gleitkommazahlen in Ada modelliert. Konvertierungen zwischen Gleitkommadarstellungen in COBOL und dezimalen Ada-Typen erhält man direkt, da der Typname als Konvertierungsfunktion dient.

Binärdarstellungen wie "binary" bzw. "long_binary" werden durch einen Ada-Typ "integer" modelliert. Eine Konvertierung zwischen "binary" und einem dezimalen Typ in Ada erfolgt durch die Instantiierung des generischen Pakets "Decimal_Conversions" und die Anwendung der Funktion "To_Binary" bzw. "To_Decimal".


Display-Darstellung


Display-Darstellungen für numerische Daten werden durch einen numerischen Reihungstyp modelliert. Konvertierungen zwischen Display-Darstellungen und dezimalen Typen erfolgen durch Instantiierung des generischen Pakets "Decimal_Conversions" und die Anwendung der Funktionen "To_Display" bzw. "To_Display". Ein Parameter der Konvertierungsfunktion gibt die gewünschte Interpretation der Daten an.

Das Pragma "Convention (COBOL, T)" wird auf einen Verbundtyp T angewendet, um eine COBOL-ähnliche Darstellung für das Objekt vom Verbundtyp T zu erhalten. Das Paket "Interfaces.COBOL" erlaubt es, Daten von Dateien oder Datenbanken zu bearbeiten, die von einem COBOL-Programm generiert wurden.

Für alphanumerische Daten oder numerische Daten, die in Display- oder gepacktem Format vorliegen, ist die Vorgehensweise die gleiche wie bei der Parameterübergabe: Instantiierung des generischen Pakets "Decimal_Conversions" und Verwenden der entsprechenden Konvertierungsfunktionen. Ein Parameter der Konvertierungsfunktion gibt die gewünschte Interpretation der Daten an (höher- versus niederwertiges Byte zuerst).


Beispiel:

with Interfaces.COBOL;
procedure Test_Aufruf is
   -- Aufruf eines COBOL-Programms
   -- Angenommen, ein COBOL-Programm PROG hat folgende Deklaration
   -- in der LINKAGE Section:
   -- 01 Parameter-Area
   -- 05 NAME PIC X(20).
   -- 05 SSN PIC X(9).
   -- 05 SALARY PIC 99999V99 USAGE COMP.
   -- Der Effekt von PROG ist, das GEHALT neu zu berechnen
   package COBOL renames Interfaces.COBOL;
   type Gehalt_Typ is delta 0.01 digits 7;
   type COBOL_Record is record
      Name : COBOL.Numeric(1..20);
      Pers_Nr : COBOL.Numeric(1..9);
      Gehalt : COBOL.Binary; -- Angenommen, Binary = 32 bits
   end record;
   pragma Convention (COBOL, COBOL_Record);
   procedure Prog (Item : in out COBOL_Record);
   pragma Import (COBOL, Prog, "Prog");
   package Gehalt_Konvertierungen is new COBOL.Decimal_Conversions(Gehalt_Typ);
   Irgendein_Gehalt : Gehalt_Typ := 12_345.67;
   Irgendein_Record : COBOL_Record := (Name => "Johnson, John ",
                                       Pers_Nr => "111223333",
                                       Gehalt => Gehalt_Konvertierungen.To_Binary(Irgendein_Gehalt));
begin
   Prog (Irgendein_Record);
   -- ...
end Test_Aufruf;



 
zurück
 Index   Ada Tour - Dokumentation  
© 2003 Förderverein Ada Deutschland e.V.