Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

CMDSEL Auswahlmaske für den geführten Dialog erzeugen

&pagelevel(4)&pagelevel

Der Makro CMDSEL erzeugt eine Auswahlmaske in der Art der SDF-Fragebögen, in der Benutzer im geführten Dialog einen oder mehrere Begriffe (Items) auswählen können.

In Bild 13 sehen Sie das prinzipielle Layout einer mit CMDSEL erzeugten Auswahlmaske.

Bild 13: Layout einer Auswahlmaske

Auf BS2000-Bildschirmen können maximal 24 Zeilen ausgegeben werden. Wieviele Zeilen davon für die Auswahlmaske verwendbar sind, hängt davon ab, ob eine Überschrift ausgegeben wird und wie viele NEXT-Zeilen es gibt. Bei mehr als 20 Zeilen in der Auswahlmaske erfolgt die Anzeige auf mehreren Bildschirmseiten. Die NEXT-Zeile enthält dann zusätzlich + (vorwärts blättern) und – (rückwärts blättern).

Eine Zeile am Bildschirm kann maximal 5 Spalten enthalten. Der Inhalt einer Spalte in einer Zeile muss in einem Datenbereich zur Verfügung gestellt werden, dessen Anfangsadresse und Länge im Programm übergeben wird. Der Platzbedarf aller Zeilen in einer Spalte errechnet sich demzufolge aus der Anzahl der Zeilen multipliziert mit der Länge des Datenbereichs einer Spalte.

Im Datenbereich einer Spalte steht jeweils ein auszugebender Begriff mit einem bestimmten Offset relativ zum Beginn des Datenbereiches und mit einer festgelegten Länge. Standardmäßig hat der Begriff kein Offset zum Beginn des Datenbereiches.

Beispiel

Bei einer Auswahlbox mit 2 Spalten und 3 Zeilen ergibt sich die folgende Datenstruktur:

AREA1                               AREA1 + AREA1L             AREA1 + (2*AREA1L)

AREA2                               AREA2 + AREA2L             AREA2 + (2*AREA2L)

Operation

Operanden

CMDSEL


SELECT = *SINGLE / *MULTIPLE / <var: enum-of SELECTION_S:1>

,LINENBR = <integer 1..65536> / <var: int:4>

,MESSAGE@  = NULL / <var: pointer>

,MESSAGEL = NULL / <var: int 0..240>

,MARKL = 1 / <integer 1..75> / <var: int:1>         

,OUTPUT = <var: pointer>

,TITLE@ = NULL / <var: pointer>

,TITLEL = <integer 1..240> / <var: int:4>                        

,TITEMS = NULL / <var: pointer>

,TITEMSL = 0 / <integer 1..65535> / <var: int:4>

,AREA1 = NULL / <var: pointer>

,AREA1L = 0 / <integer 1..65535> / <var: int:2>

,ITOFF1L = *AREA _ START / <integer 1..65535> / <var: int:2>

,ITEM1L = *AREA _ LENGTH / <integer 1..75> / <var: int:1>

,AREA2 = NULL / <var: pointer>

,AREA2L = 0 / <integer 1..65535> / <var: int:2>

,ITOFF2L = *AREA _ START / <integer 1..65535> / <var: int:2>

,ITEM2L = *AREA _ LENGTH / <integer 1..75> / <var: int:1>

,AREA3 = NULL / <var: pointer>

,AREA3L = 0 / <integer 1..65535> / <var: int:2>

,ITOFF3L = *AREA _ START / <integer 1..65535> / <var: int:2>

,ITEM3L = *AREA _ LENGTH / <integer 1..75> / <var: int:1>

,AREA4 = NULL / <var: pointer>

,AREA4L = 0 / <integer 1..65535> / <var: int:2>

,ITOFF4L = *AREA _ START / <integer 1..65535> / <var: int:2>

,ITEM4L = *AREA _ LENGTH / <integer 1..75> / <var: int:1>

,AREA5 = NULL / <var: pointer>

,AREA5L = 0 / <integer 1..65535> / <var: int:2>

,ITOFF5L = *AREA _ START / <integer 1..65535> / <var: int:2>

,ITEM5L = *AREA _ LENGTH / <integer 1..75> / <var: int:1>

SELECT =
legt fest, ob in der Maske Einfachauswahl oder Mehrfachauswahl erlaubt ist.

*SINGLE
Nur ein Begriff ist in der Maske auswählbar.

*MULTIPLE
Mehrere Begriffe sind in der Maske auswählbar.

<var: enum-of SELECTION_S:1>
Variable, die folgende Werte annehmen kann:


0:

wie *SINGLE

1:

wie *MULTIPLE


LINENBR = <integer 1..65536> / <var: int:4>
Anzahl der Zeilen, die in der Auswahlmaske angezeigt werden.

MESSAGE@   = <var: pointer>
Bestimmt die Adresse eines Feldes mit der Meldung, die vor einer Auswahl durch den Benutzer angezeigt wird.

