[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Dec 2004
    Beiträge
    34

    Displayfile Pointer

    Hallo allesamt

    Nochmal Pointer displayfile

    Trotz der Antworten kann ich mir das nicht vorstellen das es nicht geht
    deswegen nochmal
    mit etwas source

    Funktion wie folg
    unterroutine
    in #feld ist der Displayfedname (bekommen mit return courser lock)
    in dspfld1 ist dann der wert, der da hinein soll
    deklaration wie folgt

    BILD *
    DSPFLD *
    D FELD_PTR *
    D FELD_PTR1 S 10 BASED (F)
    D PTR1 S 10 BASED (P)

    D DSPFLD1 DS 0
    D FLDNAME1 10 INZ(' ')
    D FLDADR1 *

    Subroutine

    $PROMPT begsr
    MOVEL #FELD FLDNAME1
    EVAL F = %ADDR(#FELD)
    EVAL DSPFLD= %ADDR(WSKENN)
    CALL 'PS228'
    PARM #PGM
    PARM DSPFLD1
    EVAL P = %ADDR(DSPFLD1)
    EVAL DSPFLD = %ADDR(PTR1)
    ENDSR

    ev weiss doch jemand Rat.
    ev kann auch der Ausgabepuffer
    geändert werden, da ja zeile und spalte
    des feldes mitkommt.

    hoffe doch auf rat (ev mit beispiel)

    mfg
    THH

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    %ADDR liefert immer nur die Adresse des benannten Feldes, dass zur Compile-Zeit bekannt ist !!!
    Eine indirekte Adressierung ist in RPG nicht möglich. Genausowenig gibt es die Möglichkeit an den Inhalt eines Feldes per %ADDR zu kommen.
    %ADDR(#FELD) liefert also die Adresse von #FELD und nicht des Feldnamens, der darin steht.

    Da du deine Displayfile ja kennst, musst du halt einen select kodieren:

    select
    when #feld = 'NAME1'
    eval fldadr1 = %addr(name1)
    when #feld = 'NAME2'
    eval fldadr1 = %addr(name1)
    :
    :
    endsl

    Dein aufgerufenes Programm kann dann mittels Referenz direkt auf das Zielfeld updaten:

    D DSPFLD1 DS
    D FLDNAME1 10
    D FLDADR1 *

    D FLDINH S 10 based(FLDADR1)

    *entry plist
    parm dspfld1


    Einfacher und übersichtlicher ist es aber, wenn du ganz einfach ein Prototype deines PromptPGM's deklarierst und im Select direkt das Programm mit den benannten Argumenten aufrufst:

    select
    when #feld = 'NAME1'
    callpr myprog(#feld:name1)

    when #feld = 'NAME2'
    callpr myprog(#feld:name2)
    :
    :
    endsl
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. Anzahl Felder in Displayfile
    By steven_r in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 07-11-06, 11:01
  2. Displayfile Pointerübergabe
    By THH in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 17-12-05, 11:51
  3. Zugriff auf Serielle Schnittstelle aus RPG/VARPG
    By Kampi4 in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 25-11-05, 07:37
  4. Rückgabe von 2 Werten aus einer Prozedur
    By BUG in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 18-10-04, 13:55
  5. Pointer ins Nirwana nach Proc Aufruf???
    By AndreasH in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 22-09-02, 11:00

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •