Exec provides several ways to add your own libraries to the system library list. One rarely used way is to call loadseg() (a dos library function) to load your library and then use the Exec makelibrary() and addlibrary() functions to initialize your library and add it to the system. makelibrary() allocates space for the code vectors and data area, initializes the library node, and initializes the data area according to your specifications, returning to you a library base pointer. The base pointer may then be passed to addlibrary() to add your library to the system. Another way to initialize and add a library or device to the system is through the use of a resident structure or romtag (see <exec/resident.h>). A romtag allows you to place your library or device in a directory (default LIBS: for libraries, DEVS: for devices) and have the OS automatically load and initialize it when an application tries to open it with openlibrary() or opendevice(). Two additional initialization methods exist for a library or device which is bound to a particular Amiga expansion board. The library or device (containing a romtag) may be placed in the SYS:Expansion drawer, along with an icon containing the Manufacturer and Product number of the board it requires. If the startup-sequence BindDrivers command finds that board in the system, it will load and initialize the matching Expansion drawer device or library. In addition, since 1.3, the Amiga system software supports ROM drivers on expansion boards. See the "expansion library" chapter for additional information on ROM drivers and Expansion drawer drivers. The sample device code in the amiga rom kernel reference manual: Devices volume of this manual set may be conditionally assembled as an Expansion drawer driver. resident (romtag) structure