OWBasic

Gruppe POINTERS Start INTRO Alphabetischer Index

Funktions- und Prozedurzeiger

In OWBasic können globale Variablen deklariert werden, die auf Funktionen oder Prozeduren zeigen.
Bevor er verwendet werden kann, muß der Typ des Funktionszeigers zunächst deklariert werden:

FPTR <typename>=(PROC <paramlist>)
FPTR <typename>=(FUNC<return type> <paramlist>)

<paramlist> gibt die Parameter der Prozedur/Funktion an und hat folgenden Aufbau:

[VAR] <dummy variable> [[]], ...

Ein Funktionszeiger ist eine gewöhnliche Variable; dementsprechend muß er nicht deklariert (was aber mit LOCAL durchaus möglich ist), sondern kann einfach verwendet werden:

<varname>\<typename>=#NULL

Einem Funktionszeiger kann man einen Wert auf die gleiche Weise wie bei anderen Variablen zuweisen; die Adresse einer Prozedur läßt sich über

PROC(<procedure name>)
, die einer Funktion über

FUNC(<function name>)
abfragen.
Man kann einem Funktionszeiger auch den symbolischen Wert #NULL zuweisen und ihn in Integer konvertieren, um ihn darauf abzufragen. Dies ist sinnvoll bei optionalen Callback-Funktionen, die nur aufgerufen werden sollen, wenn sie auf etwas zeigen.
Aufgerufen wird ein Funktionszeiger durch die Direktive CALL:

CALL <procptrname> <parameters>
CALL <type suffix> (<funcptrname> <parameters>)

Beispiel:

FPTR myproc_t=(PROC)
FPTR myfunc_t=(FUNC$ i%)

DIM screeninit\myproc_t[0]
DIM bname\myfunc_t[0]

PROC drawscreen
IF INT(screeninit)<>0 THEN
 CALL screeninit
ENDIF
TEXTBOX CALL$(bname RND(2)),10,30,149,40,0
ENDP

FUNC name$ n
RETURN "Nr. "+STRING(n)

PROC init
CLS 2
BOX 0,0,159,159
ENDP

screeninit=PROC(init)
bname=FUNC(name$)

drawscreen

Gruppe POINTERS Start INTRO Alphabetischer Index