FUNC.KRS¢*************************************¢* *¢* *¢* Die F u n k t i o n *¢* *¢* *¢*************************************¢¢So. Da waeren wir also bei den ¢Funktionen.¢Wer erinnert sich denn noch an den¢Mathe-Unterricht. Da war ja auch ¢immer von Funktionen u.s.w. die Rede.¢¢Action! kenn sie auch...¢¢Funktionen werden ja immer dann ein-¢setzt, wenn irgendwelche Ergebnisse¢herauskommen sollen.¢z.B.:¢¢X=P*P¢¢Nehmen wir an, dass 'P' irgendeine¢beliebige Zahl ist. Nach X=P*P ist¢X also immer das Quadrat von 'P'.¢Um die Funktionen zu erklaeren das¢Beispiel:¢¢CARD FUNC QUADRAT(CARD P1)¢RETURN (P1*P1)¢¢PROC MAIN()¢CARD I¢I=QUADRAT(2)¢PRINTCE(I)¢RETURN¢¢Sehen wir uns zunaechst nur die ¢PROC MAIN an:¢¢Nach dem Vereinbarungsteil ¢PROC MAIN() wird 'I' als lokale¢Variable definiert.¢Danach steht I=QUADTRAT(2), d.h.¢dass die Funktion Quadrat mit Para-¢meter '2' aufgerufen wird. Den Wert,¢die diese FUNC ergibt, wird in 'I'¢gespeichert. 'I' ist also gleich¢das QUADRAT von '2'.¢¢In der FUNC passiert nun folgendes:¢hier nocheinmal die 'FUNC':¢ CARD FUNC QUADRAT(CARD P1)¢ RETURN (P1*P1)¢¢Zunaechst muss vereinbart werden, was¢fuer einen Wert die FUNC herausgeben-¢soll. In diesem Fall ist das ein Wert¢vom Typ 'CARD'. Dann steht 'FUNC', um¢dem Compiler mitzuteilen, dass eine¢FUNCtion vereinbart wird. Dann folgt¢der Functionsname und dann schliess-¢lich der Parameter-Teil.¢Auch die FUNC wird wie in einer PROC¢mit RETURN abgeschlossen. Dabei muss¢aber hinter RETURN in Klammern stehen¢was rausgegeben werden soll. Im Bei-¢spiel also P1*P1. Die Parameter¢werden also quadriert.¢Das Beispiel ist aber kein gutes.¢Ausser Werte rauszugeben kann in¢einer FUNC alles stehen, wie auch¢in einer PROC. z.B:¢¢CARD FUNC QUADRAT(CARD P1)¢¢ IF P1>255 THEN ¢ PRINTE("ZAHL ZU GROSS")¢ RETURN (0) ¢ FI¢¢ RETURN (P1*P1)¢¢¢Sollte das Parameter groesser als 255¢sein, so wird eine '0' zurueckge-¢geben, da 256*256 nicht mehr mit¢einer CARD Variable darzustellen sind.¢Ansonsten wird das Quadrat zurueckge-¢geben.¢¢Anderes Beispiel: ¢ ¢¢BYTE FUNC LOBYTE(CARD P1)¢ ; >>>*** CARD UEBERGEBEN *¢ RETURN (P1)¢¢BYTE FUNC HIBYTE(BYTE P1,P2)¢ ; >>>*** TROTZDEM CARD UEBERGEBEN *¢ RETURN (P2) ¢¢PROC MAIN()¢BYTE LO,HI CARD I¢DO¢ PUTE()¢ PRINTE("GEBE ZAHL EIN")¢ I=INPUTC()¢¢ LO=LOBYTE(I)¢ HI=HIBYTE(I)¢ PRINTB(LO)¢ PRINT(" , ") ¢ PRINTBE(HI)¢¢OD¢¢RETURN¢¢¢¢Da Programm fragt nach einer Zahl,¢die dann in Lo-und Hi-byte Werten¢ausgegeben wird. ¢¢Die Funktionen scheinen etwas wider-¢spruechlich zu sein, da jedesmal ein¢BYTE Wert rausgegeben werden soll,¢aber z.B.: bei der LOBYTE FUNC eine¢CARD als Parameter uebergeben werden¢muss. Da die Function aber als BYTE¢FUNC vereinbartwurde, wird auch nur¢ein BYTE Wert ausgegeben. Man kann¢hinter RETURN auch einfach die CARD¢schreiben. Nur die ersten acht Bytes,¢also der BYTE Wert wird dann rausge-¢geben.¢¢Bei HIBYTE muss auch eine CARD als¢Parameter uebergeben werden. Diese¢CARD wird dann aber in zwei BYTE¢Parameter eingelesen. Das 2. BYTE¢Parameter ist dabei das Hibyte und¢kann daher als Funktionswert zu-¢rueckgegeben werden.¢¢Selbstverstaendlich koennen auch ¢konstante Werte an die FUNC Para-¢meter uebergeben werden.¢z.B.so:¢¢¢ LO=LOBYTE(256)¢ HI=HIBYTE(256)¢ ^¢ ^¢ konstante Werte.¢¢¢Als Parameter kann man aber auch Aus-¢druecke nehmen: z.B.:¢¢ LO=LOBYTE(10*10)¢¢oder¢¢ HI=HIBYTE(10*I) ¢ ¢¢Es gibt eine Reihe 'eingebauter'¢FUNCs im Action! System.¢z.B.: INPUTC()¢Schreibt man :¢¢ I=INPUTC()¢¢so wird in der FUNC INPUT eine zahl¢von der Tastatur eingelesen und in¢'I' gespeichert.¢¢¢Der Kurs geht weiter mit:¢¢¢ ARRAYS.KRS¢¢¢