/* $Revision Header *********************************************************
 *
 *	(C) Copyright 1990 by MXM
 *
 *	Name .....: mxmbase.h
 *	Created ..: Saturday 06-Jan-90 23:27
 *	Revision .: 1
 *
 *	Date            Author          Comment
 *	=========       ========        ====================
 *	14-Jan-90	Olsen		Renames to mxm.library
 *	08-Jan-90       Olsen           Created new functions
 *	08-Jan-90       Olsen           Added PrinterSupport & Joystick
 *	06-Jan-90       Olsen           Created this file!
 *
 * $Revision Header ********************************************************/

#ifndef _MXMBASE_H
#define _MXMBASE_H 1

#ifndef INTUITION_INTUITIONBASE_H
#include <intuition/intuitionbase.h>
#endif

#ifndef LIBRARIES_DOSEXTENS_H
#include <libraries/dosextens.h>
#endif

#ifndef GRAPHICS_GFXBASE_H
#include <graphics/gfxbase.h>
#endif

#ifndef DEVICES_CONSOLE_H
#include <devices/console.h>
#endif

#ifndef DEVICES_PRINTER_H
#include <devices/printer.h>
#endif

#ifndef DEVICES_PRTBASE_H
#include <devices/prtbase.h>
#endif

#ifndef DEVICES_KEYMAP_H
#include <devices/keymap.h>
#endif

#ifndef DEVICES_TIMER_H
#include <devices/timer.h>
#endif

#ifndef DEVICE_INPUT_H
#include <devices/input.h>
#endif

#ifndef EXEC_MEMORY_H
#include <exec/memory.h>
#endif

#ifndef _FUNCTIONS_H
#include <functions.h>
#endif

#define TimeVal		timeval
#define TimeRequest	timerequest

struct MXMBase
{
	struct Library	mb_Lib;

	ULONG		mb_SegList;

	APTR		IntuitionBase;
	APTR		GfxBase;
	APTR		LayersBase;
};

struct PopSupport
{
	ULONG	ps_Flags;

	LONG	ps_TimeOut;
};

struct KeyEquivalent
{
	UBYTE	ke_Normal;
	UBYTE	ke_Shift;
	UBYTE	ke_Control;
	UBYTE	ke_Alternate;
};

struct PrinterSupport
{
	struct IODRPReq			*ps_PrinterIO;
	struct MsgPort			*ps_PrinterPort;

	struct PrinterData		*ps_PrinterData;
	struct PrinterExtendedData	*ps_PrinterExtended;
	struct Preferences		*ps_Preferences;
};

struct DisInfo
{
	struct Gadget	*di_Gadget;
	USHORT		 di_Flags;
};

struct DisableSupport
{
	ULONG		 ds_WindowFlags;

	struct DisInfo	*ds_Gadgets;
	LONG		 ds_NumGadgets;
	LONG		 ds_SysGadgets;
};

#define KC_SHIFT	16

#define KC_CURSORUP	140
#define KC_CURSORDOWN	141
#define KC_CURSORRIGHT	142
#define KC_CURSORLEFT	143

#define KC_FKEY1	129
#define KC_FKEY2	130
#define KC_FKEY3	131
#define KC_FKEY4	132
#define KC_FKEY5	133
#define KC_FKEY6	134
#define KC_FKEY7	135
#define KC_FKEY8	136
#define KC_FKEY9	137
#define KC_FKEY10	138

#define KC_HELP		139

#define PS_CENTER	0x00000001
#define PS_TIMEOUT	0x00000002
#define PS_DONTMOVE	0x00000004
#define PS_BEEP		0x00000008
#define PS_STAYACTIVE	0x00000010

#define POPTITLEHEIGHT 10

#define POPVERIFY	0x0002
#define POPRELEASE	0x0004
#define POPTIDY		0x0008
#define POPPOINTREL	0x0010
#define POPWINREL	0x0020
#define POPREMEMBER	0x0040
#define POPUSED		0x0080
#define POPMOVEPOINTER	0x0200
#define POPLEFTBUTTON	0x1000
#define POPRIGHTBUTTON	0x2000
#define POPTRIGGERDOWN	0x4000
#define POPTRIGGERUP	0x8000

#define IK_NOSPECIAL	0
#define IK_BUILDLIST	1
#define IK_USEIKM	2
#define IK_USELIST	4

#define JOY_UP		1
#define JOY_RIGHT	2
#define JOY_DOWN	4
#define JOY_LEFT	8
#define JOY_FIRE	16

#define byte(Width)	(((Width + 15) >> 4) << 1)
#define LOCAL		static

extern void *			AllocRem();
extern void *			FreeRem();
extern struct Task *		CreateFuncTask();
extern struct Task *		DeleteFuncTask();
extern struct Process *		CreateFuncProc();
extern LONG			MovePointer();
extern LONG			WriteConsole();
extern void *			DeletePrinterSupport();
extern struct PrinterSupport *	AllocPrinterSupport();
extern void			StartPrinterDump();
extern LONG			StopPrinterDump();
extern void			DeleteTimer();
extern struct TimeRequest *	CreateTimer();
extern void			WaitForTimer();
extern void			TimeDelay();
extern LONG			SetNewTime();
extern struct TimeVal *		GetSysTime();
extern LONG			KeyConvert();
extern struct InputEvent *	InvertKey();
extern void			RefreshGadget();
extern LONG			GetLongInt();
extern void			SetLongInt();
extern UBYTE *			GetGadgetString();
extern void			SetGadgetString();
extern LONG			GetPropPosition();
extern void			SetPropPosition();
extern LONG			GetToggleGadget();
extern void			SetToggleGadget();
extern void			SetWaitPointer();
extern LONG			PopRequest();
extern LONG			PopMenu();
extern LONG			CheckSum();
extern void			CryptBlock();
extern LONG			IsASCII();
extern LONG			IsPrintable();
extern LONG			ToUpper();
extern LONG			UStrCmp();
extern LONG			Random();
extern void			FadeTo();
extern void			SetMode();
extern LONG			Joy();
extern struct Window *		FindFileWindow();
extern struct RastPort *	DeleteHiddenRPort();
extern struct RastPort *	CreateHiddenRPort();
extern void			EnableWindow();
extern LONG			DisableWindow();

#endif _MXMBASE_H
