/* Proto-types for the functions in the st1.lib file */

#ifndef _ST1_H
#define _ST1_H 1
#include <dos/dos.h>
#include <st/asyncio.h>

/* formatting & printing routines */
extern long fpf(long, char *, ...);				/* similar to fprintf */
extern long spf(char *, long, char *, ...);		/* similar to sprintf */
extern short charinstr(char, char *);			/* check for char in string */
extern char *strupper(char *);					/* string to upper */
extern short CmpString(char *, char **, long, long);
extern char	*FindChar(char *, char *);
extern char *SkipChar(char *, char *);


/* extra file routines */
extern void SafeClose(BPTR *);					/* zero filepointer after close*/

/* Async File routines */
extern long					ASigBit(struct AFileHandle *);
extern long					AResult(struct AFileHandle *);
extern long					AStatusQuick(struct AFileHandle *);
extern struct AFileHandle	*AGetReply(struct APort *);
extern long					AStatus(struct AFileHandle *);
extern long					AResultWait(struct AFileHandle *);
extern void					AClose(struct AFileHandle *);
extern void					ASafeClose(struct AFileHandle **);
extern struct AFileHandle	*AMakeFD2AFD(struct APort *, long);
extern struct AFileHandle	*AOpen(struct APort *, char *, long);
extern void					ADeletePort(struct APort *);
extern struct APort			*ACreatePort(void);
extern short ASendPacket(struct AFileHandle *, long, long, long, long, long);

/* Some async support routines */
extern void		AEasyClose(struct AFileHandle *);
extern struct	AFileHandle *AEasyOpen(struct AFileHandle *, char *, long);
extern struct	AFileHandle *AEasyMakeFD2AFD(struct AFileHandle *, long);
extern void		ASafeEasyClose(struct AFileHandle **);


/* Note that the following return result of PREVIOUS operation */
extern long					ARead(struct AFileHandle *, void *, long);
extern long					AWrite(struct AFileHandle *, void *, long);


/* special string0 routines (as used by the text message system) */
extern void SafeFreeString0(struct String0 *);
extern char *AllocString0(struct String0 *, long);


/* text message support stuff */
extern void TextMessageReply(struct TextMessage **);
extern void TextMessageInitReply(struct TextMessage *);
extern void TextMessageCleanup(struct MsgPort *);
extern void TextMessageSafeCleanup(struct MsgPort **);

/* Matt Dillon's optimized byte stuff */
extern __asm short dbcmp(register __a0 void *, register __a1 void *, register __d0 long);
extern __asm void dbmov(register __a0 void *, register __a1 void *, register __d0 long);
extern __asm void dbset(register __a0 void *, register __d0 long, register __d1 unsigned char);
extern __asm void dbzero(register __a0 void *, register __d0 long);

#define BCmp(a,b,c) dbcmp(a,b,c)
#define BMov(a,b,c) dbmov(a,b,c)
#define BZero(a,b)  dbzero(a,b)
#define BSet(a,b,c) dbset(a,b,c)

/* And the little list things */
extern __asm void *nextnode(register __a0 void *);
extern __asm void *gethead(register __a0 void *);
extern __asm void *getsucc(register __a0 void *);
extern __asm void *gettail(register __a0 void *);

#define GetHead(a) gethead(a)
#define GetTail(a) gettail(a)
#define GetSucc(a) getsucc(a)
#define NextNode(a) nextnode(a)

/* the message things */
extern __asm void *waitmsg(register __a2 void *);
#define WaitMsg(a) waitmsg(a)

#endif
