![[Contents]](../images/toc_d.gif) 
![[Index]](../images/index_d.gif) 
![[Help]](../images/help_d.gif) 
![[Retrace]](../images/retrace_d.gif) 
![[Browse <]](../images/prev.gif) 
![[Browse >]](../images/next.gif) 
/*
**  dillo_lib.c
**
**  Contains the __UserLibInit() and __UserLibCleanup() routines for
**  the armadillo.library example shared library.
**
**  © Copyright 1993-1999, Amiga, Inc. All Rights Reserved.
**  Written by John Wiederhirn
**
*/
#include    <exec/types.h>
#include    <clib/exec_protos.h>
#include    <pragmas/exec_pragmas.h>
/* These prototypes are just to keep the compiler happy since we don't
** want them in the distributable proto file.
*/
int __saveds __UserLibInit(void);
void __saveds __UserLibCleanup(void);
/* Following global item (UtilityBase) is created so our library can make
** utility.library calls.  Technically putting it in the near section is a waste
** of memory, but for this example, it serves its purpose.  Note also that we
** don't actually MAKE any Utility calls, but we COULD.
*/
struct Library *UtilityBase = NULL;
struct Library *SysBase = NULL;
/*
*/
int __saveds
__UserLibInit( void )
{
    int retval = 1;
    SysBase = (*((void **)4));
    /* Here we attempt to open Utility library.  Not a particularly good
    ** example, but it gets the point across.  If exec.library could not
    ** be opened (say for a second it couldn't), then __UserLibInit would
    ** return 1 indicating failure (where a return of 0 means success).
    */
    if (UtilityBase = OpenLibrary( "utility.library", 0L ))
        retval = 0;
    return( retval );
}
/* About as basic a routine as you can get, this routine cleans up the library
** by providing a matching CloseLibrary of the Utility library base we opened
** in the __UserLibInit() routine.
*/
void __saveds
__UserLibCleanup( void )
{
    CloseLibrary( UtilityBase );
}