Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03167.jsonl.gz/476

Wenn die Prozeduren von allen Programmierern aller Sprachen benutzbar sein sollen, ist es unumgänglich, die Parameter in Registern zu übergeben. Hier ergeben sich allerdings unter M2Amiga einige Probleme: alle als Parameter belegten Register sind innerhalb der Prozedur markiert, also gesperrt und vom Compiler nicht für Berechnungen nutzbar. Weiterhin gibt es häufig Probleme, wenn man D0 und D1 mit Parametern belegt, man sollte also jeweils mit D2 beginnen oder den folgenden Vorschlag in Betracht ziehen:
Die Parameter werden nur im Schnittstellenmodul als solche angegeben. Im Definitions- und Implementationsmodul hingegen werden sie nicht angegeben und die zugehörigen Registerinhalte gleich bei Eintritt in die Prozedur in lokalen Variablen abgelegt (mit SYSTEM.REG oder ASSEMBLE). Diese Vorgehensweise erfordet allerdings sehr viel Umsicht vom Programmierer.
Bei einer grösseren Zahl Parameter werden somit die freien Register immer weniger, was den Compiler in arge Schwierigkeiten bringt. In diesem Fall sollte man sich derart behelfen, dass man mehrere Parameter in einem RECORD zusammenfasst und nur einen Zeiger darauf übergibt, wie z.B. bei IntuitionD.OpenScreen.
Die Übergabe von Zeichenketten und offenen Feldern allgemein ist mit Hilfe von Registern natürlich nicht möglich, man muss die Adresse und die Länge (HIGH-Wert) getrennt in zwei Registern angeben.
Ganz anders liegt der Fall, wenn die Prozeduren nur für den ,,erlauchten`` Kreis der -Programmierer geplant sind. Es spricht nichts dagegen, Parameter ganz normal auf dem Stack zu übergeben, was im allgemeinen Code und Zeit sowohl in der Library als auch im aufrufenden Programm spart. Ausserdem können in diesem Fall auch Zeichenketten und offene Felder ganz normal benutzt werden. In der erzeugten FD-Datei erscheint in diesem Fall allerdings ,,??`` anstelle des Registers. Da die Prozeduren ohnehin nur von M2Amiga benutzbar sind, ist eine FD-Datei aber unnötig.