Example: LIB_NAME = libgtk-x11-2.0.so, libgdk-x11-2.0.so, libglib-2.0.so, libgobject-2.0.so
Example: INCLUDE = /etc/gtk-extra.cfg
The ADDRESS returntype is used to return the address of a function in memory. The BASE64 type is used to send base64 encoded binary data to the GTK-server. The POINTER type can be used for generic pointers and non-GTK libraries. The ENUM type is used to define an enumeration name (see below).
The MACRO type can be used in case a user function needs to be registered. In case GTK must execute a user function, the described macro will be used. A MACRO type always needs an DATA type, in which additional data can be specified. Macros are explained in the MACRO section of this manpage.
The 'gtk-server.cfg' file may not contain duplicate function definitions. This is verified
by the GTK-server during startup.
Example: FUNCTION_NAME = gtk_window_new, delete-event, WIDGET, 1, LONG
Please note that enumeration names only may contain integer values. So in a defined GTK function, only at arguments defined as 'INT', 'LONG' or 'ENUM' the GTK-server will check for an enumeration name. If it cannot match an enumeration name, it is assumed there is a real value.
Duplicate enumeration names are not allowed. This is verified by the GTK-server during startup.
Example: ENUM_NAME = GTK_WINDOW_TOPLEVEL, 0
Aliasing also allows the programmer to rename external functions so they comply to the standard of the client language.
Duplicate alias names are not allowed. This is verified by the GTK-server during startup.
Example: ALIAS_NAME = libc_read, read
FUNCTION_NAME = gdk_window_get_pointer, NONE, WIDGET, 4, WIDGET, PTR_INT, PTR_INT, NULL
In this case, a call to 'gdk_window_get_pointer' will return a widget but also the values stored in the second and third argument. The returned result will be formatted in S-expression syntax, just as the GTK-server also accepts S-expression syntax. Next to the type PTR_INT the types PTR_LONG, PTR_FLOAT, PTR_DOUBLE, PTR_STRING, PTR_BOOL and PTR_WIDGET can be used.
$a : GTK_function
GTK_function $1 $2 $3
Each line in the macro may contain only one GTK function. A macro can be invoked with arguments. Within the macro these arguments are denoted with $1, $2, $3 an so on. The $0 points to the macroname itself. It is possible to refer to all arguments at once with $@. A macro can accept up to 9 arguments. If there are more arguments then these are ignored.
Macros may also use variables. Variablenames must start with a dollarsign '$'. After that, only the first letter of the variablename is important, which means that there are at most 26 variables in each macro (lowercase).
Within a macro, it is possible to assign a result of a GTK function to a variable. However, it is important that the colon symbol, which is the assignment operator, is not attached to the variablename or the GTK functionname. For example:
$window : gtk_window_new GTK_WINDOW_TOPLEVEL
Also it is possible to assign a string to a variable. To do this, the string should be preceded by the '&' sign. For example:
$var : &Hello world
Variables in macros are initialized to zero automatically, but keep their values after the macro object has been executed. Afterwards the variables can be retrieved in your clientscript by using the call 'gtk_server_macro_var'. For example:
gtk_server_macro_var <macroname> var
There are a few commands to use in macros. These should be written in capitals. For example, it is possible to perform a relative jump on the condition of the value of a variable. The command 'VALUE' jumps when a variable contains a value not equal to zero, and the command 'EMPTY' jumps when a variable is zero. The command 'JUMP' always jumps, no matter what condition. For example:
$var VALUE 3
In this example, the GTK-server will jump three statements forward in case the variable 'var' is not equal to zero. The commands 'EMPTY', 'VALUE' and 'JUMP' can jump forward and backward, but only within the macro object. Jumps outside the macro will just go to the end of the macro, or to the beginning if the jump is negative.
Next to jumps, a comparison between variables can be made with 'COMPARE'. When two variables are compared, the result of the comparison will be put into the local z-variable. So if the contents of the compared variables are equal, the z-variable will be '0'. Else the local z-variable will be '1'. For example:
$event COMPARE $window
$z EMPTY -5
Also it is possible to setup associative arrays. An associative array is globally visible to all macro's. With associative arrays the main returnvalue of a macro can be connected to another value. This way multiple results can be returned from a macro. An array with one element can be defined as follows:
$ebox ASSOC $pix
If, to another macro, the 'ebox' is passed as an argument, the associated value can be retrieved in that macro as follows:
$pix GET $1
In this example, the 'pix' variable will be assigned the value associated to the first argument of the macro. There is no limit to the amount of associations; associative arrays can be of endless length, for example:
$ebox ASSOC $pix
$pix ASSOC $widget
$widget ASSOC $window
All values can be retrieved using an inverse GET:
$pix GET $1
$widget GET $pix
$window GET $widget
Note that with all operator commands, which are 'GET', 'ASSOC', 'COMPARE', 'VALUE', 'EMPTY', and the ':', the left operand must be a variable.
It is not allowed to define a macro within a macro. Also, duplicate macro names are not allowed. However, macros may invoke other macros. Also, macros may return a value to the client script with the keyword 'RETURN'. For example:
To find out which value is assigned to a variable, the command DEBUG can be used. This will print the result in the logfile, if logging is enabled. Example:
The Highlevel Universal GUI (HUG) defined in the GTK-server configfile is implemented using macro objects.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
Current version of the GTK-server was created with help of many others - see the CREDITS file in the sourcepackage for credits.