GTK-Server is a flexible, easy to use, scriptable interface to dynamic link libraries via a DynaCall or FFI link. Peter van Eerten (author) has created an extensive library of Gtk based library definitions, macros and a function wrapper library he calls HUG. You can interface with GTK-Server with just about any scripting language, interpreter or compiler using a DLL, TCP/UDP, FIFO or named pipes connection. The following examples demonstrate dynamic scripting of libraries and low level resource with GTK-Server and providing real time API syntax checking against it's definitions. Feel free to use any of the following API definition as a start in the language of your choice.
I have registered the
IDLL.INFO domain as a repository for interpreted dynamic link library definitions that could be used by any language using the GTK-Server interface.
DECLARE SUB DLL ALIAS "_gtk" LIB "gtk-server"
DLL("gtk_server_require libcurses.so")
DLL("gtk_server_define initscr NONE LONG 0")
DLL("gtk_server_define move NONE INT 2 INT INT")
DLL("gtk_server_define addstr NONE INT 1 STRING")
DLL("gtk_server_define start_color NONE INT 0")
DLL("gtk_server_define init_pair NONE INT 3 INT INT INT")
DLL("gtk_server_define color_set NONE INT 2 INT NULL")
DLL("gtk_server_define getch NONE INT 0")
DLL("gtk_server_define endwin NONE INT 0")
DLL("initscr")
DLL("move 0 25")
DLL("addstr \"ScriptBasic Console Color Test\"")
DLL("start_color")
display_line = 1
FOR color = 0 to 255
DLL("init_pair " & color & " " & 256 - color & " " & color)
DLL("color_set " & color)
IF color % 16 = 0 THEN
display_line += 1
DLL("move " & display_line & " 3")
END IF
DLL("addstr \"" & FORMAT("%~ 000 ~", color) & "\"")
NEXT
DLL("move 22 0")
DLL("getch")
DLL("endwin")

' SQLite3 Demo Script
DECLARE SUB DLL ALIAS "_gtk" LIB "gtk-server"
DECLARE SUB VARPTR ALIAS "varptr" LIB "gtk-server"
DLL("gtk_server_require libsqlite3.so")
DLL("gtk_server_define sqlite3_open NONE INT 2 STRING LONG")
DLL("gtk_server_define sqlite3_exec NONE INT 5 LONG STRING INT NULL PTR_STRING")
DLL("gtk_server_define sqlite3_prepare_v2 NONE INT 5 LONG STRING INT PTR_LONG NULL")
DLL("gtk_server_define sqlite3_step NONE INT 1 LONG")
DLL("gtk_server_define sqlite3_column_text NONE STRING 2 LONG INT")
DLL("gtk_server_define sqlite3_close NONE INT 1 LONG")
CONST SQLITE_ROW = 100
db = 0
dberr = 0
stmt = 0
DLL("sqlite3_open \"testsql\" " & VARPTR(db))
DLL("sqlite3_exec " & db & " \"CREATE TABLE demo(someval INTEGER, sometxt TEXT);\" 0 0 " & VARPTR(dberr))
DLL("sqlite3_exec " & db & " \"INSERT INTO demo VALUES (123, 'Hello');\" 0 0 " & VARPTR(dberr))
DLL("sqlite3_exec " & db & " \"INSERT INTO demo VALUES (234, 'cruel');\" 0 0 " & VARPTR(dberr))
DLL("sqlite3_exec " & db & " \"INSERT INTO demo VALUES (345, 'world');\" 0 0 " & VARPTR(dberr))
result = DLL("sqlite3_prepare_v2 " & db & " \"SELECT * FROM demo;\" -1 " & VARPTR(stmt) & " 0")
SPLIT result BY " " TO ok, stmt
WHILE DLL("sqlite3_step " & stmt) = SQLITE_ROW
PRINT DLL("sqlite3_column_text " & stmt & " " & 0) & " - " & DLL("sqlite3_column_text " & stmt & " " & 1),"\n"
WEND
DLL("sqlite3_close " & db)
Results:jrs@Laptop:~/SB/test$ scriba sqlite3.sb
123 - Hello
234 - cruel
345 - world
jrs@Laptop:~/SB/test$