PROC.KRS¢*************************************¢* *¢* Der Action! Kurs *¢* *¢* TEIL IV *¢* *¢* >>Prozeduren *¢* *¢* und *¢* *¢* Funktionen<< *¢* *¢* *¢* (C)1987 by Action! User Group *¢* Lueneburg *¢* *¢*************************************¢¢¢¢¢¢Jeder wird wohl den Begriff "Unter-¢programm" schon mal gehoert haben.¢Das sind (sollen manchmal sein) in ¢der Regel universelle Programmteile,¢die von verschiedenen Stellen im ¢Programm aus angesprungen werden¢koennen.¢(z.B.: Ein Soundeffekt, der oft ver-¢wendet wird ,schreibt man lieber als¢Unterprogramm als jedesmal neu... ¢spart ja schliesslich auch Speicher.¢¢Der PROC Befehl sollte aus den vor-¢angegangenen Kurs-teilen ja schon¢bekannt sein. Innerhalb eines ganzen¢Programmes kann man nun mehrere¢PROCs schreiben(Das Action! Programm¢besteht ja sowieso nur aus PROCs und¢FUNCs (Funktionen). Die PROCs koennen¢auch andere PROCs und FUNCs auf-¢rufen und diese wiederum wieder ¢welche...solange der Stack reicht.¢¢Aber was hat das nun mit Unterpro-¢grammen zu tun. Nun ja: Jede PROC¢oder FUNC ist als Unterprogramm an-¢zusehen, da jede PROC ja auch von¢jeder anderen PROC aus angesprungen¢werden kann.¢Da gibt es jedoch einen Haken: Man¢kann in Action! nicht eine PROC auf-¢rufen, die erst weiter unten im Pro-¢grammtext definiert wird. Also nicht:¢¢¢ PROC ZAPPER()¢¢ POWER() ; Aufruf einer PROC¢ ; die aber erst spaeter¢ ; folgt.¢ RETURN¢¢ PROC POWER()¢¢ RETURN ¢ ¢¢Wuerde man dieses Programm so ver-¢suchen zu compilieren, wuerde man¢ERROR-8 vom Compiler bekommen(Var-¢iable not declared).¢(Auch die Prozedurnamen werden als¢Variable angesehen(Sie enthalten¢die Speicherstelle, ab der die PROC¢steht).¢¢So darf man also nur Prozeduren auf-¢rufen, die vorher schon definiert¢wurden.¢¢>>>Wir erinnern uns: Die letzte PROC¢>>>wird nach dem Compilieren und dem¢>>>RUN Kommando als erstes aufgerufen.¢¢In einer PROC kann nun stehen, was¢gefaellt. Also Schleifen,Bedingungen,¢andere Prozeduraufruefe u.s.w...¢¢Nun gibt aber noch Parameter:¢Was ist den das??? Das sind Variablen¢oder konstante Werte ,die an PROcs¢uebergeben werden koennen. Dazu zu-¢naechst ein Beispiel:¢¢BYTE NUM,I¢¢ PROC PRINTNUMBER(BYTE PARAMETER)¢¢ PRINTBE(PARAMETER)¢¢ RETURN¢¢ PROC DEMO()¢¢ PRINTNUMBER(100) ; KONSTANTER PARA-¢ ; METER¢¢ FOR I=1 TO 10 ; HIER WERDEN VAR-¢ ; IABLE PARAMETER¢ DO ; UEBERGEBEN¢ PRINTNUMBER(I)¢ OD¢¢ RETURN¢¢¢Nun wird endlich auch die Bedeutung ¢der KLAMMERN hinter dem Prozedurnamen¢klar. Vorher wurde immer nur "()"¢geschrieben, um dem Compiler mitzu-¢teilen, dass keine Parameter ueber-¢geben werden.¢¢Der Aufruf der PROC PRINTNUMBER ist ¢dann ganz logisch. Aufpassen muss¢man nur, dass auch dieselben Var- ¢iablenTYPEN uebergeben werden, also¢nicht statt einer BYTE eine CARD¢Variable uebergeben. Das kommt zu¢schlechten Ergebnissen...........¢¢Man kann natuerlich auch mehrere ¢Parameter uebergeben. Die Parameter¢koennen auch von unterschiedlichen¢Typen sein. z.B.:¢¢ PROC PRINTNUMBERS(BYTE P1,CARD P2)¢¢ Aufgerufen wird dann entsprechend:¢¢ PRINTNUMBERS(100,2000)¢¢Oder eben auch Variablen (TYPEN¢nicht verwechseln.¢¢ ¢Wie die Parameter innerhalb der PROC¢benutzt werden koennen wurde ja¢schon im obigen Beispiel gezeigt:¢Die Parameter koennen wie ganz¢normale Variablen in der PROC be-¢nutzt werden. Aber auch nur innerhalb¢dieser PROC.¢¢Und damit sind wir gleich beim ¢naechsten Thema angelangt:¢¢ GLOBALE und LOKALE VAriablen¢¢bevor wir uns den FUNCtionen zu-¢wenden.¢¢Der Kurs geht weiter mit:¢¢ GLOBAL.KRS¢