Zitat Zitat von Fuerchau Beitrag anzeigen
....
Mittels "eval MyFrstBptr = MyUsPtr + OffsetfBuffer" weist du die Adresse zu und hast Zugriff auf den Puffer des 1. Satzes.
....
yepp, das habe ich alles. die entscheidende stelle, wo es bei mir hakt, und da habe ich vermutlich einen Denkfehler oder was auch immer, ist die stelle, wo ich auf den puffer zugreife.
sieht so aus mein Programm

if open_spoolfile();
if create_userspace();
// Befüllen des User Space
fill_userspace();
// Zugriff auf User Space
GetPointer(USERSPACENAME:UserSpacePointer);
//User Space Informationen verarbeiten
For UserSpaceCounter = 1 to ListHeader.Count;
FieldPointer = UserSpacePointer + ListHeader.Offset
+ (ListHeader.Size * (UserSpaceCounter - 1));
// irgendwas mit den Daten machen
dsplytext = 'DS_SPFR0300.PRINT_DATA= '
+ %editc(DS_SPFR0300.PRINT_DATA:'X') ;
dsply dsplytext ;
endfor;
// Userspace löschen
delete_userspace();
endif;
Close_spoolfile();
endif;


das befüllen sieht so aus (vielleicht etwas übel geschrieben, aber ich arbeite viel mit DSen)
ds_QSPGETSP.Spooled_file_handle
= ds_QSPOPNSP.Spooled_file_handle_returned;
ds_QSPGETSP.Qualified_user_space_name = USERSPACENAME;
ds_QSPGETSP.Format_name = 'SPFR0300';
ds_QSPGETSP.Ordinal_number_of_buffer_to_be_read = 8;
ds_QSPGETSP.End_of_open_spooled_file = '*ERROR';
clear ds_Error_code_ERRC0100;
ds_QSPGETSP.Error_code = ds_Error_code_ERRC0100;
// Einlesen Spoolfile in den Userspace
QSPGETSP(ds_QSPGETSP.Spooled_file_handle
: ds_QSPGETSP.Qualified_user_space_name
: ds_QSPGETSP.Format_name
: ds_QSPGETSP.Ordinal_number_of_buffer_to_be_read
: ds_QSPGETSP.End_of_open_spooled_file
: ds_QSPGETSP.Error_code
);

die Routinen create_userspace(), getpointer(...) und delete_userspace() sehen so aus, als würden sie ordnungsgemäß laufen

hier noch ein paar variablen :

dcl-s UserSpacePointer Pointer;
dcl-s FieldPointer Pointer;
Dcl-Ds ListHeader Based(UserSpacePointer) Qualified;
Offset Int(10) Pos(125);
Count Int(10) Pos(133);
Size Int(10) Pos(137);
End-Ds;
Dcl-Ds ds_SPFR0300 Based(FieldPointer) Qualified;
print_data int(10) pos(1); end-ds;
Dcl-S UserSpaceCounter uns(20) inz;
Dcl-S dsplytext char(50) inz;


wenn ich nun mein Programm laufen lasse, kommen diese Meldungen:

call testspoolf parm('jobname' 'user' '887773' 'TESTSPOOLF' '000001')
Ownership of object @USERSPACE in QTEMP type *USRSPC changed.
DSPLY DS_SPFR0300.PRINT_DATA= 0000000000
Space offset X'00000000' or X'0000000000000000' is outside current limit
for object @USERSPACE.
End of requests.

ich weiß nicht so recht, wie ich den puffer behandeln soll... oder ob im userspace wirklich was drinsteht (wie kann man das prüfen?)

lg karin