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:
-
Beim Initialisierungsaufruf an den Dialog Manager durch DMcob_Initialize können dem Dialog Manager drei Werte mitgegeben werden, die die Stringbehandlung steuern.
-
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.
-
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.
-
Ü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.
-
-
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:
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 |