4.3 Behandlung von String-Parametern

Bei der Bearbeitung von String-Parametern im COBOL-Interface muss beachtet werden, dass der Dialog Manager intern in der Programmiersprache C geschrieben ist. Diese beiden Programmiersprachen haben leider eine sehr unterschiedliche interne Darstellung von Strings.

 

C

COBOL

Länge

dynamisch, beliebige Länge

statisch definierte Länge

Endekennzeichen

Endekennzeichen '\0'

kein Endekennzeichen

Füllgrad

Länge entspricht in der Regel dem eigentlichen String

Länge unterschiedlich zu Definition. In der Regel mit Blanks aufgefüllt.

Um nun diese zwei unterschiedlichen Darstellungen von Strings möglichst nahe zusammen zu führen, gibt es im Dialog Manager folgende Vorgehensweise bei der Behandlung von String-Parametern:

  1. Beim Initialisierungsaufruf an den Dialog Manager durch DMcob_Initialize können dem Dialog Manager drei Werte mitgegeben werden, die die Stringbehandlung steuern.

    1. DM-SetSep of DM-StdArgs

      Das hier enthaltene Zeichen ist das Zeichen, mit dem das COBOL-Programm seine wirklichen Strings terminiert. Der Dialog Manager sucht nach diesem Zeichen und löscht alle nachfolgenden Zeichen in dem übergebenen String.

    2. DM-GetSep of DM-StdArgs

      Das hier enthaltene Zeichen ist das Zeichen, mit dem der Dialog Manager Strings bis zu ihrer Definitionslänge auffüllt, bevor sie an das COBOL-Programm übergeben werden.

    3. DM-truncspaces of DM-StdArgs

      Über diesen Parameter kann dem Dialog Manager mitgeteilt werden, dass alle Blanks am Ende eines Strings als nicht existent betrachtet und gelöscht werden sollen.

    Diese bei DMcob_Initialize getroffenen Einstellungen gelten für alle direkt vom Dialog Manager aufgerufenen Funktionen sowie deren Rückgabewerte.

  2. Bei allen Aufrufen an die Schnittstellenfunktion des Dialog Managers können diese Werte lokal temporär umdefiniert werden. Es gibt dabei wie bei 1) drei Möglichkeiten:

    1. DM-setsep of DM-StdArgs

    2. DM-setsep of DM-StdArgs

    3. DM-truncspaces of DM-StdArgs

    Die Bedeutung ist wie bei 1.

Daher erscheint folgende Belegung sinnvoll:

DM-setsep @

DM-getsep " "

DM-truncspaces 1

Mit dieser Belegung können die jeweiligen Werte jeweils direkt vom COBOL-Programm und im Dialog Manager verarbeitet werden.

Beispiel

Im Dialog ist ein Eingabefeld definiert mit einer Länge, die durch das Attribut .maxchars auf die Länge 20 begrenzt ist. Die COBOL-Funktion, die diese Eingabe überprüfen soll, erhält einen String-Parameter der Länge 20.

function cobol void TestFkt (string[20] InString input output);

 

edittext EtEingabe

{

  .maxchars 20;

}

Die nachfolgende Tabelle stellt den Einfluss der einzelnen Elemente auf die Übergabe des Strings von und nach COBOL dar.

Dialog

COBOL

 

DM-GetSep Space

Ergebnis

AB im Eingabefeld

AB wird mit 18 Leerzeichen aufgefüllt

AB + 18 Leerzeichen

Im COBOL-Programm wird nun dieser String verarbeitet und ein neuer Inhalt in den String gesetzt.

COBOL

Dialog

Befehl

Inhalt des Strings

DM-TruncSpaces 1

Ergebnis

MOVE "NEU" TO InString

NEU + 17 Leerzeichen

NEU

NEU