| Extending the language / C-Extensions | |
This example shows how to create a C-Extension library on Linux™ using gcc.
The command line options to compile and link shared libraries can change depending on the operating system and compiler/linker used.
#include <string.h>
#include "f2c/fglExt.h"
int fgl_split( int in_num );
int fgl_split( int in_num )
{
char c1[101];
char c2[101];
char z[201];
char *ptr_in;
char *ptr_out;
popvchar(z, 200); /* Getting input parameter */
strcpy(c1, "");
strcpy(c2, "");
ptr_out = c1;
ptr_in = z;
while (*ptr_in != ' ' && *ptr_in != '\0')
{
*ptr_out = *ptr_in;
ptr_out++;
ptr_in++;
}
*ptr_out=0;
ptr_in++;
ptr_out = c2;
while (*ptr_in != '\0')
{
*ptr_out = *ptr_in;
ptr_out++;
ptr_in++;
}
*ptr_out=0;
pushvchar(c1, 100); /* Returning the first output parameter */
pushvchar(c2, 100); /* Returning the second output parameter */
return 2; /* Returning the number of output parameters (MANDATORY) */
}
#include "f2c/fglExt.h"
int fgl_split(int);
UsrFunction usrFunctions[]={
{ "fgl_split", fgl_split, 1, 2 },
{ 0,0,0,0 }
};
gcc -c -I $FGLDIR/include -fPIC split.c gcc -c -I $FGLDIR/include -fPIC splitext.c
gcc -shared -o libsplit.so split.o splitext.o -L$FGLDIR/lib -lfgl
IMPORT libsplit
MAIN
DEFINE str1, str2 VARCHAR(100)
CALL fgl_split("Hello World") RETURNING str1, str2
DISPLAY "1: ", str1
DISPLAY "2: ", str2
END MAIN
fglcomp split.4gl
fglrun split