# fungw - function gateway

Fungw is a tiny, portable library written in C (C89) that manages dynamic function calls across different programming languages. For this, fungw provides:

- a simplistic scalar data type abstraction, supporting the most common types
- semi-automatic conversion between data types
- contexts that can host objects; objects can host named functions
- a set of optional language bindings to the most popular scripting languages

The main use of fungw is to provide the host application a framework where dynamic parts of the code (e.g. plugins) can register their calls, allowing app-plugin, plugin-app, and plugin-plugin calls.

The second main use is doing all this in a language-agnostic way: any part of the code can be implemented in any of the numerous supported scripting languages (such as awk or lua). The caller of a function doesn't need to know what language the function is implemented in.

The main property of fungw is simplicity. The only API between objects is the plain old function call mechanism.

# What fungw can do

- register your named functions
- convert data types if the caller and callee don't use (or don't even support) the same types
- embed and run scripts written in various scripting languages using a simple, unified, function call based interface - for an application developer this means code for scripting once and be able to use any of the languages available now or in the future
- scripting without having to generate language-dependent wrappers
- multiple scripts can be loaded and ran in parallel without interference

# What fungw can not do

- it does not offer anything else but function calls - no access to variables or advanced features of OOP scripts
- fungw is not OOP - it manipulates flat list of objects and function calls; there's no inheritance, friend classes or any other OOP concept
- it doesn't load, unload or manage plugins; that should be done by a different library, e.g. puplug

# Download & contact

- source, latest development version from VCS: svn://svn.repo.hu/fungw/trunk
- source, release tarballs
- contact the author: IRC or chat

# Developer documentation

- fungw data model: context, engine, object
- Examples: example applications and scripts
- User Call Context: making app->script->app round trips reentrant, free of global vars
- Custom types registered by the app or engines
- For packagers: how to package fungw so the resulting packages are useful for random apps