#ifndef LIBRARIES_TRACKER_H
#define LIBRARIES_TRACKER_H

/*
** Filename: libraries/tracker.h
** Revision: 4.0
** Date: 92/25/08
**
** Definitions for use when using tracker.library
**
** (C) Arnold Schommer
**     Erikaweg 16
**     4005 Meerbusch-Strümp, Germany
*/

#ifndef EXEC_ALERTS_H
#include <exec/alerts.h>
#endif
#ifndef EXEC_TYPES_H
#include <exec/types.h>
#endif
#ifndef GRAPHICS_GFX_H
#include <graphics/gfx.h>   /* wegen PLANEPTR */
#endif
#ifndef DOS_DOS_H
#include <dos/dos.h>        /* wegen BPTR */
#endif

/* Prototypes: */

struct Library *TRK_OpenLibrary( UBYTE *libName, ULONG version );
struct Library *TRK_OpenStdLibrary( ULONG number, version );
void TRK_CloseLibrary( struct Library *library );
APTR TRK_AllocMem( ULONG byteSize, ULONG requirements );
void TRK_FreeMem( APTR memoryBlock );
BYTE TRK_OpenDevice( UBYTE *devName, ULONG unit,
                 struct IORequest *ioRequest, ULONG flags );
void TRK_CloseDevice( struct IORequest *ioRequest );
struct MsgPort *TRK_CreatePort( UBYTE *name, long pri );
void TRK_DeletePort( struct MsgPort *io );
struct IORequest *TRK_CreateExtIO( struct MsgPort *msg, long size );
void TRK_DeleteExtIO( struct IORequest *io );
#define TRK_CreateStdIO(port) \
 ( (struct IOStdReq *)TRK_CreateExtIO(port,sizeof(struct IOStdReq)) )
#define TRK_DeleteStdIO TRK_DeleteExtIO
BYTE TRK_AllocSignal( long signalNum );
void TRK_FreeSignal( long signalNum );
BPTR TRK_Open( UBYTE *name, long accessMode );
BPTR TRK_OpenFromLock( BPTR lock );
LONG TRK_Close( BPTR file );
BPTR TRK_Lock( UBYTE *name, long type );
BPTR TRK_DupLock( BPTR lock );
BPTR TRK_DupLockFromFH( BPTR fh );
void TRK_UnLock( BPTR lock );
struct FileInfoBlock *TRK_Examine( BPTR lock );
struct FileInfoBlock *TRK_ExamineFH( BPTR fh );
struct FileInfoBlock *TRK_ExamineName( UBYTE *name );
LONG TRK_ExNext( struct FileInfoBlock *fileInfoBlock );
void TRK_FreeFIB( struct FileInfoBlock *fib );
struct InfoData *TRK_Info( BPTR lock );
struct InfoData *TRK_InfoName( UBYTE *name );
BPTR TRK_LoadSeg( UBYTE *name );
BPTR TRK_NewLoadSeg( UBYTE *file, struct TagItem *tags );
void TRK_UnLoadSeg( BPTR seglist );
APTR TRK_AllocDosObject( ULONG type, struct TagItem *tags );
void TRK_FreeDosObject( APTR ptr );
BOOL TRK_StartNotify( struct NotifyRequest *notify );
void TRK_EndNotify( struct NotifyRequest *notify );
struct TextFont *TRK_OpenFont( struct TextAttr *textAttr );
struct TextFont *TRK_OpenDiskFont( struct TextAttr *textAttr );
void TRK_CloseFont( struct TextFont *textFont );
PLANEPTR TRK_AllocRaster( ULONG width, ULONG height );
void TRK_FreeRaster( PLANEPTR p );
WORD TRK_GetSprite( struct SimpleSprite *sprite, long num );
void TRK_FreeSprite( long num );
struct Window *TRK_OpenWindow( struct NewWindow *newWindow );
struct Window *TRK_OpenWindowTagList( struct NewWindow *newWindow,
                                      struct TagItem *tagList );
struct Window *TRK_OpenWdOnPubScreen( struct NewWindow *newWindow,
                                      UBYTE *pubscreen );
