#ifndef  CLIB_UTILITY_PROTOS_H
#define  CLIB_UTILITY_PROTOS_H

#ifndef  EXEC_TYPES_H
#include <exec/types.h>
#endif
#ifndef  EXEC_PORTS_H
#include <exec/ports.h>
#endif
#ifndef  UTILITY_TAGITEM_H
#include <utility/tagitem.h>
#endif
#ifndef  UTILITY_DATE_H
/*#include <utility/date.h> */
#endif
#ifndef  UTILITY_HOOKS_H
#include <utility/hooks.h>
#endif
#ifndef  UTILITY_NAME_H
/*#include <utility/name.h> */
#endif

#ifdef __cplusplus
extern "C" {
#endif

struct TagItem *FindTagItem( Tag tagVal, struct TagItem *tagList );
ULONG GetTagData( Tag tagValue, unsigned long defaultVal,
        struct TagItem *tagList );
ULONG PackBoolTags( unsigned long initialFlags, struct TagItem *tagList,
        struct TagItem *boolMap );
struct TagItem *NextTagItem( struct TagItem **tagListPtr );

LONG SMult32( long arg1, long arg2 );
ULONG UMult32( unsigned long arg1, unsigned long arg2 );
LONG SDivMod32( long dividend, long divisor );
ULONG UDivMod32( unsigned long dividend, unsigned long divisor );

LONG Stricmp( STRPTR string1, STRPTR string2 );
LONG Strnicmp( STRPTR string1, STRPTR string2, long length );
UBYTE ToUpper( unsigned long character );
UBYTE ToLower( unsigned long character );









#ifdef __IGNORE_NOT_SUPPORTED__

  void FilterTagChanges(struct TagItem*,struct TagItem*,ULONG);
  void MapTags(struct TagItem*,struct TagItem*,ULONG);
  struct TagItem *AllocateTagItems( unsigned long numTags );
  struct TagItem *CloneTagItems( struct TagItem *tagList );
  void FreeTagItems( struct TagItem *tagList );
  void RefreshTagItemClones( struct TagItem *clone, struct TagItem *original );
  BOOL TagInArray( Tag tagValue, Tag *tagArray );
  ULONG FilterTagItems(struct TagItem*,ULONG*,ULONG);
  ULONG CallHookPkt( struct Hook *hook, APTR object, APTR paramPacket );
  void Amiga2Date( unsigned long seconds, struct ClockData *result );
  ULONG Date2Amiga( struct ClockData *date );
  ULONG CheckDate( struct ClockData *date );
  void ApplyTagChanges( struct TagItem *list, struct TagItem *changeList );
  LONG SMult64( long arg1, long arg2 );
  ULONG UMult64( unsigned long arg1, unsigned long arg2 );
  ULONG PackStructureTags( APTR pack, ULONG *packTable,struct TagItem *tagList );
  ULONG UnpackStructureTags( APTR pack, ULONG *packTable,struct TagItem *tagList );
  BOOL AddNamedObject( struct NamedObject *nameSpace,struct NamedObject *object );
  struct NamedObject *AllocNamedObjectA( STRPTR name, struct TagItem *tagList );
  struct NamedObject *AllocNamedObject( STRPTR name, Tag tag1, ... );
  LONG AttemptRemNamedObject( struct NamedObject *object );
  struct NamedObject *FindNamedObject(struct NamedObject*,STRPTR,struct NamedObject*);
  void FreeNamedObject( struct NamedObject *object );
  STRPTR NamedObjectName( struct NamedObject *object );
  void ReleaseNamedObject( struct NamedObject *object );
  void RemNamedObject( struct NamedObject *object, struct Message *message );
  ULONG GetUniqueID( void );

#else  /** __IGNORE_NOT_SUPPORTED__ **/

#define FilterTagChanges FilterTagChanges_NOT_SUPPORTED
  void FilterTagChanges(struct NOT_SUPPORTED*,struct TagItem*,struct TagItem*,ULONG);
#define MapTags MapTags_NOT_SUPPORTED
  void MapTags(struct NOT_SUPPORTED*,struct TagItem*,struct TagItem*,ULONG);
#define AllocateTagItems AllocateTagItems_NOT_SUPPORTED
  struct TagItem *AllocateTagItems(struct NOT_SUPPORTED*, unsigned long numTags );
#define CloneTagItems CloneTagItems_NOT_SUPPORTED
  struct TagItem *CloneTagItems(struct NOT_SUPPORTED*, struct TagItem *tagList );
#define FreeTagItems FreeTagItems_NOT_SUPPORTED
  void FreeTagItems(struct NOT_SUPPORTED*, struct TagItem *tagList );
#define RefreshTagItemClones RefreshTagItemClones_NOT_SUPPORTED
  void RefreshTagItemClones(struct NOT_SUPPORTED*, struct TagItem *clone, struct TagItem *original );
#define TagInArray TagInArray_NOT_SUPPORTED
  BOOL TagInArray(struct NOT_SUPPORTED*, Tag tagValue, Tag *tagArray );
#define FilterTagItems FilterTagItems_NOT_SUPPORTED
  ULONG FilterTagItems(struct NOT_SUPPORTED*,struct TagItem*,ULONG*,ULONG);
#define CallHookPkt CallHookPkt_NOT_SUPPORTED
p  ULONG CallHookPkt(struct NOT_SUPPORTED*, struct Hook *hook, APTR object, APTR paramPacket );
#define Amiga2Date Amiga2Date_NOT_SUPPORTED
  void Amiga2Date(struct NOT_SUPPORTED*, unsigned long seconds, struct ClockData *result );
#define Date2Amiga Date2Amiga_NOT_SUPPORTED
  ULONG Date2Amiga(struct NOT_SUPPORTED*, struct ClockData *date );
#define CheckDate CheckDate_NOT_SUPPORTED
  ULONG CheckDate(struct NOT_SUPPORTED*, struct ClockData *date );
#define ApplyTagChanges ApplyTagChanges_NOT_SUPPORTED
  void ApplyTagChanges(struct NOT_SUPPORTED*, struct TagItem *list, struct TagItem *changeList );
#define SMult64 SMult64_NOT_SUPPORTED
  LONG SMult64(struct NOT_SUPPORTED*, long arg1, long arg2 );
#define UMult64 UMult64_NOT_SUPPORTED
  ULONG UMult64(struct NOT_SUPPORTED*, unsigned long arg1, unsigned long arg2 );
#define PackStructureTags PackStructureTags_NOT_SUPPORTED
  ULONG PackStructureTags(struct NOT_SUPPORTED*, APTR pack, ULONG *packTable,struct TagItem *tagList );
#define UnpackStructureTags UnpackStructureTags_NOT_SUPPORTED
  ULONG UnpackStructureTags(struct NOT_SUPPORTED*, APTR pack, ULONG *packTable,struct TagItem *tagList );
#define AddNamedObject AddNamedObject_NOT_SUPPORTED
  BOOL AddNamedObject(struct NOT_SUPPORTED*, struct NamedObject *nameSpace,struct NamedObject *object );
#define AllocNamedObjectA AllocNamedObjectA_NOT_SUPPORTED
  struct NamedObject *AllocNamedObjectA(struct NOT_SUPPORTED*, STRPTR name, struct TagItem *tagList );
#define AllocNamedObject AllocNamedObject_NOT_SUPPORTED
  struct NamedObject *AllocNamedObject(struct NOT_SUPPORTED*, STRPTR name, Tag tag1, ... );
#define AttemptRemNamedObject AttemptRemNamedObject_NOT_SUPPORTED
  LONG AttemptRemNamedObject(struct NOT_SUPPORTED*, struct NamedObject *object );
#define FindNamedObject FindNamedObject_NOT_SUPPORTED
  struct NamedObject *FindNamedObject(struct NOT_SUPPORTED*,struct NamedObject*,STRPTR,struct NamedObject*);
#define FreeNamedObject FreeNamedObject_NOT_SUPPORTED
  void FreeNamedObject(struct NOT_SUPPORTED*, struct NamedObject *object );
#define NamedObjectName NamedObjectName_NOT_SUPPORTED
  STRPTR NamedObjectName(struct NOT_SUPPORTED*, struct NamedObject *object );
#define ReleaseNamedObject ReleaseNamedObject_NOT_SUPPORTED
  void ReleaseNamedObject(struct NOT_SUPPORTED*, struct NamedObject *object );
#define RemNamedObject RemNamedObject_NOT_SUPPORTED
  void RemNamedObject(struct NOT_SUPPORTED*, struct NamedObject *object, struct Message *message );
#define GetUniqueID GetUniqueID_NOT_SUPPORTED
  ULONG GetUniqueID(struct NOT_SUPPORTED*);

#endif /** __IGNORE_NOT_SUPPORTED__ **/






#ifdef __cplusplus
}
#endif

#endif   /* CLIB_UTILITY_PROTOS_H */