MESSAGEL   = <var: int 0..240>
Bestimmt die Länge eines Feldes mit der Meldung, die vor einer Auswahl durch den Benutzer angezeigt wird.

MARKL = 1 / <integer 1..75> / <var: int:1>
Maximale Länge des Auswahl-Werts, d.h. die Breite der Auswahl-Spalte. Die Länge der Auswahl-Zeile bis Bildschirmbreite wird entsprechend abgekürzt.

OUTPUT = <var: pointer>
Adresse eines Bereiches, in den das Ergebnis der Auswahl geschrieben wird. Es müssen für jeden Auswahl-Satz so viele Bytes wie im MARKL Operanden angegeben reserviert werden, d.h. der Bereich muss eine Länge gleich LINENBR mal Wert von MARKL (n) haben. Der Bereich muss mit NUL oder Blanks initialisiert werden (bzw. eine vorab Auswahl). Wenn der Benutzer den Satz(i) mit einem Text_1..n markiert, werden die Bytes (1*n) bis (i*n + (n-1)) mit diesem Wert beschrieben. Falls vor dem Aufruf einem Teil des Bereiches ein Wert ungleich NUL bzw. Blank zugewiesen wird, wird die Auswahl-Spalte mit diesem Wert vorbelegt. 

TITLE@ =

Überschrift der Auswahlbox, die in der ersten Zeile auf dem Bildschirm ausgegeben wird.

NULL
Keine Überschrift der Auswahlbox.

<var: pointer>
Adresse der Zeichenkette mit der Überschrift.

TITLEL = <integer 1..240> / <var: int:4>
Länge des Texts, der als Bildschirm-Titel angezeigt wird. Dieser Operand wird nur bearbeitet, wenn dem Operanden TITLE@ eine Adresse ungleich 0 zugewiesen wird. Die Anzahl der Zeilen in der Auswahl-Liste hängt von der Anzahl Zeilen des Titel-Teils ab.

TITEMS = NULL / <var: pointer>
Adresse einer Begriffs-Überschrift, die in der 3. Bildschirmzeile ab der 6. Postion angezeigt wird (3270-Terminals: 8. Position).

TITEMSL = 0 / <integer 1..65535> / <var: int:4>
Länge der Begriffs-Überschrift (maximal 73 Zeichen).

AREA x =
mit x=(1..5):
Datenbereich, in dem der Inhalt einer Zeile in einer Spalte abgelegt ist. D.h. es muss für jede Zeile in jeder Spalte genau einen solchen Datenbereich geben.

NULL
In einer bestimmten Zeile in Spalte x wird kein Begriff ausgegeben.

<var: pointer>
Adresse des Datenbereiches, in dem der auszugebende Begriff abgelegt ist.

AREA x L = 0 / <integer 1..65535> / <var: int:2>
mit x=(1..5):

Länge eines Datenbereiches (in Byte) in Spalte x.

Die Gesamtlänge aller Datenbereiche der Spalte x wird berechnet aus der Anzahl der Zeilen multipliziert mit dem Wert von AREAxL.

ITOFF x L =
mit x=(1..5):
Offset des Begriffs relativ zum Beginn des bei AREAx angegebenen Datenbereiches.

*AREA _ START
Kein Offset

<integer 1..65535> / <var: int:2>
Offset in Byte

ITEM x L =
mit x=(1..5): Länge des Begriffs (maximal 75 Zeichen)

*AREA _ LENGTH
Der Begriff füllt den gesamten Datenbereich AREAx aus.

<integer 1..75> / <var: int:1>
Länge des Begriffs (in Byte)

Rückinformation und Fehleranzeigen

Der Returncode wird im Standardheader der Parameterliste übergeben.

Standardheader

cc: Subcode 2 (SC2)
bb: Subcode 1 (SC1)
aaaa: Maincode

(SC2)SC1MaincodeBedeutung
00000000erfolgreiche Beendigung
00200004nicht behebbarer Systemfehler

010008Parameterfehler:
00

  • falsche Parameterliste
01
  • LINENBR
02
  • SELECT
03
  • OUTPUT
04
  • TITLE@
05
  • TITLEL
06
  • Item1
07
  • Item2
08
  • Item3
09
  • Item4
0A
  • Item5
0C
  • TITEMS
0D
  • TITEMSL
0E
  • MARKL
0F
  • MESSAGE@
10
  • MESSAGEL
0040000CBenutzer hat nichts ausgewählt

Zusätzliche Programmierung Hinweise        

OUTPUT

der Makro fügt die NULs (0x00) in der angegebenen Auswahl Spalte aus d.h. die in der Eingabe Spalte angegebene durch NUL getrennte Zeichen werden zusammengefügt und die Restlänge wird auf NUL gesetzt.

TITLE and MESSAGE
der ausgegebene Text kann länger als der im Operanden angegebene Wert sein, da der Makro auf die nächste Zeile fortsetzt sodass kleine Wörter nicht über 2 Zeilen geschnitten werden. Falls der ausgegebene Text sich auf mehr als 3 Zeilen darstellen lässt, wird der mit "..."  abgekürzt.