PDA

View Full Version : Eingangsparameter im Free Code



harkne
07-11-25, 10:13
Hallo zusammen,

Ich mache total free und gebe die Eingangsparameter im Programm wie folgt an

dcl-pi *n extpgm;
parm PiJobName char(10);
parm PiJobUser char(10);
parm PiJobNo char(6);
parm PiSbs char(10);
parm PoJobName char(10);
parm PoJobUser char(10);
parm PoJobNo char(6);
end-pi;

Bei der Kompilierung sagt er mir aber dass genau die Variablen nicht definiert sind.

Ich habe dcl-pi am Anfang stehen nach ctl-opt

Ich habe keinen dcl-pr. Ich weiß nicht ob ich den brauche denn es ist eigentlich ein ganz einfaches "RPG" und ich denke ich muss den *entry plist einfach mit dem dcl-pi ersetzen.

Was könnte falsch sein?

Viele Grüße Harald

Fuerchau
07-11-25, 10:20
dcl-pi, Procedure Interface, stehen am Anfang des prozeduralen Teils im Hauptprogramm und ersetzen die *entry-Definition. Die Variablen sind da dann auch definiert.
Wenn auf dcl-pi weitere Definitionen folgen, ist das ein Reihenfolgefehler.
*entry ist ja auch eine C-Anweisung und kann daher nicht im Bereich der D-Definitionen stehen.

Anders sieht es aus, wenn du eine Main-Procedure im ctl-opt angibst, und dann per dcl-proc die Main definierst.
Nach dcl-proc erfolgt dann immer zuerst die dcl-pi für die Prozedur, gefolgt von nachfolgenden Definitionen.

camouflage
07-11-25, 11:27
wenn es eine einfache Parameterliste ist, warum nicht so?

dcl-pi *n;
PiJobName char(10);
PiJobUser char(10);
PiJobNo char(6);
PiSbs char(10);
PoJobName char(10);
PoJobUser char(10);
PoJobNo char(6);
end-pi;

Bevor Du mit den "C" Ops beginnst nach den übrigen Definitionen (Files, Fields, Arrays etc.)

Fuerchau
07-11-25, 13:42
Wie war das noch mal mit dem Wald und den Bäumen?
Klar "Parm" ist ein Parameter-Entry und ist in Free nicht erlaubt:-).

Pikachu
07-11-25, 17:40
Oder vielleicht als dcl-parm ?

Fuerchau
07-11-25, 18:31
Ja, da hast du auch recht:

ILERPG-Reference:



DCL-PR myProc;
DCL-PARM select CHAR(10);
name CHAR(10);
DCL-PARM address CHAR(25);
END-PR;


prototype using DCL-PARM to define some of its subfields.
a. Parameter select has the same name as an operation code allowed in free-form calculations.
DCL-PARM is required for this parameter. See Table 103 on page 534.
b. Parameter name does not have the same name as an operation code, so DCL-PARM is not required.
c. Parameter address does not have the same name as an operation code, so DCL-PARM is not
required, but it is valid.

DCL-PR ist mit DCL-PI zu vergleichen.

Aber wer verwendet schon Namen, die OP-Codes sind. Wie soll man die dann ansprechen?
Schafft der Compiler da ggf. den Kontext?


select;
when select = 'ABCD';
:
endsl;


Hast du jemals DCL-SUBF in einer DS verwendet? Bzgl. OP-Codes gilt hier dasselbe. Bei Qualified-DS macht das dann wieder Sinn.

camouflage
08-11-25, 11:11
Dann bin ich doch mal gerne den Förster. Wie bitte war schon mal die Eingangsfrage wieder. Ich fühl mich gerade wieder in die Karikatur von Anforderung Kunde und Lösung durch IT-Experten zurück versetzt.

Fuerchau
09-11-25, 00:16
Das ist halt unsere Diskussionsfreudigkeit. Bis zum bitteren Ende;-).
Was meinst du wohl, wie man sonst an über 20.000 Beiträge kommt?

BenderD
09-11-25, 09:31
Aber wer verwendet schon Namen, die OP-Codes sind.

... da habe ich spontan ein paar Gesichter vor Augen und ich meine mich zu erinnern, dass die auch schon hier im Forum geschrieben haben.

D*B

harkne
10-11-25, 13:19
ajajaj. Danke, das mit dcl-parm das wars