-
moin,
da gab es mal einen Befehl dspusrspc in der Bibl. TAATOOL
-
Die TAATOOLS gibt es (leider) nicht mehr, allerdings kann man sich da auch mit DMPOBJ/DMPSYSOBJ behelfen.
Ggf. ein Grundsätzlicher Fehler:
Die RPG-Zählung bei Positionen in der DS "POS(nn)" beginnt bei 1, die relative Position zu einer Adresse bei 0. Die API-Strukturen beginnen ebenso bei 0.
Ich hoffe, du hast dies berücksichtigt.
Beim Aufruf des Spool-API's gibt es eine Error-Struktur, die man korrekt definieren muss um einen Fehler mitzubekommen. In diesem Fall ist das API bereits gescheitert und im USRSPC steht halt nichts.
ErrorStru DS <= nur schematisch;-)
AvailBytes bin(4) inz(%size(ErrorStru))
ProvBytes bin(4) inz(0)
ErrorId char(7) inz <= CPFxxxx
unused char(1) inz
ErrorData char(512) inz <= eigentlich beliebig, Daten zur CPF
Wenn du
clear ds_Error_code_ERRC0100;
ausführst, löscht du ebenso auch AvailBytes und kein API gibt einen Fehler zurück noch wird einer ausgelöst.
Dies ist vollkommen unnötig.
Ist nach dem API-Call ProvBytes > 0, dann ist ein Fehler aufgetreten, ansonsten sollten Daten im USRSPC stehen.
Auch dieses ist falsch:
FieldPointer = UserSpacePointer + ListHeader.Offset + (ListHeader.Size * (UserSpaceCounter - 1));
Wenn du die Strukturen ansiehst, so enthält jeder Eintrag seine eigene Länge.
Somit bekommt der Fieldpointer die 1. Adresse und muss um die Länge der Beschreibung verschoben werden. Die Anzahl der Einträge steht dann im Header, das ist korrekt.
-
hallo allerseits,
taatool hab ich hier, dspusrspc -> super!!
boardmittel dmpobj -> DANKE!!!
jetzt weiß ich zumindest, daß der userspace korrekt gefüllt ist
werde mich nun den restlichen fehlern widmen...
die ds_Error_code_ERRC0100 ist gemäß ibm-doku erstellt, müßte zumindest einigermaßen richtig sein, wenngleich ich das mit dem clear noch nicht verstanden habe warum ich den nicht machen soll. ich dachte, in der error steht dann nach dem prozeduraufruf ein fehler drin, wenn er zurückkommt? und aus Gewohnheit mache ich die felder vor dem prozeduraufruf leer. (nicht gut??)
dcl-ds ds_Error_code_ERRC0100 qualified ;
Bytes_provided int(10) Inz(%size(ds_Error_code_ERRC0100));
Bytes_available int(10) inz;
Exception_ID char(7);
Reserved char(1);
Exception_data varchar(128); -------------> änder ich gleich auf 512
end-ds;
zum rest:
ich vermute, daß die logik, wie ich den fieldpointer errechne, noch nicht richtig ist. könnte daran liegen, daß ich dieses code-schnipsel kopiert habe aus einem Programm, das einen userspace mit völlig anderen Daten ausliest, wo das halt so paßt, hier aber halt eben nicht. werde weiter forschen :-)
lg karin
Last edited by karin; 07-02-18 at 09:08.
Grund: korrektur
-
DSPF und EDTF können übrigens auch mit Benutzerbereichen umgehen:
DSPF STMF('/QSYS.LIB/Bibliothek.LIB/Name.USRSPC')
EDTF STMF('/QSYS.LIB/Bibliothek.LIB/Name.USRSPC')
Zu den Fehler-Formaten:
Die Inhalt der einzelnen Felder der Fehler-Formate sind hier im Detail beschrieben.
-
Ein Clear initialisiert mit dem Default.
Ein Reset initialisiert mit den Werten, die durch INZ oder in der *INZSR festgelegt ist.
Mit "Bytes_provided" teilst du dem API mit, wie lang der Puffer ist, den du im Fehlerfall eben zur Verfügung stellst.
Nach dem Clear initialisiert du mit 0, also wir die Errorstruktur nicht gefüllt.
Bei manchen API's kann man die Errorstruktur auch weglassen. In diesem Fall wird eine Escape-Message gesendet, die mit einer Monitor-Gruppe überwacht werden kann.
Die Länge der Exception_data ist vollkommen egal, es kommt halt auf die möglichen Fehler-ID's und die verwendeten Datenfelder an (siehe DSPMSGD, Felddefinitionen).
Willst du die Daten gar nicht auswerten, kann man das Feld auch weglassen.
D.h., die Minimal-Struktur ist 16 Bytes.
DMPOBJ/EDTF können eben auch Hex anzeigen, so dass man die Strukturen mit den relativen Adressen sich genauer anschauen kann.
-
ok, ich habe jetzt ein Ergebnis hinbekommen, nicht schön, aber übungszweck erfüllt.
fehler war tatsächlich die Adressierung des userspaces, diese habe ich geändert und nun sieht es schon ganz gut aus. ich kann die Inhalte des userspace z.b. mit DSPLY anzeigen, mehr brauche ich erst mal nicht.
nun müßte ich noch eine sinnvolle schleife bauen und irgendwas sinnvolles mit dem userspace machen. hhm. wie ziemlich viele leute im Internet schon angedeutet haben, die spooldaten stehen nicht vollends brauchbar im userspace, jetzt müßte man Steuerzeichen rausfieseln und ähnliches. ist mir aber für den übungszweck nicht förderlich, lasse ich also erst mal bleiben.
zumal ich das zusammenspiel von buffern, sizes und Offsets (beim spool-API Satzart SPFR0300) noch nicht durchdrungen habe. die logischen Erklärungen passen nicht zum DSPLY-Ergebnis, da muß es wohl noch ein paar kniffe geben, die sich mir nicht erschließen.
lange rede kurzer sinn: ich habe einiges dazugelernt und bekomme nun wenigstens ein ordentliches grundgerüst für API-Verwendung hin, das war die grundidee der Übung.
danke für alle hinweise!!
lg karin
-
... einfacher geht es mit verfügbaren Komponenten (wer die bei sich reinkopiert, hat da etwas nicht verstanden!). Siehe: http://bender-dv.de/Snippets.html#APILIST
D*B
-
Für SCS gibt es eigentlich keinen vernünftigen Grund, CPYSPLF nicht zu verwenden.
Und AFPDS/IPDS ist derart kompliziert, da hört sich jeder Spaß auf.
Sprich: ich würde mir eine andere API-Thematik zum Spielen suchen.
Similar Threads
-
By dschroeder in forum IBM i Hauptforum
Antworten: 16
Letzter Beitrag: 17-03-16, 12:42
-
By Burgy Zapp in forum Intern - Hilfe - Feedback - Tests-Forum
Antworten: 8
Letzter Beitrag: 02-03-07, 12:24
-
By delphix in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 28-12-01, 15:18
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks