DLCORE is a program and a library. Together they provide a mechanism for building programs that dynamically load/link code to extend their functionality. The collection of procedures and symbols that get loaded and link are called a package. Each package is described by a text file which contains commands to the DLCORE load/link engine. These commands allow the user to completely specify how to add a package to a running process. The process may use the DLCORE library procedures to inspect and manipulate packages and their procedures and symbols. The DLCORE API and the load/link engine scripting language are purposely designed to be very simple and provide only lowlevel functions. --------------------------------------------------------------------------- Need structure that represents the symbols contained in a .o or .a file. Need to link that to a structure that represents a package. --------------------------------------------------------------------------- Basic functionality: run package file through preprocessor add a package remove a package determine unresolved symbols link a .o file link against a .a file use a search path to locate files (.o and .a) to load/link allow user to modify load/link search path --------------------------------------------------------------------------- The DLCORE program maintains an external pointer to a procedure called dlcore_main which should exist after all of the user's intitial package has been added. The procedure may be defined as one of the symbols in the user's package or one of the packages that it relies upon. After the initial package is sucessfully added the dlcore_main procedure will be called to hand control over to the user's application. Additionally each package may define procedures to be executed after being sucessfully added, after failing to be added and/or before being removed. The DLCORE engine will execute these procedures at the predetermined time. --------------------------------------------------------------------------- The scripting language used to describe packages is very simple: package_name name link filename call funcname arg arg is either a sting literal, a character literal, an integer, a double or a special value represented by an escape sequence. Escape sequences include: %pkg - string name of package, %pkgfile - string name of package file, %addr sym - the resolved address of the symbol, %linkname - filename given to lask link command