This directory contains some examples of dynamically loaded modules that may be loaded via the `import' intrinsic function: import ("NAME"); This intrinsic function is available to applications that enable it via a call to the `SLang_init_import' function. Of course, the OS must provide support for dynamic linking. When a slang script contains a line such as import ("NAME"); or import ("NAME", "NAMESPACE"); the interpreter will request that the operating system dynamically link to a shared object called NAME-module.so. In order for such linking to take place, the OS must be able to find the module. The search for the module takes place as follows: First a search takes place along the set of paths returned by the `get_import_module_path' function. If not found, a search is performed along the paths given by the `SLANG_MODULE_PATH' environment variable. Then the search will take place in the path defined by the slang/src/Makefile MODULE_INSTALL_DIR variable. If the module has not been found along any of these paths, a system dependent search will be performed (e.g., using the `LD_LIBRARY_PATH' environment variable). Hence, if you are writing a module that will work with all slang applications, then module should be installed in the path specified by the Makefile variable MODULE_INSTALL_DIR, which by default is $(exec_prefix)/lib/slang/v2/modules for this version of the library. If the module was sucessfully loaded, the slang library will call the function `init_NAME_ns' that NAME-module.so must define. This function must have the prototype: int init_NAME_module_ns (char *namespace); and shall return 0 upon success, or -1 if an error occurred. The namespace argument corresponds to the second (optional) parameter of the import intrinsic indicating that the module should be imported into the specified namespace. To this end, the module must call one of the SLns_* functions to load intrinsics into the namespace. ****NOTE**** In order to support the inclusion of the module into more than one namespace, this function may be called multiple times. Hence, the function should be coded in such a way that initialization code that should execute no more than once does so only once. See, e.g., the "register_pcre_type" function in pcre-module.c for an explicit example. Module writers are encouraged to supply a script called NAME.sl that looks like: import ("NAME"); % Optional code... provide ("NAME"); Then a user would be able to load the module by using, e.g., require ("NAME"); ************* Optionally, the module may define a function called `deinit_NAME_module' that will be called by the interpreter to deinitialize the module. This function must have the prototype: void deinit_NAME_module (void); To ensure the correct prototypes for these functions, the module should include the line: SLANG_MODULE(name); SLANG_MODULE is a macro that expands into function prototypes. See the examples in this directory for more information. To run these modules, use the slsh program in ../slsh/. slsh.c is a program that embeds the interpreter and may be used to test slang scripts. In fact, it may be used to create unix executable scripts via, e.g., #! /usr/bin/env slsh as the first line of the script. See ../slsh/scripts subdirectory for examples of this approach.