Hallo,
ich hab es damals in dem Beispielprogramm im Modul base_mt.sys gefunden. In der Doku habe ich nur bei der Beschreibung des Befehls 'StartLoad' in der Datei 'System_Datentypen_Routinen.pdf' etwas darüber gefunden.
PROC CallByVar(string Name,
num Number)
IF (Number-Trunc(Number) <> 0) OR (Number<0) THEN
ErrWrite "CallByVar fault", "Argument Number is not an integer or"
\RL2:= "is negative.";
Stop;
EXIT;
ENDIF
%Name+NumToStr(Number,0)%;
ENDPROC
Sinn der Sache ist, das man einen Unterprogrammaufruf programmieren kann, obwohl das aufgerufene Unterprogramm noch gar nicht im Speicher vorhanden ist.
Normalerweise wird ja schon beim Laden des Programms überprüft, ob alle augerufenen Unterprogramme vorhanden sind. Über die % kann man ein sogenanntes 'late binding' erreichen, dann wird der Unterprogrammname erst bei der Abarbeitung der Zeile zusammengebaut und ausgewertet.
Lange Rede kurzer Sinn:
Wenn das Programm so aussieht, dann kann man es laden ohne Fehler, erst beim Ablauf ergibt es einen Fehler.
Module testprog
Proc main()
%"programm_1"%;
%"programm_2"%;
endproc
Proc programm_1 ()
waittime 1;
endproc
endmodule
Sieht die Sache folgendermassen aus, dann gibt es schon beim Laden des Programms einen Fehler, weil die Routine programm_2 fehlt:
Module testprog
Proc main()
programm_1;
programm_2;
endproc
Proc programm_1 ()
waittime 1;
endproc
endmodule
Hoffe das hilft über die Schwierigkeiten hinweg.
Gruss aus dem Schwabenland
Hermann