/*
 *		PATCHES.H											vi:ts=4
 *
 *      Copyright (c) Eddy Carroll, September 1994.
 *
 *		Contains definitions used by the patches module
 */

#define reg_d0	register __d0
#define reg_d1	register __d1
#define reg_d2	register __d2
#define reg_d3	register __d3
#define reg_d4	register __d4
#define reg_d5	register __d5
#define reg_d6	register __d6
#define reg_d7	register __d7
#define reg_a0	register __a0
#define reg_a1	register __a1
#define reg_a2	register __a2
#define reg_a3	register __a3
#define reg_a4	register __a4
#define reg_a5	register __a5
#define reg_a6	register __a6

typedef enum {
	DOS_LIB,
	EXEC_LIB,
	INTUITION_LIB,
	GRAPHICS_LIB,
	ICON_LIB,
	NUM_LIBS
} LibNumbers;

/*
 *		Now type definitions for all the functions to be replaced, so that we
 *		can easily call the original function from our replacement function.
 */
#define DFT(f)	typedef __asm ULONG (*FP_##f)	/* Define Function Type  */
#define LBASE	reg_a6 void *
typedef struct TagItem *TAGPTR;

/*
 *		Dos prototypes
 */
DFT(AddDosEntry)	(reg_d1 struct DosList *, LBASE);
DFT(CurrentDir)		(reg_d1 BPTR,  	LBASE);
DFT(DeleteFile)		(reg_d1 char *,	LBASE);
DFT(Execute)		(reg_d1 char *,	reg_d2 BPTR, 	reg_d3 BPTR, LBASE);
DFT(GetVar)			(reg_d1 char *,	reg_d2 char *,	reg_d3 ULONG, reg_d4 ULONG,
					 LBASE);
DFT(FindVar)		(reg_d1 char *,	reg_d2 ULONG,	LBASE);
DFT(LoadSeg)		(reg_d1 char *,	LBASE);
DFT(NewLoadSeg)		(reg_d1 char *,	reg_d2 TAGPTR,	LBASE);
DFT(Lock)			(reg_d1 char *,	reg_d2 LONG, 	LBASE);
DFT(Open)			(reg_d1 char *,	reg_d2 ULONG,	LBASE);
DFT(CreateDir)		(reg_d1 char *,	LBASE);
DFT(MakeLink)		(reg_d1 char *,	reg_d2 LONG, 	reg_d3 LONG, LBASE);
DFT(Rename)			(reg_d1 char *,	reg_d2 char *,	LBASE);
DFT(RunCommand)		(reg_d1 BPTR,	reg_d2 ULONG,	reg_d3 char *,
					 reg_d4 ULONG,	LBASE);
DFT(SetVar)			(reg_d1 char *,	reg_d2 char *,	reg_d3 ULONG, reg_d4 ULONG,
					 LBASE);
DFT(DeleteVar)		(reg_d1 char *,	reg_d2 ULONG,	LBASE);
DFT(SystemTagList)	(reg_d1 char *,	reg_d2 TAGPTR,	LBASE);
				
/*
 *		Exec prototypes
 */
DFT(FindPort)		(reg_a1 char *,	LBASE);
DFT(FindResident)	(reg_a1 char *, LBASE);
DFT(FindResource)	(reg_a1 char *, LBASE);
DFT(FindSemaphore)	(reg_a1 char *, LBASE);
DFT(FindTask)		(reg_a1 char *, LBASE);
DFT(OpenDevice)		(reg_a0 char *, reg_d0 long,	reg_a1 struct IORequest *,
					 reg_d1 long,	LBASE);
DFT(OpenLibrary)	(reg_a1 char *,	reg_d0 long,	LBASE);
DFT(OpenResource)	(reg_a1 char *,	LBASE);
DFT(GetMsg)			(reg_a0 struct MsgPort *,		LBASE);
DFT(PutMsg)			(reg_a0 struct MsgPort *, reg_a1 struct Message *, LBASE);

/*
 *		Graphics, Intuition and Icon library prototypes
 */
DFT(OpenFont)		(reg_a0 struct TextAttr *, LBASE);
DFT(LockPubScreen)	(reg_a0 char *,  LBASE);
DFT(FindToolType)	(reg_a0 char **, reg_a1 char *,	LBASE);
DFT(MatchToolValue)	(reg_a0 char *,  reg_a1 char *, LBASE);

/*
 *		Dos library function offsets
 */
#define LVO_AddDosEntry		-678
#define LVO_CurrentDir		-126
#define LVO_DeleteFile		-72
#define LVO_Execute			-222
#define LVO_GetVar			-906
#define LVO_FindVar			-918
#define LVO_LoadSeg			-150
#define LVO_NewLoadSeg		-768
#define LVO_Lock			-84
#define LVO_Open			-30
#define LVO_CreateDir		-120
#define LVO_MakeLink		-444
#define LVO_Rename			-78
#define LVO_RunCommand		-504
#define LVO_SetVar			-900
#define LVO_DeleteVar		-912
#define LVO_SystemTagList	-606

/*
 *		Exec library function offsets
 */
#define LVO_FindPort		-390
#define LVO_FindResident	-96
#define LVO_FindSemaphore	-594
#define LVO_FindTask		-294
#define LVO_OpenDevice		-444
#define LVO_OpenLibrary		-552
#define LVO_OpenResource	-498
#define LVO_GetMsg			-372
#define LVO_PutMsg			-366

/*
 *		Graphics, Intuition and Icon library function offsets
 */
#define LVO_OpenFont		-72
#define LVO_LockPubScreen	-510
#define LVO_FindToolType	-96
#define LVO_MatchToolValue	-102
