#ifndef _INLINE_UTILITY_H
#define _INLINE_UTILITY_H

#include <sys/cdefs.h>
#include <inline/stubs.h>

__BEGIN_DECLS

#ifndef BASE_EXT_DECL
#define BASE_EXT_DECL extern struct UtilityBase*  UtilityBase;
#endif
#ifndef BASE_PAR_DECL
#define BASE_PAR_DECL
#define BASE_PAR_DECL0 void
#endif
#ifndef BASE_NAME
#define BASE_NAME UtilityBase
#endif

static __inline BOOL 
AddNamedObject (BASE_PAR_DECL struct NamedObject *nameSpace,struct NamedObject *object)
{
  BASE_EXT_DECL
  register BOOL  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register struct NamedObject *a0 __asm("a0") = nameSpace;
  register struct NamedObject *a1 __asm("a1") = object;
  __asm __volatile ("jsr a6@(-0xde)"
  : "=r" (_res)
  : "r" (a6), "r" (a0), "r" (a1)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline struct NamedObject *
AllocNamedObjectA (BASE_PAR_DECL STRPTR name,struct TagItem *tagList)
{
  BASE_EXT_DECL
  register struct NamedObject * _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register STRPTR a0 __asm("a0") = name;
  register struct TagItem *a1 __asm("a1") = tagList;
  __asm __volatile ("jsr a6@(-0xe4)"
  : "=r" (_res)
  : "r" (a6), "r" (a0), "r" (a1)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline struct TagItem *
AllocateTagItems (BASE_PAR_DECL unsigned long numTags)
{
  BASE_EXT_DECL
  register struct TagItem * _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register unsigned long d0 __asm("d0") = numTags;
  __asm __volatile ("jsr a6@(-0x42)"
  : "=r" (_res)
  : "r" (a6), "r" (d0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline void 
Amiga2Date (BASE_PAR_DECL unsigned long seconds,struct ClockData *result)
{
  BASE_EXT_DECL
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register unsigned long d0 __asm("d0") = seconds;
  register struct ClockData *a0 __asm("a0") = result;
  __asm __volatile ("jsr a6@(-0x78)"
  : /* no output */
  : "r" (a6), "r" (d0), "r" (a0)
  : "a0","a1","d0","d1", "memory");
}
static __inline void 
ApplyTagChanges (BASE_PAR_DECL struct TagItem *list,struct TagItem *changeList)
{
  BASE_EXT_DECL
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register struct TagItem *a0 __asm("a0") = list;
  register struct TagItem *a1 __asm("a1") = changeList;
  __asm __volatile ("jsr a6@(-0xba)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (a1)
  : "a0","a1","d0","d1", "memory");
}
static __inline LONG 
AttemptRemNamedObject (BASE_PAR_DECL struct NamedObject *object)
{
  BASE_EXT_DECL
  register LONG  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register struct NamedObject *a0 __asm("a0") = object;
  __asm __volatile ("jsr a6@(-0xea)"
  : "=r" (_res)
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline ULONG 
CallHookPkt (BASE_PAR_DECL struct Hook *hook,APTR object,APTR paramPacket)
{
  BASE_EXT_DECL
  register ULONG  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register struct Hook *a0 __asm("a0") = hook;
  register APTR a2 __asm("a2") = object;
  register APTR a1 __asm("a1") = paramPacket;
  __asm __volatile ("jsr a6@(-0x66)"
  : "=r" (_res)
  : "r" (a6), "r" (a0), "r" (a2), "r" (a1)
  : "a0","a1","a2","d0","d1", "memory");
  return _res;
}
static __inline ULONG 
CheckDate (BASE_PAR_DECL struct ClockData *date)
{
  BASE_EXT_DECL
  register ULONG  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register struct ClockData *a0 __asm("a0") = date;
  __asm __volatile ("jsr a6@(-0x84)"
  : "=r" (_res)
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline struct TagItem *
CloneTagItems (BASE_PAR_DECL struct TagItem *tagList)
{
  BASE_EXT_DECL
  register struct TagItem * _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register struct TagItem *a0 __asm("a0") = tagList;
  __asm __volatile ("jsr a6@(-0x48)"
  : "=r" (_res)
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline ULONG 
Date2Amiga (BASE_PAR_DECL struct ClockData *date)
{
  BASE_EXT_DECL
  register ULONG  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register struct ClockData *a0 __asm("a0") = date;
  __asm __volatile ("jsr a6@(-0x7e)"
  : "=r" (_res)
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline void 
FilterTagChanges (BASE_PAR_DECL struct TagItem *changeList,struct TagItem *originalList,unsigned long apply)
{
  BASE_EXT_DECL
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register struct TagItem *a0 __asm("a0") = changeList;
  register struct TagItem *a1 __asm("a1") = originalList;
  register unsigned long d0 __asm("d0") = apply;
  __asm __volatile ("jsr a6@(-0x36)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (a1), "r" (d0)
  : "a0","a1","d0","d1", "memory");
}
static __inline ULONG 
FilterTagItems (BASE_PAR_DECL struct TagItem *tagList,Tag *filterArray,unsigned long logic)
{
  BASE_EXT_DECL
  register ULONG  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register struct TagItem *a0 __asm("a0") = tagList;
  register Tag *a1 __asm("a1") = filterArray;
  register unsigned long d0 __asm("d0") = logic;
  __asm __volatile ("jsr a6@(-0x60)"
  : "=r" (_res)
  : "r" (a6), "r" (a0), "r" (a1), "r" (d0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline struct NamedObject *
FindNamedObject (BASE_PAR_DECL struct NamedObject *nameSpace,STRPTR name,struct NamedObject *lastObject)
{
  BASE_EXT_DECL
  register struct NamedObject * _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register struct NamedObject *a0 __asm("a0") = nameSpace;
  register STRPTR a1 __asm("a1") = name;
  register struct NamedObject *a2 __asm("a2") = lastObject;
  __asm __volatile ("jsr a6@(-0xf0)"
  : "=r" (_res)
  : "r" (a6), "r" (a0), "r" (a1), "r" (a2)
  : "a0","a1","a2","d0","d1", "memory");
  return _res;
}
static __inline struct TagItem *
FindTagItem (BASE_PAR_DECL Tag tagVal,struct TagItem *tagList)
{
  BASE_EXT_DECL
  register struct TagItem * _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register Tag d0 __asm("d0") = tagVal;
  register struct TagItem *a0 __asm("a0") = tagList;
  __asm __volatile ("jsr a6@(-0x1e)"
  : "=r" (_res)
  : "r" (a6), "r" (d0), "r" (a0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline void 
FreeNamedObject (BASE_PAR_DECL struct NamedObject *object)
{
  BASE_EXT_DECL
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register struct NamedObject *a0 __asm("a0") = object;
  __asm __volatile ("jsr a6@(-0xf6)"
  : /* no output */
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
}
static __inline void 
FreeTagItems (BASE_PAR_DECL struct TagItem *tagList)
{
  BASE_EXT_DECL
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register struct TagItem *a0 __asm("a0") = tagList;
  __asm __volatile ("jsr a6@(-0x4e)"
  : /* no output */
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
}
static __inline ULONG 
GetTagData (BASE_PAR_DECL Tag tagValue,unsigned long defaultVal,struct TagItem *tagList)
{
  BASE_EXT_DECL
  register ULONG  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register Tag d0 __asm("d0") = tagValue;
  register unsigned long d1 __asm("d1") = defaultVal;
  register struct TagItem *a0 __asm("a0") = tagList;
  __asm __volatile ("jsr a6@(-0x24)"
  : "=r" (_res)
  : "r" (a6), "r" (d0), "r" (d1), "r" (a0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline ULONG 
GetUniqueID (BASE_PAR_DECL0)
{
  BASE_EXT_DECL
  register ULONG  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  __asm __volatile ("jsr a6@(-0x10e)"
  : "=r" (_res)
  : "r" (a6)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline void 
MapTags (BASE_PAR_DECL struct TagItem *tagList,struct TagItem *mapList,unsigned long mapType)
{
  BASE_EXT_DECL
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register struct TagItem *a0 __asm("a0") = tagList;
  register struct TagItem *a1 __asm("a1") = mapList;
  register unsigned long d0 __asm("d0") = mapType;
  __asm __volatile ("jsr a6@(-0x3c)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (a1), "r" (d0)
  : "a0","a1","d0","d1", "memory");
}
static __inline STRPTR 
NamedObjectName (BASE_PAR_DECL struct NamedObject *object)
{
  BASE_EXT_DECL
  register STRPTR  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register struct NamedObject *a0 __asm("a0") = object;
  __asm __volatile ("jsr a6@(-0xfc)"
  : "=r" (_res)
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline struct TagItem *
NextTagItem (BASE_PAR_DECL struct TagItem **tagListPtr)
{
  BASE_EXT_DECL
  register struct TagItem * _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register struct TagItem **a0 __asm("a0") = tagListPtr;
  __asm __volatile ("jsr a6@(-0x30)"
  : "=r" (_res)
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline ULONG 
PackBoolTags (BASE_PAR_DECL unsigned long initialFlags,struct TagItem *tagList,struct TagItem *boolMap)
{
  BASE_EXT_DECL
  register ULONG  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register unsigned long d0 __asm("d0") = initialFlags;
  register struct TagItem *a0 __asm("a0") = tagList;
  register struct TagItem *a1 __asm("a1") = boolMap;
  __asm __volatile ("jsr a6@(-0x2a)"
  : "=r" (_res)
  : "r" (a6), "r" (d0), "r" (a0), "r" (a1)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline ULONG 
PackStructureTags (BASE_PAR_DECL APTR pack,ULONG *packTable,struct TagItem *tagList)
{
  BASE_EXT_DECL
  register ULONG  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register APTR a0 __asm("a0") = pack;
  register ULONG *a1 __asm("a1") = packTable;
  register struct TagItem *a2 __asm("a2") = tagList;
  __asm __volatile ("jsr a6@(-0xd2)"
  : "=r" (_res)
  : "r" (a6), "r" (a0), "r" (a1), "r" (a2)
  : "a0","a1","a2","d0","d1", "memory");
  return _res;
}
static __inline void 
RefreshTagItemClones (BASE_PAR_DECL struct TagItem *clone,struct TagItem *original)
{
  BASE_EXT_DECL
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register struct TagItem *a0 __asm("a0") = clone;
  register struct TagItem *a1 __asm("a1") = original;
  __asm __volatile ("jsr a6@(-0x54)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (a1)
  : "a0","a1","d0","d1", "memory");
}
static __inline void 
ReleaseNamedObject (BASE_PAR_DECL struct NamedObject *object)
{
  BASE_EXT_DECL
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register struct NamedObject *a0 __asm("a0") = object;
  __asm __volatile ("jsr a6@(-0x102)"
  : /* no output */
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
}
static __inline void 
RemNamedObject (BASE_PAR_DECL struct NamedObject *object,struct Message *message)
{
  BASE_EXT_DECL
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register struct NamedObject *a0 __asm("a0") = object;
  register struct Message *a1 __asm("a1") = message;
  __asm __volatile ("jsr a6@(-0x108)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (a1)
  : "a0","a1","d0","d1", "memory");
}
static __inline LONG 
SDivMod32 (BASE_PAR_DECL long dividend,long divisor)
{
  BASE_EXT_DECL
  register LONG  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register long d0 __asm("d0") = dividend;
  register long d1 __asm("d1") = divisor;
  __asm __volatile ("jsr a6@(-0x96)"
  : "=r" (_res)
  : "r" (a6), "r" (d0), "r" (d1)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline LONG 
SMult32 (BASE_PAR_DECL long arg1,long arg2)
{
  BASE_EXT_DECL
  register LONG  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register long d0 __asm("d0") = arg1;
  register long d1 __asm("d1") = arg2;
  __asm __volatile ("jsr a6@(-0x8a)"
  : "=r" (_res)
  : "r" (a6), "r" (d0), "r" (d1)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline LONG 
SMult64 (BASE_PAR_DECL long arg1,long arg2)
{
  BASE_EXT_DECL
  register LONG  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register long d0 __asm("d0") = arg1;
  register long d1 __asm("d1") = arg2;
  __asm __volatile ("jsr a6@(-0xc6)"
  : "=r" (_res)
  : "r" (a6), "r" (d0), "r" (d1)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline LONG 
Stricmp (BASE_PAR_DECL STRPTR string1,STRPTR string2)
{
  BASE_EXT_DECL
  register LONG  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register STRPTR a0 __asm("a0") = string1;
  register STRPTR a1 __asm("a1") = string2;
  __asm __volatile ("jsr a6@(-0xa2)"
  : "=r" (_res)
  : "r" (a6), "r" (a0), "r" (a1)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline LONG 
Strnicmp (BASE_PAR_DECL STRPTR string1,STRPTR string2,long length)
{
  BASE_EXT_DECL
  register LONG  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register STRPTR a0 __asm("a0") = string1;
  register STRPTR a1 __asm("a1") = string2;
  register long d0 __asm("d0") = length;
  __asm __volatile ("jsr a6@(-0xa8)"
  : "=r" (_res)
  : "r" (a6), "r" (a0), "r" (a1), "r" (d0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline BOOL 
TagInArray (BASE_PAR_DECL Tag tagValue,Tag *tagArray)
{
  BASE_EXT_DECL
  register BOOL  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register Tag d0 __asm("d0") = tagValue;
  register Tag *a0 __asm("a0") = tagArray;
  __asm __volatile ("jsr a6@(-0x5a)"
  : "=r" (_res)
  : "r" (a6), "r" (d0), "r" (a0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline UBYTE 
ToLower (BASE_PAR_DECL unsigned long character)
{
  BASE_EXT_DECL
  register UBYTE  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register unsigned long d0 __asm("d0") = character;
  __asm __volatile ("jsr a6@(-0xb4)"
  : "=r" (_res)
  : "r" (a6), "r" (d0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline UBYTE 
ToUpper (BASE_PAR_DECL unsigned long character)
{
  BASE_EXT_DECL
  register UBYTE  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register unsigned long d0 __asm("d0") = character;
  __asm __volatile ("jsr a6@(-0xae)"
  : "=r" (_res)
  : "r" (a6), "r" (d0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline ULONG 
UDivMod32 (BASE_PAR_DECL unsigned long dividend,unsigned long divisor)
{
  BASE_EXT_DECL
  register ULONG  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register unsigned long d0 __asm("d0") = dividend;
  register unsigned long d1 __asm("d1") = divisor;
  __asm __volatile ("jsr a6@(-0x9c)"
  : "=r" (_res)
  : "r" (a6), "r" (d0), "r" (d1)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline ULONG 
UMult32 (BASE_PAR_DECL unsigned long arg1,unsigned long arg2)
{
  BASE_EXT_DECL
  register ULONG  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register unsigned long d0 __asm("d0") = arg1;
  register unsigned long d1 __asm("d1") = arg2;
  __asm __volatile ("jsr a6@(-0x90)"
  : "=r" (_res)
  : "r" (a6), "r" (d0), "r" (d1)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline ULONG 
UMult64 (BASE_PAR_DECL unsigned long arg1,unsigned long arg2)
{
  BASE_EXT_DECL
  register ULONG  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register unsigned long d0 __asm("d0") = arg1;
  register unsigned long d1 __asm("d1") = arg2;
  __asm __volatile ("jsr a6@(-0xcc)"
  : "=r" (_res)
  : "r" (a6), "r" (d0), "r" (d1)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline ULONG 
UnpackStructureTags (BASE_PAR_DECL APTR pack,ULONG *packTable,struct TagItem *tagList)
{
  BASE_EXT_DECL
  register ULONG  _res  __asm("d0");
  register struct UtilityBase* a6 __asm("a6") = BASE_NAME;
  register APTR a0 __asm("a0") = pack;
  register ULONG *a1 __asm("a1") = packTable;
  register struct TagItem *a2 __asm("a2") = tagList;
  __asm __volatile ("jsr a6@(-0xd8)"
  : "=r" (_res)
  : "r" (a6), "r" (a0), "r" (a1), "r" (a2)
  : "a0","a1","a2","d0","d1", "memory");
  return _res;
}
#undef BASE_EXT_DECL
#undef BASE_PAR_DECL
#undef BASE_PAR_DECL0
#undef BASE_NAME

__END_DECLS

#endif /* _INLINE_UTILITY_H */
