PDA

View Full Version : CMD mit ELEM 15x



Seiten : [1] 2

mk
29-06-07, 11:10
Hallo zusammen,


ich habe in einer CMD Definition folgende Definitionen:

PARM KWD(YPARM) TYPE(LISXVAL) MAX(15) +
CHOICE(*NONE) PROMPT('X-Parms Values')
LISXVAL: ELEM TYPE(*CHAR) LEN(30) DFT(*NONE) +
SPCVAL((*NONE)) MIN(0) CHOICE(TEXT) +
PROMPT('Segement Item')
ELEM TYPE(*CHAR) LEN(25) DFT(*NONE) MIN(0) +
CHOICE(WERT) PROMPT('Segement Value Item 1')
ELEM TYPE(*CHAR) LEN(25) DFT(*NONE) MIN(0) +
CHOICE(WERT) PROMPT('Segement Value Item 2')
ELEM TYPE(*CHAR) LEN(25) DFT(*NONE) MIN(0) +
CHOICE(WERT) PROMPT('Segement Value Item 3')
ELEM TYPE(*CHAR) LEN(25) DFT(*NONE) MIN(0) +
CHOICE(WERT) PROMPT('Segement Value Item 4')



Der Befehl sieht so aus:

X-Parms Values:
Segement Item . . . . . . . . > 'Segement Item . . .'
Segement Value Item 1 . . . . > 'Segement Value Item 1'
Segement Value Item 2 . . . . > 'Segement Value Item 2'
Segement Value Item 3 . . . . > 'Segement Value Item 3'
Segement Value Item 4 . . . . > 'Segement Value Item 4'
+ für weitere Werte



Der Benutzer kann also 15 x die 5 Felder füllen.

Im Debugger sieht man die Werte mit binärfeldern.

....5...10...15...20...25...30...35...40...45...50 ...55...60
1 '   Segement Item . . . Segement Value Item 1
61 ' Segement Value Item 2 Segement Value Item 3 Segement
121 'Value Item 4 *YES  ö Ä   legende text4
181 ' legende text3 legende text2
241 ' legende text1 'legende text4' Item 4
301 '' *NONE *NONE
361 ' *NONE *NONE *NONE
421 ' *NONE *NONE
481 ' *NONE *NONE
541 ' *NONE *NONE
601 ' *NONE *NONE *NONE



Kennt jemand den Aufbau wie sich die Felder zusammensetzten
und wie man diese verarbeiten kann?

Die Binärfelder verschieben sich.
Je nach Anzahl der Einträge.

Gruss
Michael :rolleyes:

Fuerchau
29-06-07, 11:15
Da gibts doch das gute alte CL-Programmier-Handbuch (CL-Programming), auch als Download-PDF.

Dort ist der Aufbau von Parameter-Listen, Listen in Listen, mit und ohne Attribut und/oder Länge genau erklärt.

Kapitel 9, ab ca. Seite 300.

Pikachu
29-06-07, 12:06
Hier in dieser Beschreibung zu den Befehlen (http://publib.boulder.ibm.com/iseries/v5r1/ic2929/info/rbam6/rbam6comdefstate.htm) müsste das unter PARM und ELEM beschrieben sein.

Fuerchau
29-06-07, 12:17
@Pikachu
Dort ist leider nur die Syntax beschrieben.
Der tatsächliche interne Aufbau bei der Übergabe an das Programm steht leider nur im o.a. PDF-Handbuch.

Pikachu
29-06-07, 12:52
Die Übergabe der Parameter ist beim Schlüsselwort PARM unter "MAX Parameter" und beim Schlüsselwort ELEM gleich zu Beginn beschrieben. Da ist jeweils die Rede von einem 2-Byte-Binärwert, der die Anzahl der Elemente anzeigt.

mk
29-06-07, 13:03
Hallo zusammen,

danke für die Informationen.
Am Anfang ist ein zweiByte
Feld das die Anzahl der Elemente angibt. Soweit okay.

Mein Problem ist nicht die Anzahl, sondern wie man so eine Liste tatsächlich verarbeiten kann. Je nach Anzahl der
eingegeben Elemente verschiebt sich die Liste.

Und ich bin noch nicht hinter das Geheimnis der weiteren
Binärfelder gekommen.

gruss
Michael

@Baldur: Hättest Du vielleicht einen Link auf das PDF. Ich suche immer im
Information Center.

kuempi von stein
29-06-07, 13:35
...
@Baldur: Hättest Du vielleicht einen Link auf das PDF. Ich suche immer im
Information Center.

Jo, man sucht sich nen Wolf.
http://publib.boulder.ibm.com/html/as400/v5r1/ic2929/books/c4157214.pdf

kuempi

Pikachu
29-06-07, 13:39
Da sind ja noch "mysteriöse" 2-Byte-Binärwerte mit im Spiel. Und diese sind anscheinend wohl wirklich nur im CL-Handbuch (PDF-Dokument (http://publib.boulder.ibm.com/iseries/v5r1/ic2929/books/c4157214.pdf)) beschrieben.

Fuerchau
29-06-07, 13:49
Das ist korrekt.

Was die Handbücher angeht, so suche ich mir alle über das Information-Center:
http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/pdf_table/table/launcher.htm

Und was da nicht ist findet man ggf. bei den Redbooks:
IBM Redbooks (http://www.redbooks.ibm.com/)

Zuimindest all die Infos, die nix kosten ausser Mühe ;)

Fuerchau
29-06-07, 13:55
Nachtrag:

Im CLP kann man natürlich mit "%BIN(&VAR &POS 2)" den Binärwert direkt abfragen oder in eine Variable laden.

Mittels %SUBST(&VAR &POS &LEN) kann ich dann die einzelnen Werte abgreifen.

Solange man die Listen relativ dynamisch bearbeitet definiere ich die übergebene CL-Variable mit *CHAR(9999).

Besser ist es eigentlich in ILERPG, da kann ich die Listen ggf. mit:

D ListParm DS
D NumParm 5I 0
D Parms 10 DIM(300)

schön definieren.
Ansonsten wirds etwas komplizierter, aber Pointer-Arithmetik geht da ganz gut.