FUNCTION and SUB Pointers

Example 1:

```

GLOBAL Func(DUMMY AS INTEGER) AS FUNCTION INTEGER

SetFunc(x0)
? Func(2)

SetFunc(x1)
? Func(2)

SUB SetFunc (f AS Func_TYPE)
Func = f
END SUB

'-----------------------------------------------

FUNCTION x0(x AS INTEGER) AS INTEGER
FUNCTION = x * x
END FUNCTION

FUNCTION x1(x AS INTEGER) AS INTEGER
FUNCTION = x * x * 2
END FUNCTION

```

Result:

```
4
8

```

Example 2:

```
GLOBAL PTR_Funcs () AS FUNCTION INTEGER

SET Funcs[] AS PTR_Funcs_TYPE   ' BCX creates a typedef and tacks on "_TYPE" to the declaration
x0,
x1,
x2,
x3,
x4
END SET

FUNCTION x0
FUNCTION = 0
END FUNCTION

FUNCTION x1
FUNCTION = 1
END FUNCTION

FUNCTION x2
FUNCTION = 2
END FUNCTION

FUNCTION x3
FUNCTION = 3
END FUNCTION

FUNCTION x4
FUNCTION = 4
END FUNCTION

'------------------------

DIM i

FOR i = 0 TO 4
? Funcs[i]()
NEXT

```

Result:

```
0
1
2
3
4

```

Example 3:

```
GLOBAL PTR_Funcs () AS FUNCTION PCHAR

SET Funcs2[] AS PTR_Funcs_TYPE   ' BCX creates a typedef and tacks on "_TYPE" to the declaration
s0\$,
s1\$,
s2\$,
s3\$,
s4\$
END SET

FUNCTION s0\$
FUNCTION = "0"
END FUNCTION

FUNCTION s1\$
FUNCTION = "1"
END FUNCTION

FUNCTION s2\$
FUNCTION = "2"
END FUNCTION

FUNCTION s3\$
FUNCTION = "3"
END FUNCTION

FUNCTION s4\$
FUNCTION = "4"
END FUNCTION

'-----------------------

DIM i

FOR i = 0 TO 4
? Funcs2\$[i]()
NEXT

```

Result:

```
0
1
2
3
4

```

Example 4:

```
GLOBAL PF_1_ARG(DUMMY AS INTEGER) AS FUNCTION INTEGER

SET Funcs3[] AS PF_1_ARG_TYPE
n0,
n1,
n2,
n3,
n4
END SET

FUNCTION n0(n AS INTEGER)
FUNCTION = n * 0
END FUNCTION

FUNCTION n1(n AS INTEGER)
FUNCTION = n * 1
END FUNCTION

FUNCTION n2(n AS INTEGER)
FUNCTION = n * 2
END FUNCTION

FUNCTION n3(n AS INTEGER)
FUNCTION = n * 3
END FUNCTION

FUNCTION n4(n AS INTEGER)
FUNCTION = n * 4
END FUNCTION

'------------------------------

DIM i

FOR i = 0 TO 4
? Funcs3[i](i)
NEXT

```

Result:

```
0
1
4
9
16

```

Example 5:

```
DIM y(s\$,j\$) AS SUB

y = xx : CALL xx ( "hello"  , " world" ) '  It is OKAY to use the CALL  keyword

y = zz : zz ( "goodbye" , " cruel world" ) '  Using the CALL keyword is not required

SUB xx (a\$, j\$)
PRINT
PRINT UCASE\$(a\$),UCASE\$(j\$), ":-)"
END SUB

SUB zz (a\$, j\$)
PRINT
PRINT MCASE\$(a\$),MCASE\$(j\$)," :-("
END SUB

```

Result:

```
HELLO WORLD:-)

Goodbye Cruel World :-(

```

BCX Console Sample Programs using Pointers.