struct Window *TRK_OpenWdOnPSTagList( struct NewWindow *newWindow,
                                      struct TagItem *tagList,
                                      UBYTE *pubscreen );
void TRK_CloseWindow( struct Window *window );
struct Screen *TRK_OpenScreen( struct NewScreen *newScreen );
struct Screen *TRK_OpenScreenTagList( struct NewScreen *newScreen,
                                      struct TagItem *tagList );
BOOL TRK_CloseScreen( struct Screen *screen );
BOOL TRK_SetMenuStrip( struct Window *window, struct Menu *menu );
void TRK_ClearMenuStrip( struct Window *window );
/* BOOL TRK_ResetMenuStrip( struct Window *window, struct Menu *menu ); */
/* BOOL TRK_Request( struct Requester *requester, struct Window *window ); */
/* void TRK_EndRequest( struct Requester *requester ); */
/* BOOL TRK_SetDMRequest( struct Window *window, struct Requester *requester ); */
/* BOOL TRK_ClearDMRequest( struct Window *window ); */
/* struct Window *TRK_BuildSysRequest( struct Window *window, */
/*                                     struct IntuiText *body, *posText, */
/*                                                      *negText, */
/*                                     ULONG flags, width, height ); */
/* void TRK_FreeSysRequest( struct Window *window ); */
/* struct Preferences *TRK_GetPrefs( long size ); */
/* struct Preferences *TRK_GetDefPrefs( long size ); */
/* struct Preferences *TRK_SetPrefs( struct Preferences *preferences, */
/*                                   long inform, BOOL freeflag ); */
/* void TRK_FreePrefs( struct Preferences *prefs ); */
/* struct Screen *TRK_LockPubScreen( UBYTE *name ); */
/* void TRK_UnlockPubScreen( UBYTE *name, struct Screen *screen ); */
/* struct DrawInfo *TRK_GetScreenDrawInfo( struct Screen *screen ); */
/* struct DrawInfo *TRK_GetScDIPubScreen( UBYTE *psname ); */
/* void TRK_FreeScreenDrawInfo( struct DrawInfo *drawInfo ); */

/* Schlüsselnummern für die Standard-Libraries bei OpenStdLibrary: */

#define STDLIB_ASL                0
#define STDLIB_COMMODITIES        4
#define STDLIB_CX                 8
#define STDLIB_DISKFONT          12
#define STDLIB_DOS               16
#define STDLIB_EXPANSION         20
#define STDLIB_GADTOOLS          24
#define STDLIB_GRAPHICS          28
#define STDLIB_ICON              32
#define STDLIB_IFFPARSE          36
#define STDLIB_INFO              40
#define STDLIB_INTUITION         44
#define STDLIB_KEYMAP            48
#define STDLIB_LAYERS            52
#define STDLIB_MATHFFP           56
#define STDLIB_MATHIEEEDOUBBAS   60
#define STDLIB_MATHIEEEDOUBTRANS 64
#define STDLIB_MATHIEEESINGBAS   68
#define STDLIB_MATHIEEESINGTRANS 72
#define STDLIB_MATHTRANS         76
#define STDLIB_REXXSUPPORT       80
#define STDLIB_REXXSYSLIB        84
#define STDLIB_TRANSLATOR        88
#define STDLIB_UTILITY           92
#define STDLIB_VERSION           96
#define STDLIB_WORKBENCH        100
#define STDLIB_ARP              104
#define STDLIB_REQ              108

/* Kennung für TrackerLib-Alerts: */

#define AN_TrackerLib 0x0C000000
/* Ein Task will auf die Library zugreifen, obwohl er sie nicht geöffnet
   hat:                                                                  */
#define AN_Tracker_illegal_Task (AT_DeadEnd|AN_TrackerLib|0x01)
/* Etwas soll freigegeben werden, ist aber garnicht registriert: */
#define AN_Tracker_double_free (AT_DeadEnd|AN_TrackerLib|0x02)
/* Etwas von unbekanntem Typ soll freigegeben werden: */
#define AN_Tracker_illegal_Type (AT_DeadEnd|AN_TrackerLib|0x03)

#endif
