/*
 *    (c)Copyright 1992-1997 Obvious Implementations Corp.  Redistribution and
 *    use is allowed under the terms of the DICE-LICENSE FILE,
 *    DICE-LICENSE.TXT.
 */
# 1 "fails.c" 0
typedef void	       *APTR;
typedef long		LONG;
typedef unsigned long	ULONG;
typedef unsigned long	LONGBITS;
typedef short		WORD;
typedef unsigned short	UWORD;
typedef unsigned short	WORDBITS;
typedef signed char	BYTE;
typedef unsigned char	UBYTE;
typedef unsigned char	BYTEBITS;
typedef short		RPTR;
typedef unsigned char  *STRPTR;
typedef short		SHORT;
typedef unsigned short	USHORT;
typedef short		COUNT;
typedef unsigned short	UCOUNT;
typedef ULONG		CPTR;
typedef float		FLOAT;
typedef double		DOUBLE;
typedef short		BOOL;
typedef unsigned char	TEXT;
struct Node {
    struct  Node *ln_Succ;
    struct  Node *ln_Pred;
    UBYTE   ln_Type;
    BYTE    ln_Pri;
    char    *ln_Name;
};
struct MinNode {
    struct MinNode *mln_Succ;
    struct MinNode *mln_Pred;
};
struct List {
   struct  Node *lh_Head;
   struct  Node *lh_Tail;
   struct  Node *lh_TailPred;
   UBYTE   lh_Type;
   UBYTE   l_pad;
};
struct MinList {
   struct  MinNode *mlh_Head;
   struct  MinNode *mlh_Tail;
   struct  MinNode *mlh_TailPred;
};
struct Interrupt {
    struct  Node is_Node;
    APTR    is_Data;
    void    (*is_Code)();
};
struct IntVector {
    APTR    iv_Data;
    void    (*iv_Code)();
    struct  Node *iv_Node;
};
struct SoftIntList {
    struct List sh_List;
    UWORD  sh_Pad;
};
struct Library {
    struct  Node lib_Node;
    UBYTE   lib_Flags;
    UBYTE   lib_pad;
    UWORD   lib_NegSize;
    UWORD   lib_PosSize;
    UWORD   lib_Version;
    UWORD   lib_Revision;
    APTR    lib_IdString;
    ULONG   lib_Sum;
    UWORD   lib_OpenCnt;
};
struct Task {
    struct  Node tc_Node;
    UBYTE   tc_Flags;
    UBYTE   tc_State;
    BYTE    tc_IDNestCnt;
    BYTE    tc_TDNestCnt;
    ULONG   tc_SigAlloc;
    ULONG   tc_SigWait;
    ULONG   tc_SigRecvd;
    ULONG   tc_SigExcept;
    UWORD   tc_TrapAlloc;
    UWORD   tc_TrapAble;
    APTR    tc_ExceptData;
    APTR    tc_ExceptCode;
    APTR    tc_TrapData;
    APTR    tc_TrapCode;
    APTR    tc_SPReg;
    APTR    tc_SPLower;
    APTR    tc_SPUpper;
    void    (*tc_Switch)();
    void    (*tc_Launch)();
    struct  List tc_MemEntry;
    APTR    tc_UserData;
};
struct ExecBase {
	struct Library LibNode;
	UWORD	SoftVer;
	WORD	LowMemChkSum;
	ULONG	ChkBase;
	APTR	ColdCapture;
	APTR	CoolCapture;
	APTR	WarmCapture;
	APTR	SysStkUpper;
	APTR	SysStkLower;
	ULONG	MaxLocMem;
	APTR	DebugEntry;
	APTR	DebugData;
	APTR	AlertData;
	APTR	MaxExtMem;
	UWORD	ChkSum;
	struct	IntVector IntVects[16];
	struct	Task *ThisTask;
	ULONG	IdleCount;
	ULONG	DispCount;
	UWORD	Quantum;
	UWORD	Elapsed;
	UWORD	SysFlags;
	BYTE	IDNestCnt;
	BYTE	TDNestCnt;
	UWORD	AttnFlags;
	UWORD	AttnResched;
	APTR	ResModules;
	APTR	TaskTrapCode;
	APTR	TaskExceptCode;
	APTR	TaskExitCode;
	ULONG	TaskSigAlloc;
	UWORD	TaskTrapAlloc;
	struct	List MemList;
	struct	List ResourceList;
	struct	List DeviceList;
	struct	List IntrList;
	struct	List LibList;
	struct	List PortList;
	struct	List TaskReady;
	struct	List TaskWait;
	struct	SoftIntList SoftInts[5];
	LONG	LastAlert[4];
	UBYTE	VBlankFrequency;
	UBYTE	PowerSupplyFrequency;
	struct	List SemaphoreList;
	APTR	KickMemPtr;
	APTR	KickTagPtr;
	APTR	KickCheckSum;
	UWORD	ex_Pad0;
	ULONG	ex_Reserved0;
	APTR	ex_RamLibPrivate;
	ULONG	ex_EClockFrequency;
	ULONG	ex_CacheControl;
	ULONG	ex_TaskID;
	ULONG	ex_PuddleSize;
	ULONG	ex_PoolThreshold;
	struct	MinList ex_PublicPool;
	APTR	ex_MMULock;
	UBYTE	ex_Reserved[12];
};
struct MsgPort {
    struct  Node mp_Node;
    UBYTE   mp_Flags;
    UBYTE   mp_SigBit;
    void   *mp_SigTask;
    struct  List mp_MsgList;
};
struct Message {
    struct  Node mn_Node;
    struct  MsgPort *mn_ReplyPort;
    UWORD   mn_Length;
};
struct	MemChunk {
    struct  MemChunk *mc_Next;
    ULONG   mc_Bytes;
};
struct	MemHeader {
    struct  Node mh_Node;
    UWORD   mh_Attributes;
    struct  MemChunk *mh_First;
    APTR    mh_Lower;
    APTR    mh_Upper;
    ULONG   mh_Free;
};
struct	MemEntry {
union {
    ULONG   meu_Reqs;
    APTR    meu_Addr;
    } me_Un;
    ULONG   me_Length;
};
struct	MemList {
    struct  Node ml_Node;
    UWORD   ml_NumEntries;
    struct  MemEntry ml_ME[1];
};
typedef ULONG	Tag;
struct TagItem	{
    Tag		ti_Tag;
    ULONG	ti_Data;
};
struct Custom {
    UWORD   bltddat;
    UWORD   dmaconr;
    UWORD   vposr;
    UWORD   vhposr;
    UWORD   dskdatr;
    UWORD   joy0dat;
    UWORD   joy1dat;
    UWORD   clxdat;
    UWORD   adkconr;
    UWORD   pot0dat;
    UWORD   pot1dat;
    UWORD   potinp;
    UWORD   serdatr;
    UWORD   dskbytr;
    UWORD   intenar;
    UWORD   intreqr;
    APTR    dskpt;
    UWORD   dsklen;
    UWORD   dskdat;
    UWORD   refptr;
    UWORD   vposw;
    UWORD   vhposw;
    UWORD   copcon;
    UWORD   serdat;
    UWORD   serper;
    UWORD   potgo;
    UWORD   joytest;
    UWORD   strequ;
    UWORD   strvbl;
    UWORD   strhor;
    UWORD   strlong;
    UWORD   bltcon0;
    UWORD   bltcon1;
    UWORD   bltafwm;
    UWORD   bltalwm;
    APTR    bltcpt;
    APTR    bltbpt;
    APTR    bltapt;
    APTR    bltdpt;
    UWORD   bltsize;
    UBYTE   pad2d;
    UBYTE   bltcon0l;
    UWORD   bltsizv;
    UWORD   bltsizh;
    UWORD   bltcmod;
    UWORD   bltbmod;
    UWORD   bltamod;
    UWORD   bltdmod;
    UWORD   pad34[4];
    UWORD   bltcdat;
    UWORD   bltbdat;
    UWORD   bltadat;
    UWORD   pad3b[3];
    UWORD deniseid;
    UWORD   dsksync;
    ULONG   cop1lc;
    ULONG   cop2lc;
    UWORD   copjmp1;
    UWORD   copjmp2;
    UWORD   copins;
    UWORD   diwstrt;
    UWORD   diwstop;
    UWORD   ddfstrt;
    UWORD   ddfstop;
    UWORD   dmacon;
    UWORD   clxcon;
    UWORD   intena;
    UWORD   intreq;
    UWORD   adkcon;
    struct  AudChannel {
      UWORD *ac_ptr;
      UWORD ac_len;
      UWORD ac_per;
      UWORD ac_vol;
      UWORD ac_dat;
      UWORD ac_pad[2];
    } aud[4];
    APTR    bplpt[8];
    UWORD   bplcon0;
    UWORD   bplcon1;
    UWORD   bplcon2;
    UWORD   bplcon3;
    UWORD   bpl1mod;
    UWORD   bpl2mod;
    UWORD   bplhmod;
    UWORD   pad86[1];
    UWORD   bpldat[8];
    APTR    sprpt[8];
    struct  SpriteDef {
      UWORD pos;
      UWORD ctl;
      UWORD dataa;
      UWORD datab;
    } spr[8];
    UWORD   color[32];
    UWORD htotal;
    UWORD hsstop;
    UWORD hbstrt;
    UWORD hbstop;
    UWORD vtotal;
    UWORD vsstop;
    UWORD vbstrt;
    UWORD vbstop;
    UWORD sprhstrt;
    UWORD sprhstop;
    UWORD bplhstrt;
    UWORD bplhstop;
    UWORD hhposw;
    UWORD hhposr;
    UWORD beamcon0;
    UWORD hsstrt;
    UWORD vsstrt;
    UWORD hcenter;
    UWORD   diwhigh;
};
struct Rectangle
{
    WORD   MinX,MinY;
    WORD   MaxX,MaxY;
};
struct Rect32
{
    LONG    MinX,MinY;
    LONG    MaxX,MaxY;
};
typedef struct tPoint
{
    WORD x,y;
} Point;
typedef UBYTE *PLANEPTR;
struct BitMap
{
    UWORD   BytesPerRow;
    UWORD   Rows;
    UBYTE   Flags;
    UBYTE   Depth;
    UWORD   pad;
    PLANEPTR Planes[8];
};
struct SemaphoreRequest {
    struct  MinNode sr_Link;
    struct  Task *sr_Waiter;
};
struct SignalSemaphore {
    struct  Node ss_Link;
    WORD    ss_NestCount;
    struct  MinList ss_WaitQueue;
    struct  SemaphoreRequest ss_MultipleLink;
    struct  Task *ss_Owner;
    WORD    ss_QueueCount;
};
struct Semaphore {
    struct MsgPort sm_MsgPort;
    WORD   sm_Bids;
};
struct Hook	{
    struct MinNode	h_MinNode;
    ULONG		(*h_Entry)();
    ULONG		(*h_SubEntry)();
    void		*h_Data;
};
struct Layer
{
    struct  Layer *front,*back;
    struct  ClipRect	*ClipRect;
    struct  RastPort	*rp;
    struct  Rectangle	bounds;
    UBYTE   reserved[4];
    UWORD   priority;
    UWORD   Flags;
    struct  BitMap *SuperBitMap;
    struct  ClipRect *SuperClipRect;
    APTR    Window;
    WORD   Scroll_X,Scroll_Y;
    struct  ClipRect *cr,*cr2,*crnew;
    struct  ClipRect *SuperSaveClipRects;
    struct  ClipRect *_cliprects;
    struct  Layer_Info	*LayerInfo;
    struct  SignalSemaphore Lock;
    struct  Hook *BackFill;
    ULONG   reserved1;
    struct  Region *ClipRegion;
    struct  Region *saveClipRects;
    WORD    Width,Height;
    UBYTE   reserved2[18];
    struct  Region  *DamageList;
};
struct ClipRect
{
    struct  ClipRect *Next;
    struct  ClipRect *prev;
    struct  Layer   *lobs;
    struct  BitMap  *BitMap;
    struct  Rectangle	bounds;
    struct  ClipRect *_p1,*_p2;
    LONG    reserved;
};
struct CopIns
{
    WORD   OpCode;
    union
    {
    struct CopList *nxtlist;
    struct
    {
   union
   {
   WORD   VWaitPos;
   WORD   DestAddr;
   } u1;
   union
   {
   WORD   HWaitPos;
   WORD   DestData;
   } u2;
    } u4;
    } u3;
};
struct cprlist
{
    struct cprlist *Next;
    UWORD   *start;
    WORD   MaxCount;
};
struct CopList
{
    struct  CopList *Next;
    struct  CopList *_CopList;
    struct  ViewPort *_ViewPort;
    struct  CopIns *CopIns;
    struct  CopIns *CopPtr;
    UWORD   *CopLStart;
    UWORD   *CopSStart;
    WORD   Count;
    WORD   MaxCount;
    WORD   DyOffset;
};
struct UCopList
{
    struct UCopList *Next;
    struct CopList  *FirstCopList;
    struct CopList  *CopList;
};
struct copinit
{
    UWORD vsync_hblank[2];
    UWORD diwstart[4];
    UWORD diagstrt[4];
    UWORD sprstrtup[(2*8*2)];
    UWORD wait14[2];
    UWORD norm_hblank[2];
    UWORD genloc[4];
    UWORD jump[(2*2)];
    UWORD wait_forever[2];
    UWORD   sprstop[4];
};
struct	ExtendedNode	{
struct	Node	*xln_Succ;
struct	Node	*xln_Pred;
UBYTE	xln_Type;
BYTE	xln_Pri;
char	*xln_Name;
UBYTE	xln_Subsystem;
UBYTE	xln_Subtype;
LONG	xln_Library;
LONG	(*xln_Init)();
};
struct	MonitorSpec
{
    struct	ExtendedNode	ms_Node;
    UWORD	ms_Flags;
    LONG	ratioh;
    LONG	ratiov;
    UWORD	total_rows;
    UWORD	total_colorclocks;
    UWORD	DeniseMaxDisplayColumn;
    UWORD	BeamCon0;
    UWORD	min_row;
    struct	SpecialMonitor	*ms_Special;
    UWORD	ms_OpenCount;
    LONG	(*ms_transform)();
    LONG	(*ms_translate)();
    LONG	(*ms_scale)();
    UWORD	ms_xoffset;
    UWORD	ms_yoffset;
    struct	Rectangle	ms_LegalView;
    LONG	(*ms_maxoscan)();
    LONG	(*ms_videoscan)();
    UWORD	DeniseMinDisplayColumn;
    ULONG	DisplayCompatible;
    struct	List DisplayInfoDataBase;
    struct	SignalSemaphore DisplayInfoDataBaseSemaphore;
    ULONG	ms_reserved00;
    ULONG	ms_reserved01;
};
struct	AnalogSignalInterval
{
    UWORD	asi_Start;
    UWORD	asi_Stop;
};
struct	SpecialMonitor
{
    struct	ExtendedNode	spm_Node;
    UWORD	spm_Flags;
    int	(*do_monitor)();
    int	(*reserved1)();
    int	(*reserved2)();
    int	(*reserved3)();
    struct	AnalogSignalInterval	hblank;
    struct	AnalogSignalInterval	vblank;
    struct	AnalogSignalInterval	hsync;
    struct	AnalogSignalInterval	vsync;
};
struct ViewPort
{
   struct   ViewPort *Next;
   struct   ColorMap  *ColorMap;
   struct   CopList  *DspIns;
   struct   CopList  *SprIns;
   struct   CopList  *ClrIns;
   struct   UCopList *UCopIns;
   WORD    DWidth,DHeight;
   WORD    DxOffset,DyOffset;
   UWORD    Modes;
   UBYTE	SpritePriorities;
   UBYTE	ExtendedModes;
   struct   RasInfo *RasInfo;
};
struct View
{
   struct ViewPort *ViewPort;
   struct cprlist *LOFCprList;
   struct cprlist *SHFCprList;
   WORD DyOffset,DxOffset;
   UWORD   Modes;
};
struct ViewExtra
{
	struct ExtendedNode n;
	struct View *View;
	struct MonitorSpec *Monitor;
};
struct ViewPortExtra
{
	struct ExtendedNode n;
	struct ViewPort *ViewPort;
	struct Rectangle DisplayClip;
};
struct RasInfo
{
   struct   RasInfo *Next;
   struct   BitMap *BitMap;
   WORD    RxOffset,RyOffset;
};
struct ColorMap
{
	UBYTE	Flags;
	UBYTE	Type;
	UWORD	Count;
	APTR	ColorTable;
	struct	ViewPortExtra *cm_vpe;
	UWORD	*TransparencyBits;
	UBYTE	TransparencyPlane;
	UBYTE	reserved1;
	UWORD	reserved2;
	struct	ViewPort *cm_vp;
	APTR	NormalDisplayInfo;
	APTR	CoerceDisplayInfo;
	struct	TagItem *cm_batch_items;
	ULONG	VPModeID;
};
struct AreaInfo
{
    WORD   *VctrTbl;
    WORD   *VctrPtr;
    BYTE    *FlagTbl;
    BYTE    *FlagPtr;
    WORD   Count;
    WORD   MaxCount;
    WORD   FirstX,FirstY;
};
struct TmpRas
{
    BYTE *RasPtr;
    LONG Size;
};
struct GelsInfo
{
    BYTE sprRsrvd;
    UBYTE Flags;
    struct VSprite *gelHead, *gelTail;
    WORD *nextLine;
    WORD **lastColor;
    struct collTable *collHandler;
    WORD leftmost, rightmost, topmost, bottommost;
   APTR firstBlissObj,lastBlissObj;
};
struct RastPort
{
    struct  Layer *Layer;
    struct  BitMap   *BitMap;
    UWORD  *AreaPtrn;
    struct  TmpRas *TmpRas;
    struct  AreaInfo *AreaInfo;
    struct  GelsInfo *GelsInfo;
    UBYTE   Mask;
    BYTE    FgPen;
    BYTE    BgPen;
    BYTE    AOlPen;
    BYTE    DrawMode;
    BYTE    AreaPtSz;
    BYTE    linpatcnt;
    BYTE    dummy;
    UWORD  Flags;
    UWORD  LinePtrn;
    WORD   cp_x, cp_y;
    UBYTE   minterms[8];
    WORD   PenWidth;
    WORD   PenHeight;
    struct  TextFont *Font;
    UBYTE   AlgoStyle;
    UBYTE   TxFlags;
    UWORD   TxHeight;
    UWORD   TxWidth;
    UWORD   TxBaseline;
    WORD    TxSpacing;
    APTR    *RP_User;
    ULONG   longreserved[2];
    UWORD   wordreserved[7];
    UBYTE   reserved[8];
};
struct Layer_Info
{
    struct Layer *top_layer;
    struct Layer *check_lp;
    struct ClipRect *obs;
	struct MinList	FreeClipRects;
	struct SignalSemaphore Lock;
	struct List gs_Head;
	LONG	longreserved;
	UWORD	Flags;
	BYTE	fatten_count;
	BYTE	LockLayersCount;
    UWORD  LayerInfo_extra_size;
    WORD	*blitbuff;
    void	*LayerInfo_extra;
};
struct TextAttr {
    STRPTR  ta_Name;
    UWORD   ta_YSize;
    UBYTE   ta_Style;
    UBYTE   ta_Flags;
};
struct TTextAttr {
    STRPTR  tta_Name;
    UWORD   tta_YSize;
    UBYTE   tta_Style;
    UBYTE   tta_Flags;
    struct TagItem *tta_Tags;
};
struct TextFont {
    struct Message tf_Message;
    UWORD   tf_YSize;
    UBYTE   tf_Style;
    UBYTE   tf_Flags;
    UWORD   tf_XSize;
    UWORD   tf_Baseline;
    UWORD   tf_BoldSmear;
    UWORD   tf_Accessors;
    UBYTE   tf_LoChar;
    UBYTE   tf_HiChar;
    APTR    tf_CharData;
    UWORD   tf_Modulo;
    APTR    tf_CharLoc;
    APTR    tf_CharSpace;
    APTR    tf_CharKern;
};
struct TextFontExtension {
    UWORD   tfe_MatchWord;
    UBYTE   tfe_Flags0;
    UBYTE   tfe_Flags1;
    struct TextFont *tfe_BackPtr;
    struct MsgPort *tfe_OrigReplyPort;
    struct TagItem *tfe_Tags;
    UWORD  *tfe_OFontPatchS;
    UWORD  *tfe_OFontPatchK;
};
struct ColorFontColors {
    UWORD   cfc_Reserved;
    UWORD   cfc_Count;
    UWORD  *cfc_ColorTable;
};
struct ColorTextFont {
    struct TextFont ctf_TF;
    UWORD   ctf_Flags;
    UBYTE   ctf_Depth;
    UBYTE   ctf_FgColor;
    UBYTE   ctf_Low;
    UBYTE   ctf_High;
    UBYTE   ctf_PlanePick;
    UBYTE   ctf_PlaneOnOff;
    struct ColorFontColors *ctf_ColorFontColors;
    APTR    ctf_CharData[8];
};
struct TextExtent {
    UWORD   te_Width;
    UWORD   te_Height;
    struct Rectangle te_Extent;
};
struct IORequest {
    struct  Message io_Message;
    struct  Device  *io_Device;
    struct  Unit    *io_Unit;
    UWORD   io_Command;
    UBYTE   io_Flags;
    BYTE    io_Error;
};
struct IOStdReq {
    struct  Message io_Message;
    struct  Device  *io_Device;
    struct  Unit    *io_Unit;
    UWORD   io_Command;
    UBYTE   io_Flags;
    BYTE    io_Error;
    ULONG   io_Actual;
    ULONG   io_Length;
    APTR    io_Data;
    ULONG   io_Offset;
};
struct timeval {
    ULONG tv_secs;
    ULONG tv_micro;
};
struct EClockVal {
    ULONG ev_hi;
    ULONG ev_lo;
};
struct timerequest {
    struct IORequest tr_node;
    struct timeval tr_time;
};
struct IEPointerPixel	{
    struct Screen	*iepp_Screen;
    struct {
	WORD	X;
	WORD	Y;
    }			iepp_Position;
};
struct IEPointerTablet	{
    struct {
	UWORD	X;
	UWORD	Y;
    }			iept_Range;
    struct {
	UWORD	X;
	UWORD	Y;
    }			iept_Value;
    WORD		iept_Pressure;
};
struct InputEvent {
    struct  InputEvent *ie_NextEvent;
    UBYTE   ie_Class;
    UBYTE   ie_SubClass;
    UWORD   ie_Code;
    UWORD   ie_Qualifier;
    union {
	struct {
	    WORD    ie_x;
	    WORD    ie_y;
	} ie_xy;
	APTR	ie_addr;
	struct {
	    UBYTE   ie_prev1DownCode;
	    UBYTE   ie_prev1DownQual;
	    UBYTE   ie_prev2DownCode;
	    UBYTE   ie_prev2DownQual;
	} ie_dead;
    } ie_position;
    struct timeval ie_TimeStamp;
};
struct Menu
{
    struct Menu *NextMenu;
    WORD LeftEdge, TopEdge;
    WORD Width, Height;
    UWORD Flags;
    BYTE *MenuName;
    struct MenuItem *FirstItem;
    WORD JazzX, JazzY, BeatX, BeatY;
};
struct MenuItem
{
    struct MenuItem *NextItem;
    WORD LeftEdge, TopEdge;
    WORD Width, Height;
    UWORD Flags;
    LONG MutualExclude;
    APTR ItemFill;
    APTR SelectFill;
    BYTE Command;
    struct MenuItem *SubItem;
    UWORD NextSelect;
};
struct Requester
{
    struct Requester *OlderRequest;
    WORD LeftEdge, TopEdge;
    WORD Width, Height;
    WORD RelLeft, RelTop;
    struct Gadget *ReqGadget;
    struct Border *ReqBorder;
    struct IntuiText *ReqText;
    UWORD Flags;
    UBYTE BackFill;
    struct Layer *ReqLayer;
    UBYTE ReqPad1[32];
    struct BitMap *ImageBMap;
    struct Window *RWindow;
    struct Image  *ReqImage;
    UBYTE ReqPad2[32];
};
struct Gadget
{
    struct Gadget *NextGadget;
    WORD LeftEdge, TopEdge;
    WORD Width, Height;
    UWORD Flags;
    UWORD Activation;
    UWORD GadgetType;
    APTR GadgetRender;
    APTR SelectRender;
    struct IntuiText *GadgetText;
    LONG MutualExclude;
    APTR SpecialInfo;
    UWORD GadgetID;
    APTR UserData;
};
struct BoolInfo
{
    UWORD  Flags;
    UWORD  *Mask;
    ULONG  Reserved;
};
struct PropInfo
{
    UWORD Flags;
    UWORD HorizPot;
    UWORD VertPot;
    UWORD HorizBody;
    UWORD VertBody;
    UWORD CWidth;
    UWORD CHeight;
    UWORD HPotRes, VPotRes;
    UWORD LeftBorder;
    UWORD TopBorder;
};
struct StringInfo
{
    UBYTE *Buffer;
    UBYTE *UndoBuffer;
    WORD BufferPos;
    WORD MaxChars;
    WORD DispPos;
    WORD UndoPos;
    WORD NumChars;
    WORD DispCount;
    WORD CLeft, CTop;
    struct StringExtend *Extension;
    LONG LongInt;
    struct KeyMap *AltKeyMap;
};
struct IntuiText
{
    UBYTE FrontPen, BackPen;
    UBYTE DrawMode;
    WORD LeftEdge;
    WORD TopEdge;
    struct TextAttr *ITextFont;
    UBYTE *IText;
    struct IntuiText *NextText;
};
struct Border
{
    WORD LeftEdge, TopEdge;
    UBYTE FrontPen, BackPen;
    UBYTE DrawMode;
    BYTE Count;
    WORD *XY;
    struct Border *NextBorder;
};
struct Image
{
    WORD LeftEdge;
    WORD TopEdge;
    WORD Width;
    WORD Height;
    WORD Depth;
    UWORD *ImageData;
    UBYTE PlanePick, PlaneOnOff;
    struct Image *NextImage;
};
struct IntuiMessage
{
    struct Message ExecMessage;
    ULONG Class;
    UWORD Code;
    UWORD Qualifier;
    APTR IAddress;
    WORD MouseX, MouseY;
    ULONG Seconds, Micros;
    struct Window *IDCMPWindow;
    struct IntuiMessage *SpecialLink;
};
struct IBox {
    WORD Left;
    WORD Top;
    WORD Width;
    WORD Height;
    };
struct Window
{
    struct Window *NextWindow;
    WORD LeftEdge, TopEdge;
    WORD Width, Height;
    WORD MouseY, MouseX;
    WORD MinWidth, MinHeight;
    UWORD MaxWidth, MaxHeight;
    ULONG Flags;
    struct Menu *MenuStrip;
    UBYTE *Title;
    struct Requester *FirstRequest;
    struct Requester *DMRequest;
    WORD ReqCount;
    struct Screen *WScreen;
    struct RastPort *RPort;
    BYTE BorderLeft, BorderTop, BorderRight, BorderBottom;
    struct RastPort *BorderRPort;
    struct Gadget *FirstGadget;
    struct Window *Parent, *Descendant;
    UWORD *Pointer;
    BYTE PtrHeight;
    BYTE PtrWidth;
    BYTE XOffset, YOffset;
    ULONG IDCMPFlags;
    struct MsgPort *UserPort, *WindowPort;
    struct IntuiMessage *MessageKey;
    UBYTE DetailPen, BlockPen;
    struct Image *CheckMark;
    UBYTE *ScreenTitle;
    WORD GZZMouseX;
    WORD GZZMouseY;
    WORD GZZWidth;
    WORD GZZHeight;
    UBYTE *ExtData;
    BYTE *UserData;
    struct Layer *WLayer;
    struct TextFont *IFont;
    ULONG	MoreFlags;
};
struct NewWindow
{
    WORD LeftEdge, TopEdge;
    WORD Width, Height;
    UBYTE DetailPen, BlockPen;
    ULONG IDCMPFlags;
    ULONG Flags;
    struct Gadget *FirstGadget;
    struct Image *CheckMark;
    UBYTE *Title;
    struct Screen *Screen;
    struct BitMap *BitMap;
    WORD MinWidth, MinHeight;
    UWORD MaxWidth, MaxHeight;
    UWORD Type;
};
struct ExtNewWindow
{
    WORD LeftEdge, TopEdge;
    WORD Width, Height;
    UBYTE DetailPen, BlockPen;
    ULONG IDCMPFlags;
    ULONG Flags;
    struct Gadget *FirstGadget;
    struct Image *CheckMark;
    UBYTE *Title;
    struct Screen *Screen;
    struct BitMap *BitMap;
    WORD MinWidth, MinHeight;
    UWORD MaxWidth, MaxHeight;
    UWORD Type;
    struct TagItem	*Extension;
};
struct DrawInfo
{
    UWORD	dri_Version;
    UWORD	dri_NumPens;
    UWORD	*dri_Pens;
    struct TextFont	*dri_Font;
    UWORD	dri_Depth;
    struct {
	UWORD	X;
	UWORD	Y;
    }		dri_Resolution;
    ULONG	dri_Flags;
    ULONG	dri_Reserved[7];
};
struct Screen
{
    struct Screen *NextScreen;
    struct Window *FirstWindow;
    WORD LeftEdge, TopEdge;
    WORD Width, Height;
    WORD MouseY, MouseX;
    UWORD Flags;
    UBYTE *Title;
    UBYTE *DefaultTitle;
    BYTE BarHeight, BarVBorder, BarHBorder, MenuVBorder, MenuHBorder;
    BYTE WBorTop, WBorLeft, WBorRight, WBorBottom;
    struct TextAttr *Font;
    struct ViewPort ViewPort;
    struct RastPort RastPort;
    struct BitMap BitMap;
    struct Layer_Info LayerInfo;
    struct Gadget *FirstGadget;
    UBYTE DetailPen, BlockPen;
    UWORD SaveColor0;
    struct Layer *BarLayer;
    UBYTE *ExtData;
    UBYTE *UserData;
};
struct NewScreen
{
    WORD LeftEdge, TopEdge, Width, Height, Depth;
    UBYTE DetailPen, BlockPen;
    UWORD ViewModes;
    UWORD Type;
    struct TextAttr *Font;
    UBYTE *DefaultTitle;
    struct Gadget *Gadgets;
    struct BitMap *CustomBitMap;
};
struct ExtNewScreen
{
    WORD LeftEdge, TopEdge, Width, Height, Depth;
    UBYTE DetailPen, BlockPen;
    UWORD ViewModes;
    UWORD Type;
    struct TextAttr *Font;
    UBYTE *DefaultTitle;
    struct Gadget *Gadgets;
    struct BitMap *CustomBitMap;
    struct TagItem	*Extension;
};
struct PubScreenNode	{
    struct Node		psn_Node;
    struct Screen	*psn_Screen;
    UWORD		psn_Flags;
    WORD		psn_Size;
    WORD		psn_VisitorCount;
    struct Task		*psn_SigTask;
    UBYTE		psn_SigBit;
};
struct Preferences
{
    BYTE FontHeight;
    UBYTE PrinterPort;
    UWORD BaudRate;
    struct timeval KeyRptSpeed;
    struct timeval KeyRptDelay;
    struct timeval DoubleClick;
    UWORD PointerMatrix[(1 + 16 + 1) * 2];
    BYTE XOffset;
    BYTE YOffset;
    UWORD color17;
    UWORD color18;
    UWORD color19;
    UWORD PointerTicks;
    UWORD color0;
    UWORD color1;
    UWORD color2;
    UWORD color3;
    BYTE ViewXOffset;
    BYTE ViewYOffset;
    WORD ViewInitX, ViewInitY;
    BOOL EnableCLI;
    UWORD PrinterType;
    UBYTE PrinterFilename[30];
    UWORD PrintPitch;
    UWORD PrintQuality;
    UWORD PrintSpacing;
    UWORD PrintLeftMargin;
    UWORD PrintRightMargin;
    UWORD PrintImage;
    UWORD PrintAspect;
    UWORD PrintShade;
    WORD PrintThreshold;
    UWORD PaperSize;
    UWORD PaperLength;
    UWORD PaperType;
    UBYTE   SerRWBits;
    UBYTE   SerStopBuf;
    UBYTE   SerParShk;
    UBYTE   LaceWB;
    UBYTE   WorkName[30];
    BYTE    RowSizeChange;
    BYTE    ColumnSizeChange;
    UWORD    PrintFlags;
    UWORD    PrintMaxWidth;
    UWORD    PrintMaxHeight;
    UBYTE    PrintDensity;
    UBYTE    PrintXOffset;
    UWORD    wb_Width;
    UWORD    wb_Height;
    UBYTE    wb_Depth;
    UBYTE    ext_size;
};
struct Remember
{
    struct Remember *NextRemember;
    ULONG RememberSize;
    UBYTE *Memory;
};
struct ColorSpec {
    WORD	ColorIndex;
    UWORD	Red;
    UWORD	Green;
    UWORD	Blue;
};
struct EasyStruct {
    ULONG	es_StructSize;
    ULONG	es_Flags;
    UBYTE	*es_Title;
    UBYTE	*es_TextFormat;
    UBYTE	*es_GadgetFormat;
};
struct IntuitionBase
{
    struct Library LibNode;
    struct View ViewLord;
    struct Window *ActiveWindow;
    struct Screen *ActiveScreen;
    struct Screen *FirstScreen;
    ULONG Flags;
    WORD	MouseY, MouseX;
    ULONG Seconds;
    ULONG Micros;
};
struct gpHitTest {
    ULONG		MethodID;
    struct GadgetInfo	*gpht_GInfo;
    struct {
	WORD	X;
	WORD	Y;
    }			gpht_Mouse;
};
struct gpRender {
    ULONG		MethodID;
    struct GadgetInfo	*gpr_GInfo;
    struct RastPort	*gpr_RPort;
    LONG		gpr_Redraw;
};
struct gpInput {
    ULONG		MethodID;
    struct GadgetInfo	*gpi_GInfo;
    struct InputEvent	*gpi_IEvent;
    LONG		*gpi_Termination;
    struct {
	WORD	X;
	WORD	Y;
    }			gpi_Mouse;
};
struct gpGoInactive {
    ULONG		MethodID;
    struct GadgetInfo	*gpgi_GInfo;
    ULONG		gpgi_Abort;
};
struct NewGadget
    {
    WORD ng_LeftEdge, ng_TopEdge;
    WORD ng_Width, ng_Height;
    UBYTE *ng_GadgetText;
    struct TextAttr *ng_TextAttr;
    UWORD ng_GadgetID;
    ULONG ng_Flags;
    APTR ng_VisualInfo;
    APTR ng_UserData;
    };
struct NewMenu
    {
    UBYTE nm_Type;
    STRPTR nm_Label;
    STRPTR nm_CommKey;
    UWORD nm_Flags;
    LONG nm_MutualExclude;
    APTR nm_UserData;
    };
struct GfxBase
{
    struct Library  LibNode;
    struct View *ActiView;
    struct copinit *copinit;
    long    *cia;
    long    *blitter;
    UWORD   *LOFlist;
    UWORD   *SHFlist;
    struct bltnode *blthd,*blttl;
    struct bltnode *bsblthd,*bsblttl;
    struct Interrupt vbsrv,timsrv,bltsrv;
    struct List     TextFonts;
    struct  TextFont *DefaultFont;
    UWORD  Modes;
    BYTE VBlank;
    BYTE Debug;
    WORD BeamSync;
    WORD system_bplcon0;
    UBYTE   SpriteReserved;
    UBYTE   bytereserved;
    UWORD   Flags;
    WORD   BlitLock;
	WORD	BlitNest;
	struct	List	BlitWaitQ;
	struct	Task	*BlitOwner;
	struct	List	TOF_WaitQ;
	UWORD	DisplayFlags;
	struct SimpleSprite **SimpleSprites;
	UWORD	MaxDisplayRow;
	UWORD	MaxDisplayColumn;
	UWORD	NormalDisplayRows;
	UWORD	NormalDisplayColumns;
	UWORD	NormalDPMX;
	UWORD	NormalDPMY;
	struct	SignalSemaphore *LastChanceMemory;
	UWORD	*LCMptr;
	UWORD	MicrosPerLine;
	UWORD	MinDisplayColumn;
	UBYTE	ChipRevBits0;
	UBYTE	crb_reserved[5];
	UWORD	monitor_id;
	ULONG	hedley[8];
	ULONG	hedley_sprites[8] ;
	ULONG	hedley_sprites1[8] ;
	WORD	hedley_count;
	UWORD	hedley_flags;
	WORD	hedley_tmp;
	LONG	*hash_table;
	UWORD	current_tot_rows;
	UWORD	current_tot_cclks;
	UBYTE	hedley_hint;
	UBYTE	hedley_hint2;
	ULONG	nreserved[4];
	LONG	*a2024_sync_raster;
	WORD   control_delta_pal;
	WORD   control_delta_ntsc;
	struct	MonitorSpec *current_monitor;
	struct	List MonitorList;
	struct	MonitorSpec *default_monitor;
	struct	SignalSemaphore *MonitorListSemaphore;
	void	*DisplayInfoDataBase;
	struct	SignalSemaphore *ActiViewCprSemaphore;
	ULONG	*UtilityBase;
	ULONG	*ExecBase;
	};
typedef APTR DisplayInfoHandle;
struct QueryHeader
{
	ULONG	StructID;
	ULONG	DisplayID;
	ULONG	SkipID;
	ULONG	Length;
};
struct DisplayInfo
{
	struct	QueryHeader Header;
	UWORD	NotAvailable;
	ULONG	PropertyFlags;
	Point	Resolution;
	UWORD	PixelSpeed;
	UWORD	NumStdSprites;
	UWORD	PaletteRange;
	Point	SpriteResolution;
	UBYTE	pad[4];
	ULONG	reserved[2];
};
struct DimensionInfo
{
	struct	QueryHeader Header;
	UWORD	MaxDepth;
	UWORD	MinRasterWidth;
	UWORD	MinRasterHeight;
	UWORD	MaxRasterWidth;
	UWORD	MaxRasterHeight;
	struct	Rectangle   Nominal;
	struct	Rectangle   MaxOScan;
	struct	Rectangle VideoOScan;
	struct	Rectangle   TxtOScan;
	struct	Rectangle   StdOScan;
	UBYTE	pad[14];
	ULONG	reserved[2];
};
struct MonitorInfo
{
	struct	QueryHeader Header;
	struct	MonitorSpec  *Mspc;
	Point	ViewPosition;
	Point	ViewResolution;
	struct	Rectangle ViewPositionRange;
	UWORD	TotalRows;
	UWORD	TotalColorClocks;
	UWORD	MinRow;
	WORD	Compatibility;
	UBYTE	pad[36];
	ULONG	reserved[2];
};
struct NameInfo
{
	struct	QueryHeader Header;
	UBYTE	Name[32];
	ULONG	reserved[2];
};
struct	 KeyMap {
    UBYTE   *km_LoKeyMapTypes;
    ULONG   *km_LoKeyMap;
    UBYTE   *km_LoCapsable;
    UBYTE   *km_LoRepeatable;
    UBYTE   *km_HiKeyMapTypes;
    ULONG   *km_HiKeyMap;
    UBYTE   *km_HiCapsable;
    UBYTE   *km_HiRepeatable;
};
struct	KeyMapNode {
    struct Node kn_Node;
    struct KeyMap kn_KeyMap;
};
struct	KeyMapResource {
    struct Node kr_Node;
    struct List kr_List;
};
struct	ConUnit {
    struct  MsgPort cu_MP;
    struct  Window *cu_Window;
    WORD    cu_XCP;
    WORD    cu_YCP;
    WORD    cu_XMax;
    WORD    cu_YMax;
    WORD    cu_XRSize;
    WORD    cu_YRSize;
    WORD    cu_XROrigin;
    WORD    cu_YROrigin;
    WORD    cu_XRExtant;
    WORD    cu_YRExtant;
    WORD    cu_XMinShrink;
    WORD    cu_YMinShrink;
    WORD    cu_XCCP;
    WORD    cu_YCCP;
    struct  KeyMap cu_KeyMapStruct;
    UWORD   cu_TabStops[80];
    BYTE    cu_Mask;
    BYTE    cu_FgPen;
    BYTE    cu_BgPen;
    BYTE    cu_AOLPen;
    BYTE    cu_DrawMode;
    BYTE    cu_Obsolete1;
    APTR    cu_Obsolete2;
    UBYTE   cu_Minterms[8];
    struct  TextFont *cu_Font;
    UBYTE   cu_AlgoStyle;
    UBYTE   cu_TxFlags;
    UWORD   cu_TxHeight;
    UWORD   cu_TxWidth;
    UWORD   cu_TxBaseline;
    WORD    cu_TxSpacing;
    UBYTE   cu_Modes[(((20+1)+1)+7)/8];
    UBYTE   cu_RawEvents[(0x15+8)/8];
};
 struct  IOTArray {
	ULONG TermArray0;
	ULONG TermArray1;
};
 struct  IOExtSer {
	struct	 IOStdReq IOSer;
   ULONG   io_CtlChar;
   ULONG   io_RBufLen;
   ULONG   io_ExtFlags;
   ULONG   io_Baud;
   ULONG   io_BrkTime;
   struct  IOTArray io_TermArray;
   UBYTE   io_ReadLen;
   UBYTE   io_WriteLen;
   UBYTE   io_StopBits;
   UBYTE   io_SerFlags;
   UWORD   io_Status;
};
struct DateStamp {
   LONG	 ds_Days;
   LONG	 ds_Minute;
   LONG	 ds_Tick;
};
struct FileInfoBlock {
   LONG	  fib_DiskKey;
   LONG	  fib_DirEntryType;
   char	  fib_FileName[108];
   LONG	  fib_Protection;
   LONG	  fib_EntryType;
   LONG	  fib_Size;
   LONG	  fib_NumBlocks;
   struct DateStamp fib_Date;
   char	  fib_Comment[80];
   char	  fib_Reserved[36];
};
typedef long  BPTR;
typedef long  BSTR;
struct InfoData {
   LONG	  id_NumSoftErrors;
   LONG	  id_UnitNumber;
   LONG	  id_DiskState;
   LONG	  id_NumBlocks;
   LONG	  id_NumBlocksUsed;
   LONG	  id_BytesPerBlock;
   LONG	  id_DiskType;
   BPTR	  id_VolumeNode;
   LONG	  id_InUse;
};
struct Process {
    struct  Task    pr_Task;
    struct  MsgPort pr_MsgPort;
    WORD    pr_Pad;
    BPTR    pr_SegList;
    LONG    pr_StackSize;
    APTR    pr_GlobVec;
    LONG    pr_TaskNum;
    BPTR    pr_StackBase;
    LONG    pr_Result2;
    BPTR    pr_CurrentDir;
    BPTR    pr_CIS;
    BPTR    pr_COS;
    APTR    pr_ConsoleTask;
    APTR    pr_FileSystemTask;
    BPTR    pr_CLI;
    APTR    pr_ReturnAddr;
    APTR    pr_PktWait;
    APTR    pr_WindowPtr;
    BPTR    pr_HomeDir;
    LONG    pr_Flags;
    void    (*pr_ExitCode)();
    LONG    pr_ExitData;
    UBYTE   *pr_Arguments;
    struct MinList pr_LocalVars;
    ULONG   pr_ShellPrivate;
    BPTR    pr_CES;
};
struct FileHandle {
   struct Message *fh_Link;
   struct MsgPort *fh_Port;
   struct MsgPort *fh_Type;
   LONG fh_Buf;
   LONG fh_Pos;
   LONG fh_End;
   LONG fh_Funcs;
   LONG fh_Func2;
   LONG fh_Func3;
   LONG fh_Args;
   LONG fh_Arg2;
};
struct DosPacket {
   struct Message *dp_Link;
   struct MsgPort *dp_Port;
   LONG dp_Type;
   LONG dp_Res1;
   LONG dp_Res2;
   LONG dp_Arg1;
   LONG dp_Arg2;
   LONG dp_Arg3;
   LONG dp_Arg4;
   LONG dp_Arg5;
   LONG dp_Arg6;
   LONG dp_Arg7;
};
struct StandardPacket {
   struct Message   sp_Msg;
   struct DosPacket sp_Pkt;
};
struct ErrorString {
	LONG  *estr_Nums;
	UBYTE *estr_Strings;
};
struct DosLibrary {
    struct Library dl_lib;
    struct RootNode *dl_Root;
    APTR    dl_GV;
    LONG    dl_A2;
    LONG    dl_A5;
    LONG    dl_A6;
    struct ErrorString *dl_Errors;
    struct timerequest *dl_TimeReq;
    struct Library     *dl_UtilityBase;
};
struct RootNode {
    BPTR    rn_TaskArray;
    BPTR    rn_ConsoleSegment;
    struct  DateStamp rn_Time;
    LONG    rn_RestartSeg;
    BPTR    rn_Info;
    BPTR    rn_FileHandlerSegment;
    struct MinList rn_CliList;
    struct MsgPort *rn_BootProc;
    BPTR    rn_ShellSegment;
    LONG    rn_Flags;
};
struct CliProcList {
	struct MinNode cpl_Node;
	LONG cpl_First;
	struct MsgPort **cpl_Array;
};
struct DosInfo {
    BPTR    di_McName;
    BPTR    di_DevInfo;
    BPTR    di_Devices;
    BPTR    di_Handlers;
    APTR    di_NetHand;
    struct  SignalSemaphore di_DevLock;
    struct  SignalSemaphore di_EntryLock;
    struct  SignalSemaphore di_DeleteLock;
};
struct Segment {
	BPTR seg_Next;
	LONG seg_UC;
	BPTR seg_Seg;
	UBYTE seg_Name[4];
};
struct CommandLineInterface {
    LONG   cli_Result2;
    BSTR   cli_SetName;
    BPTR   cli_CommandDir;
    LONG   cli_ReturnCode;
    BSTR   cli_CommandName;
    LONG   cli_FailLevel;
    BSTR   cli_Prompt;
    BPTR   cli_StandardInput;
    BPTR   cli_CurrentInput;
    BSTR   cli_CommandFile;
    LONG   cli_Interactive;
    LONG   cli_Background;
    BPTR   cli_CurrentOutput;
    LONG   cli_DefaultStack;
    BPTR   cli_StandardOutput;
    BPTR   cli_Module;
};
struct DeviceList {
    BPTR		dl_Next;
    LONG		dl_Type;
    struct MsgPort *	dl_Task;
    BPTR		dl_Lock;
    struct DateStamp	dl_VolumeDate;
    BPTR		dl_LockList;
    LONG		dl_DiskType;
    LONG		dl_unused;
    BSTR		dl_Name;
};
struct	      DevInfo {
    BPTR  dvi_Next;
    LONG  dvi_Type;
    APTR  dvi_Task;
    BPTR  dvi_Lock;
    BSTR  dvi_Handler;
    LONG  dvi_StackSize;
    LONG  dvi_Priority;
    LONG  dvi_Startup;
    BPTR  dvi_SegList;
    BPTR  dvi_GlobVec;
    BSTR  dvi_Name;
};
struct DosList {
    BPTR		dol_Next;
    LONG		dol_Type;
    struct MsgPort     *dol_Task;
    BPTR		dol_Lock;
    union {
	struct {
	BSTR	dol_Handler;
	LONG	dol_StackSize;
	LONG	dol_Priority;
	ULONG	dol_Startup;
	BPTR	dol_SegList;
	BPTR	dol_GlobVec;
	} dol_handler;
	struct {
	struct DateStamp	dol_VolumeDate;
	BPTR			dol_LockList;
	LONG			dol_DiskType;
	} dol_volume;
	struct {
	UBYTE	*dol_AssignName;
	struct AssignList *dol_List;
	} dol_assign;
    } dol_misc;
    BSTR		dol_Name;
    };
struct AssignList {
	struct AssignList *al_Next;
	BPTR		   al_Lock;
};
struct DevProc {
	struct MsgPort *dvp_Port;
	BPTR		dvp_Lock;
	ULONG		dvp_Flags;
	struct DosList *dvp_DevNode;
};
struct FileLock {
    BPTR		fl_Link;
    LONG		fl_Key;
    LONG		fl_Access;
    struct MsgPort *	fl_Task;
    BPTR		fl_Volume;
};
struct DosEnvec {
    ULONG de_TableSize;
    ULONG de_SizeBlock;
    ULONG de_SecOrg;
    ULONG de_Surfaces;
    ULONG de_SectorPerBlock;
    ULONG de_BlocksPerTrack;
    ULONG de_Reserved;
    ULONG de_PreAlloc;
    ULONG de_Interleave;
    ULONG de_LowCyl;
    ULONG de_HighCyl;
    ULONG de_NumBuffers;
    ULONG de_BufMemType;
    ULONG de_MaxTransfer;
    ULONG de_Mask;
    LONG  de_BootPri;
    ULONG de_DosType;
    ULONG de_Baud;
    ULONG de_Control;
    ULONG de_BootBlocks;
};
struct FileSysStartupMsg {
    ULONG	fssm_Unit;
    BSTR	fssm_Device;
    BPTR	fssm_Environ;
    ULONG	fssm_Flags;
};
struct DeviceNode {
    BPTR	dn_Next;
    ULONG	dn_Type;
    struct MsgPort *dn_Task;
    BPTR	dn_Lock;
    BSTR	dn_Handler;
    ULONG	dn_StackSize;
    LONG	dn_Priority;
    BPTR	dn_Startup;
    BPTR	dn_SegList;
    BPTR	dn_GlobalVec;
    BSTR	dn_Name;
};
struct OldDrawerData {
    struct NewWindow	dd_NewWindow;
    LONG		dd_CurrentX;
    LONG		dd_CurrentY;
};
struct DrawerData {
    struct NewWindow	dd_NewWindow;
    LONG		dd_CurrentX;
    LONG		dd_CurrentY;
    ULONG		dd_Flags;
    UWORD		dd_ViewModes;
};
struct DiskObject {
    UWORD		do_Magic;
    UWORD		do_Version;
    struct Gadget	do_Gadget;
    UBYTE		do_Type;
    char *		do_DefaultTool;
    char **		do_ToolTypes;
    LONG		do_CurrentX;
    LONG		do_CurrentY;
    struct DrawerData *	do_DrawerData;
    char *		do_ToolWindow;
    LONG		do_StackSize;
};
struct FreeList {
    WORD		fl_NumFree;
    struct List		fl_MemList;
};
struct AppMessage {
    struct Message am_Message;
    UWORD am_Type;
    ULONG am_UserData;
    ULONG am_ID;
    LONG am_NumArgs;
    struct WBArg *am_ArgList;
    UWORD am_Version;
    UWORD am_Class;
    WORD am_MouseX;
    WORD am_MouseY;
    ULONG am_Seconds;
    ULONG am_Micros;
    ULONG am_Reserved[8];
};
struct	AppWindow	{ void *aw_PRIVATE;  };
struct	AppIcon		{ void *ai_PRIVATE;  };
struct		AppMenuItem	{ void *ami_PRIVATE; };
typedef int ptrdiff_t;
typedef unsigned int size_t;
typedef char wchar_t;
typedef struct div_t {
    int     quot;
    int     rem;
} div_t;
typedef struct ldiv_t {
    long    quot;
    long    rem;
} ldiv_t;
extern void abort(void);
extern int atexit(void (*)(void));
extern double atof(const char *);
extern double strtod(const char *, char **);
extern int atoi(const char *);
extern long atol(const char *);
extern void *bsearch(const void *, const void *, size_t, size_t, int (*)(const void *, const void *));
extern void *calloc(size_t, size_t);
extern div_t div(int, int);
extern void exit(int);
extern void free(void *);
extern char *getenv(const char *);
extern int  setenv(const char *, const char *);
extern long labs(long);
extern ldiv_t ldiv(long, long);
extern void *malloc(size_t);
extern int mblen(const char *, size_t);
extern size_t mbstowcs(wchar_t *, const char *, size_t);
extern int mbtowc(wchar_t *, const char *, size_t);
extern void qsort(void *, size_t, size_t, int (*)(const void *, const void *));
extern int rand(void);
extern void srand(unsigned int);
extern void *realloc(void *, size_t);
extern long strtol(const char *,char **, int);
extern unsigned long strtoul(const char *, char **, int);
extern int system(const char *);
extern int system13(const char *);
extern size_t wcstombs(wchar_t *, const char *, size_t);
extern int wctomb(char *, wchar_t);
extern int getfnl(const char *, char *, size_t, int);
extern int mkdir(const char *);
extern int expand_args(int, const char **, int *, char ***);
extern int (*onbreak(int (*)()))(void);
extern __stkargs void _exit(int);
extern void chkabort(void);
extern void stack_abort(void);
extern void sleep(int);
extern int _SystemBoolTag;
extern int _SystemBoolTagValue;
typedef void *va_list;
typedef long	fpos_t;
typedef struct FILE {
    struct FILE *sd_Next;
    struct FILE **sd_Prev;
    unsigned char   *sd_RBuf;
    unsigned char   *sd_RPtr;
    unsigned char   *sd_WBuf;
    unsigned char   *sd_WPtr;
    long    sd_BufSiz;
    int     sd_RLeft;
    int     sd_WLeft;
    int     sd_Flags;
    int     sd_Error;
    fpos_t  sd_Offset;
    int     sd_Fd;
    short   sd_UC;
    char    *sd_Name;
} FILE;
typedef struct _IOFDS {
    long    fd_Fh;
    long    fd_Flags;
    long    (*fd_Exec)(long, int, void *, void *);
    char    *fd_FileName;
} _IOFDS;
extern FILE _Iob[3];
extern FILE *_Iod;
extern _IOFDS _IoStaticFD[3];
extern _IOFDS *_IoFD;
extern short _IoFDLimit;
extern int _bufsiz;
extern void perror(const char *);
extern int    fclose(FILE *);
extern int    fflush(FILE *);
extern FILE * fopen(const char *, const char *);
extern FILE * freopen(const char *, const char *, FILE *);
extern void   setbuf(FILE *, char *);
extern int    setvbuf(FILE *, char *, int, size_t);
extern int    remove(const char *);
extern int    rename(const char *, const char *);
extern FILE * tmpfile(void);
extern char * tmpnam(char *);
extern int    fgetpos(FILE *, fpos_t *);
extern int    fseek(FILE *, long, int);
extern int    fsetpos(FILE *, const fpos_t *);
extern long   ftell(FILE *);
extern void   rewind(FILE *);
extern int    fgetc(FILE *);
extern char * fgets(char *, int, FILE *);
extern int    fputc(unsigned char, FILE *);
extern int    fputs(const char *, FILE *);
extern char * gets(char *);
extern int    puts(const char *);
extern int    ungetc(int, FILE *);
extern size_t fread(void *, size_t, size_t, FILE *);
extern size_t fwrite(const void *, size_t, size_t, FILE *);
extern int    fprintf(FILE *, const char *, ...);
extern int    fscanf(FILE *, const char *, ...);
extern int    printf(const char *, ...);
extern int    scanf(const char *, ...);
extern int    sprintf(char *, const char *, ...);
extern int    sscanf(char *, const char *, ...);
extern int    vfprintf(FILE *, const char *, va_list);
extern int    vprintf(const char *, va_list);
extern int    vsprintf(char *, const char *, va_list);
extern FILE * fdopen(int, const char *);
extern int    chdir(const char *);
extern char * getcwd(char *, int);
extern int    unlink(const char *);
extern int    fhprintf(long, const char *, ...);
extern int    vfhprintf(long, const char *, va_list);
extern int write(int, const void *, unsigned int);
extern int read(int, void *, unsigned int);
extern int close(int);
extern int open(const char *, int, ...);
extern int creat(const char *, int);
extern long lseek(int, long, int);
extern void *fdtofh(int);
extern _IOFDS *__getfh(int);
extern _IOFDS *_MakeFD(int *);
extern int fcntl(int, int, int);
extern int isatty(int);
extern int access(const char *, int);
extern int memcmp(const void *, const void *, size_t);
extern int strcmp(const char *, const char *);
extern int strcoll(const char *, const char *);
extern int strncmp(const char *, const char *, size_t);
extern size_t strxfrm(char *, const char *, size_t);
extern char *strcat(char *, const char *);
extern char *strncat(char *, const char *, size_t);
extern void *memcpy(void *, const void *, size_t);
extern void *memmove(void *, const void *, size_t);
extern char *strcpy(char *, const char *);
extern char *stpcpy(char *, const char *);
extern char *strncpy(char *, const char *, size_t);
extern void *memset(void *, int, size_t);
extern char *strerror(int);
extern size_t strlen(const char *);
extern void *memchr(const void *, int, size_t);
extern char *strchr(const char *, int);
extern size_t strcspn(const char *, const char *);
extern char *strpbrk(const char *, const char *);
extern char *strrchr(const char *, int);
extern size_t strspn(const char *, const char *);
extern char *strstr(const char *, const char *);
extern char *strtok(char *, const char *);
extern double strtod(const char *, char **);
extern long   strtol(const char *, char **, int);
extern unsigned long strtoul(const char *, char **, int);
extern void *movmem(const void *, const void *, size_t);
extern void *setmem(void *, size_t, int);
extern void *cmpmem(const void *, const void *, size_t);
extern void *clrmem(void *, size_t);
extern void *bzero(void *, size_t);
extern void *bcopy(const void *, void *, size_t);
extern void *bcmp(const void *, const void *, size_t);
extern char *strupper(char *);
extern int stricmp(const char *, const char *);
extern int strnicmp(const char *, const char *, int);
extern int strbpl(char **, int, const char *);
extern void strins(char *, const char *);
extern char *strdup(const char *);
extern char *stpbrk(const char *, const char *);
extern const char *stpchr(const char *, char);
long PlaceRexxCommand(struct MsgPort *, char *, char **, long *);
long PlaceRexxCommandDirect(struct MsgPort *, char *, char *, char **, long *);
void ProcessRexxCommands(struct MsgPort *);
short CreateGlobalDiceRexxPort(struct MsgPort *, char *);
short CreateDiceRexxPort(struct MsgPort *, char *);
void DeleteDiceRexxPort(struct MsgPort *);
int GetDiceRexxPortSlot(struct MsgPort *, char **);
extern struct Library *RexxSysBase;
long DoRexxCommand(void *rexxmsg, struct MsgPort *port, char *arg0, char **resstr);
extern char *RexxHostName;
extern short RexxSigBit;
long rega4(void);
void __closeall(void);
void _finitdesc(FILE *, int, int);
int _parseargs1(char *, int);
void _parseargs2(char *, char **, int);
long _SearchResident(char *);
long _SearchPath(char *);
__stkargs long _ExecSeg(long, char *, long, void *);
int exec_dcc(char *, char *);
int _pfmt(char *, va_list, unsigned int (*)(char *, size_t, size_t, void *), void *);
int _pfmtone(char, va_list *, unsigned int (*)(char *, size_t, size_t, void *), void *, short, short, short, int);
int _sfmt(unsigned char *, va_list, int (*)(void *), int (*)(int, void *), void *, int *);
int _sfmtone(char *, short *, void *, int (*)(void *), void *, short, short, short);
int __fclose(FILE *);
int _filbuf(FILE *);
void _MakeCacheFD(_IOFDS *, void *, long);
long _CacheFDIoctl(long, int, void *, void *);
short OpenConsole(const char *);
__stkargs _slow_bcopy(void *, void *, long);
__stkargs _slow_bzero(void *, long);
__stkargs _slow_bset(void *, long, int);
void _SetWildStack(long);
void *_ParseWild(const char *, short);
int _CompWild(const char *, void *, void *);
void _FreeWild(void *);
extern long _TimeCompensation;
extern int _DiceCacheEnable;
ULONG Supervisor( unsigned long (*userFunction)() );
void InitCode( unsigned long startClass, unsigned long version );
void InitStruct( APTR initTable, APTR memory, unsigned long size );
struct Library *MakeLibrary( APTR funcInit, APTR structInit,
	unsigned long (*libInit)(), unsigned long dataSize,
	unsigned long segList );
void MakeFunctions( APTR target, APTR functionArray,
	unsigned long funcDispBase );
struct Resident *FindResident( UBYTE *name );
void InitResident( struct Resident *resident, unsigned long segList );
void Alert( unsigned long alertNum );
void Debug( unsigned long flags );
void Disable( void );
void Enable( void );
void Forbid( void );
void Permit( void );
ULONG SetSR( unsigned long newSR, unsigned long mask );
APTR SuperState( void );
void UserState( APTR sysStack );
struct Interrupt *SetIntVector( long intNumber, struct Interrupt *interrupt );
void AddIntServer( long intNumber, struct Interrupt *interrupt );
void RemIntServer( long intNumber, struct Interrupt *interrupt );
void Cause( struct Interrupt *interrupt );
APTR Allocate( struct MemHeader *freeList, unsigned long byteSize );
void Deallocate( struct MemHeader *freeList, APTR memoryBlock,
	unsigned long byteSize );
APTR AllocMem( unsigned long byteSize, unsigned long requirements );
APTR AllocAbs( unsigned long byteSize, APTR location );
void FreeMem( APTR memoryBlock, unsigned long byteSize );
ULONG AvailMem( unsigned long requirements );
struct MemList *AllocEntry( struct MemList *entry );
void FreeEntry( struct MemList *entry );
void Insert( struct List *list, struct Node *node, struct Node *pred );
void AddHead( struct List *list, struct Node *node );
void AddTail( struct List *list, struct Node *node );
void Remove( struct Node *node );
struct Node *RemHead( struct List *list );
struct Node *RemTail( struct List *list );
void Enqueue( struct List *list, struct Node *node );
struct Node *FindName( struct List *list, UBYTE *name );
APTR AddTask( struct Task *task, APTR initPC, APTR finalPC );
void RemTask( struct Task *task );
struct Task *FindTask( UBYTE *name );
BYTE SetTaskPri( struct Task *task, long priority );
ULONG SetSignal( unsigned long newSignals, unsigned long signalSet );
ULONG SetExcept( unsigned long newSignals, unsigned long signalSet );
ULONG Wait( unsigned long signalSet );
void Signal( struct Task *task, unsigned long signalSet );
BYTE AllocSignal( long signalNum );
void FreeSignal( long signalNum );
LONG AllocTrap( long trapNum );
void FreeTrap( long trapNum );
void AddPort( struct MsgPort *port );
void RemPort( struct MsgPort *port );
void PutMsg( struct MsgPort *port, struct Message *message );
struct Message *GetMsg( struct MsgPort *port );
void ReplyMsg( struct Message *message );
struct Message *WaitPort( struct MsgPort *port );
struct MsgPort *FindPort( UBYTE *name );
void AddLibrary( struct Library *library );
void RemLibrary( struct Library *library );
struct Library *OldOpenLibrary( UBYTE *libName );
void CloseLibrary( struct Library *library );
APTR SetFunction( struct Library *library, long funcOffset,
	unsigned long (*newFunction)() );
void SumLibrary( struct Library *library );
void AddDevice( struct Device *device );
void RemDevice( struct Device *device );
BYTE OpenDevice( UBYTE *devName, unsigned long unit,
	struct IORequest *ioRequest, unsigned long flags );
void CloseDevice( struct IORequest *ioRequest );
BYTE DoIO( struct IORequest *ioRequest );
void SendIO( struct IORequest *ioRequest );
BOOL CheckIO( struct IORequest *ioRequest );
BYTE WaitIO( struct IORequest *ioRequest );
void AbortIO( struct IORequest *ioRequest );
void AddResource( APTR resource );
void RemResource( APTR resource );
APTR OpenResource( UBYTE *resName );
void RawDoFmt( UBYTE *formatString, APTR dataStream, void (*putChProc)(),
	APTR putChData );
ULONG GetCC( void );
ULONG TypeOfMem( APTR address );
ULONG Procure( struct Semaphore *semaport, struct Message *bidMsg );
void Vacate( struct Semaphore *semaport );
struct Library *OpenLibrary( UBYTE *libName, unsigned long version );
void InitSemaphore( struct SignalSemaphore *sigSem );
void ObtainSemaphore( struct SignalSemaphore *sigSem );
void ReleaseSemaphore( struct SignalSemaphore *sigSem );
ULONG AttemptSemaphore( struct SignalSemaphore *sigSem );
void ObtainSemaphoreList( struct List *sigSem );
void ReleaseSemaphoreList( struct List *sigSem );
struct SignalSemaphore *FindSemaphore( UBYTE *sigSem );
void AddSemaphore( struct SignalSemaphore *sigSem );
void RemSemaphore( struct SignalSemaphore *sigSem );
ULONG SumKickData( void );
ULONG AddMemList( unsigned long size, unsigned long attributes,
	unsigned long pri, APTR base, UBYTE *name );
void CopyMem( APTR source, APTR dest, unsigned long size );
void CopyMemQuick( APTR source, APTR dest, unsigned long size );
void CacheClearU( void );
void CacheClearE( APTR address, unsigned long length, unsigned long caches );
ULONG CacheControl( unsigned long cacheBits, unsigned long cacheMask );
APTR CreateIORequest( struct MsgPort *port, unsigned long size );
void DeleteIORequest( APTR iorequest );
struct MsgPort *CreateMsgPort( void );
void DeleteMsgPort( struct MsgPort *port );
void ObtainSemaphoreShared( struct SignalSemaphore *sigSem );
APTR AllocVec( unsigned long byteSize, unsigned long requirements );
void FreeVec( APTR memoryBlock );
APTR CreatePrivatePool( unsigned long requirements, unsigned long puddleSize,
	unsigned long puddleThresh );
void DeletePrivatePool( APTR poolHeader );
APTR AllocPooled( unsigned long memSize, APTR poolHeader );
void FreePooled( APTR memory, APTR poolHeader );
void ColdReboot( void );
void StackSwap( APTR newSize, APTR newSP, APTR newStack );
void ChildFree( APTR tid );
void ChildOrphan( APTR tid );
void ChildStatus( APTR tid );
void ChildWait( APTR tid );
struct RecordLock {
	BPTR	rec_FH;
	ULONG	rec_Offset;
	ULONG	rec_Length;
	ULONG	rec_Mode;
};
struct CSource {
	UBYTE	*CS_Buffer;
	LONG	CS_Length;
	LONG	CS_CurChr;
};
struct RDArgs {
	struct	CSource RDA_Source;
	LONG	RDA_DAList;
	UBYTE	*RDA_Buffer;
	LONG	RDA_BufSiz;
	UBYTE	*RDA_ExtHelp;
	LONG	RDA_Flags;
};
struct AnchorPath {
	struct AChain	*ap_Base;
	struct AChain	*ap_Last;
	LONG	ap_BreakBits;
	LONG	ap_FoundBreak;
	BYTE	ap_Flags;
	BYTE	ap_Reserved;
	WORD	ap_Strlen;
	struct	FileInfoBlock ap_Info;
	UBYTE	ap_Buf[1];
};
struct AChain {
	struct AChain *an_Child;
	struct AChain *an_Parent;
	BPTR	an_Lock;
	struct FileInfoBlock an_Info;
	BYTE	an_Flags;
	UBYTE	an_String[1];
};
struct LocalVar {
	struct Node lv_Node;
	UWORD	lv_Flags;
	UBYTE	*lv_Value;
	ULONG	lv_Len;
};
struct NotifyMessage {
    struct Message nm_ExecMessage;
    ULONG  nm_Class;
    UWORD  nm_Code;
    struct NotifyRequest *nm_NReq;
    ULONG  nm_DoNotTouch;
    ULONG  nm_DoNotTouch2;
};
struct NotifyRequest {
	UBYTE *nr_Name;
	UBYTE *nr_FullName;
	ULONG nr_UserData;
	ULONG nr_Flags;
	union {
	    struct {
		struct MsgPort *nr_Port;
	    } nr_Msg;
	    struct {
		struct Task *nr_Task;
		UBYTE nr_SignalNum;
		UBYTE nr_pad[3];
	    } nr_Signal;
	} nr_stuff;
	ULONG nr_Reserved[4];
	ULONG nr_MsgCount;
	struct MsgPort *nr_Handler;
};
struct DateTime {
	struct DateStamp dat_Stamp;
	UBYTE	dat_Format;
	UBYTE	dat_Flags;
	UBYTE	*dat_StrDay;
	UBYTE	*dat_StrDate;
	UBYTE	*dat_StrTime;
};
BPTR Open( UBYTE *name, long accessMode );
LONG Close( BPTR file );
LONG Read( BPTR file, APTR buffer, long length );
LONG Write( BPTR file, APTR buffer, long length );
BPTR Input( void );
BPTR Output( void );
LONG Seek( BPTR file, long position, long offset );
LONG DeleteFile( UBYTE *name );
LONG Rename( UBYTE *oldName, UBYTE *newName );
BPTR Lock( UBYTE *name, long type );
void UnLock( BPTR lock );
BPTR DupLock( BPTR lock );
LONG Examine( BPTR lock, struct FileInfoBlock *fileInfoBlock );
LONG ExNext( BPTR lock, struct FileInfoBlock *fileInfoBlock );
LONG Info( BPTR lock, struct InfoData *parameterBlock );
BPTR CreateDir( UBYTE *name );
BPTR CurrentDir( BPTR lock );
LONG IoErr( void );
struct MsgPort *CreateProc( UBYTE *name, long pri, BPTR segList,
	long stackSize );
void Exit( long returnCode );
BPTR LoadSeg( UBYTE *name );
void UnLoadSeg( BPTR seglist );
struct MsgPort *DeviceProc( UBYTE *name );
LONG SetComment( UBYTE *name, UBYTE *comment );
LONG SetProtection( UBYTE *name, long protect );
struct DateStamp *DateStamp( struct DateStamp *date );
void Delay( long timeout );
LONG WaitForChar( BPTR file, long timeout );
BPTR ParentDir( BPTR lock );
LONG IsInteractive( BPTR file );
LONG Execute( UBYTE *string, BPTR file, BPTR file2 );
APTR AllocDosObject( unsigned long type, struct TagItem *tags );
APTR AllocDosObjectTagList( unsigned long type, struct TagItem *tags );
APTR AllocDosObjectTags( unsigned long type, unsigned long tag1type, ... );
void FreeDosObject( unsigned long type, APTR ptr );
LONG DoPkt( struct MsgPort *port, long action, long arg1, long arg2, long arg3,
	long arg4, long arg5 );
LONG DoPkt0( struct MsgPort *port, long action );
LONG DoPkt1( struct MsgPort *port, long action, long arg1 );
LONG DoPkt2( struct MsgPort *port, long action, long arg1, long arg2 );
LONG DoPkt3( struct MsgPort *port, long action, long arg1, long arg2,
	long arg3 );
LONG DoPkt4( struct MsgPort *port, long action, long arg1, long arg2,
	long arg3, long arg4 );
void SendPkt( struct DosPacket *dp, struct MsgPort *port,
	struct MsgPort *replyport );
struct DosPacket *WaitPkt( void );
void ReplyPkt( struct DosPacket *dp, long res1, long res2 );
void AbortPkt( struct MsgPort *port, struct DosPacket *pkt );
BOOL LockRecord( BPTR fh, unsigned long offset, unsigned long length,
	unsigned long mode, unsigned long timeout );
BOOL LockRecords( struct RecordLock *recArray, unsigned long timeout );
BOOL UnLockRecord( BPTR fh, unsigned long offset, unsigned long length );
BOOL UnLockRecords( struct RecordLock *recArray );
BPTR SelectInput( BPTR fh );
BPTR SelectOutput( BPTR fh );
LONG FGetC( BPTR fh );
void FPutC( BPTR fh, unsigned long ch );
LONG UnGetC( BPTR fh, long character );
LONG FRead( BPTR fh, APTR block, unsigned long blocklen,
	unsigned long number );
LONG FWrite( BPTR fh, APTR block, unsigned long blocklen,
	unsigned long number );
UBYTE *FGets( BPTR fh, UBYTE *buf, unsigned long buflen );
LONG FPuts( BPTR fh, UBYTE *str );
void VFWritef( BPTR fh, UBYTE *format, LONG *argarray );
void FWritef( BPTR fh, UBYTE *format, long arg1, ... );
LONG VFPrintf( BPTR fh, UBYTE *format, LONG *argarray );
LONG FPrintf( BPTR fh, UBYTE *format, long arg1, ... );
void Flush( BPTR fh );
LONG SetVBuf( BPTR fh, UBYTE *buff, long type, long size );
BPTR DupLockFromFH( BPTR fh );
BPTR OpenFromLock( BPTR lock );
BPTR ParentOfFH( BPTR fh );
BOOL ExamineFH( BPTR fh, struct FileInfoBlock *fib );
LONG SetFileDate( UBYTE *name, struct DateStamp *date );
LONG NameFromLock( BPTR lock, UBYTE *buffer, long len );
LONG NameFromFH( BPTR fh, UBYTE *buffer, long len );
WORD SplitName( UBYTE *name, unsigned long seperator, UBYTE *buf, long oldpos,
	long size );
LONG SameLock( BPTR lock1, BPTR lock2 );
LONG SetMode( BPTR fh, long mode );
LONG ExAll( BPTR lock, struct ExAllData *buffer, long size, long data,
	struct ExAllControl *control );
LONG ReadLink( struct MsgPort *port, BPTR lock, UBYTE *path, UBYTE *buffer,
	unsigned long size );
LONG MakeLink( UBYTE *name, long dest, long soft );
LONG ChangeMode( long type, BPTR fh, long newmode );
LONG SetFileSize( BPTR fh, long pos, long mode );
LONG SetIoErr( long result );
BOOL Fault( long code, UBYTE *header, UBYTE *buffer, long len );
BOOL PrintFault( long code, UBYTE *header );
LONG ErrorReport( long code, long type, unsigned long arg1,
	struct MsgPort *device );
struct CommandLineInterface *Cli( void );
struct Process *CreateNewProc( struct TagItem *tags );
struct Process *CreateNewProcTagList( struct TagItem *tags );
struct Process *CreateNewProcTags( unsigned long tag1type, ... );
LONG RunCommand( BPTR seg, long stack, UBYTE *paramptr, long paramlen );
struct MsgPort *GetConsoleTask( void );
struct MsgPort *SetConsoleTask( struct MsgPort *task );
struct MsgPort *GetFileSysTask( void );
struct MsgPort *SetFileSysTask( struct MsgPort *task );
UBYTE *GetArgStr( void );
BOOL SetArgStr( UBYTE *string );
struct Process *FindCliProc( unsigned long num );
ULONG MaxCli( void );
BOOL SetCurrentDirName( UBYTE *name );
BOOL GetCurrentDirName( UBYTE *buf, long len );
BOOL SetProgramName( UBYTE *name );
BOOL GetProgramName( UBYTE *buf, long len );
BOOL SetPrompt( UBYTE *name );
BOOL GetPrompt( UBYTE *buf, long len );
BPTR SetProgramDir( BPTR lock );
BPTR GetProgramDir( void );
LONG SystemTagList( UBYTE *command, struct TagItem *tags );
LONG System( UBYTE *command, struct TagItem *tags );
LONG SystemTags( UBYTE *command, unsigned long tag1type, ... );
LONG AssignLock( UBYTE *name, BPTR lock );
BOOL AssignLate( UBYTE *name, UBYTE *path );
BOOL AssignPath( UBYTE *name, UBYTE *path );
BOOL AssignAdd( UBYTE *name, BPTR lock );
LONG RemAssignList( UBYTE *name, BPTR lock );
struct DevProc *GetDeviceProc( UBYTE *name, struct DevProc *dp );
void FreeDeviceProc( struct DevProc *dp );
struct DosList *LockDosList( unsigned long flags );
void UnLockDosList( unsigned long flags );
struct DosList *AttemptLockDosList( unsigned long flags );
BOOL RemDosEntry( struct DosList *dlist );
struct DosList *AddDosEntry( struct DosList *dlist );
struct DosList *FindDosEntry( struct DosList *dlist, UBYTE *name,
	unsigned long flags );
struct DosList *NextDosEntry( struct DosList *dlist, unsigned long flags );
struct DosList *MakeDosEntry( UBYTE *name, long type );
void FreeDosEntry( struct DosList *dlist );
BOOL IsFileSystem( UBYTE *name );
BOOL Format( UBYTE *filesystem, UBYTE *volumename, unsigned long dostype );
LONG Relabel( UBYTE *drive, UBYTE *newname );
LONG Inhibit( UBYTE *name, long onoff );
LONG AddBuffers( UBYTE *name, long number );
LONG CompareDates( struct DateStamp *date1, struct DateStamp *date2 );
LONG DateToStr( struct DateTime *datetime );
LONG StrToDate( struct DateTime *datetime );
BPTR InternalLoadSeg( BPTR fh, BPTR table, LONG *funcarray, LONG *stack );
void InternalUnLoadSeg( BPTR seglist, void (*freefunc)() );
BPTR NewLoadSeg( UBYTE *file, struct TagItem *tags );
BPTR NewLoadSegTagList( UBYTE *file, struct TagItem *tags );
BPTR NewLoadSegTags( UBYTE *file, unsigned long tag1type, ... );
LONG AddSegment( UBYTE *name, BPTR seg, long system );
struct Segment *FindSegment( UBYTE *name, struct Segment *seg, long system );
LONG RemSegment( struct Segment *seg );
LONG CheckSignal( long mask );
struct RDArgs *ReadArgs( UBYTE *template, LONG *array, struct RDArgs *args );
LONG FindArg( UBYTE *keyword, UBYTE *template );
LONG ReadItem( UBYTE *name, long maxchars, struct CSource *cSource );
LONG StrToLong( UBYTE *string, LONG *value );
LONG MatchFirst( UBYTE *pat, struct AnchorPath *anchor );
LONG MatchNext( struct AnchorPath *anchor );
void MatchEnd( struct AnchorPath *anchor );
BOOL ParsePattern( UBYTE *pat, UBYTE *buf, long buflen );
BOOL MatchPattern( UBYTE *pat, UBYTE *str );
void FreeArgs( struct RDArgs *args );
UBYTE *FilePart( UBYTE *path );
UBYTE *PathPart( UBYTE *path );
BOOL AddPart( UBYTE *dirname, UBYTE *filename, unsigned long size );
BOOL StartNotify( struct NotifyRequest *notify );
void EndNotify( struct NotifyRequest *notify );
BOOL SetVar( UBYTE *name, UBYTE *buffer, long size, long flags );
LONG GetVar( UBYTE *name, UBYTE *buffer, long size, long flags );
LONG DeleteVar( UBYTE *name, unsigned long flags );
struct LocalVar *FindVar( UBYTE *name, unsigned long type );
LONG CliInit( struct DosPacket *dp );
LONG CliInitNewcli( struct DosPacket *dp );
LONG CliInitRun( struct DosPacket *dp );
LONG WriteChars( UBYTE *buf, unsigned long buflen );
LONG PutStr( UBYTE *str );
LONG VPrintf( UBYTE *format, LONG *argarray );
LONG Printf( UBYTE *format, long arg1, ... );
BOOL ParsePatternNoCase( UBYTE *pat, UBYTE *buf, long buflen );
BOOL MatchPatternNoCase( UBYTE *pat, UBYTE *str );
BOOL SameDevice( BPTR lock1, BPTR lock2 );
void OpenIntuition( void );
void Intuition( struct InputEvent *iEvent );
UWORD AddGadget( struct Window *window, struct Gadget *gadget,
	unsigned long position );
BOOL ClearDMRequest( struct Window *window );
void ClearMenuStrip( struct Window *window );
void ClearPointer( struct Window *window );
BOOL CloseScreen( struct Screen *screen );
void CloseWindow( struct Window *window );
LONG CloseWorkBench( void );
void CurrentTime( ULONG *seconds, ULONG *micros );
BOOL DisplayAlert( unsigned long alertNumber, UBYTE *string,
	unsigned long height );
void DisplayBeep( struct Screen *screen );
BOOL DoubleClick( unsigned long sSeconds, unsigned long sMicros,
	unsigned long cSeconds, unsigned long cMicros );
void DrawBorder( struct RastPort *rp, struct Border *border, long leftOffset,
	long topOffset );
void DrawImage( struct RastPort *rp, struct Image *image, long leftOffset,
	long topOffset );
void EndRequest( struct Requester *requester, struct Window *window );
struct Preferences *GetDefPrefs( struct Preferences *preferences, long size );
struct Preferences *GetPrefs( struct Preferences *preferences, long size );
void InitRequester( struct Requester *requester );
struct MenuItem *ItemAddress( struct Menu *menuStrip,
	unsigned long menuNumber );
BOOL ModifyIDCMP( struct Window *window, unsigned long flags );
void ModifyProp( struct Gadget *gadget, struct Window *window,
	struct Requester *requester, unsigned long flags,
	unsigned long horizPot, unsigned long vertPot,
	unsigned long horizBody, unsigned long vertBody );
void MoveScreen( struct Screen *screen, long dx, long dy );
void MoveWindow( struct Window *window, long dx, long dy );
void OffGadget( struct Gadget *gadget, struct Window *window,
	struct Requester *requester );
void OffMenu( struct Window *window, unsigned long menuNumber );
void OnGadget( struct Gadget *gadget, struct Window *window,
	struct Requester *requester );
void OnMenu( struct Window *window, unsigned long menuNumber );
struct Screen *OpenScreen( struct NewScreen *newScreen );
struct Window *OpenWindow( struct NewWindow *newWindow );
BOOL OpenWorkBench( void );
void PrintIText( struct RastPort *rp, struct IntuiText *iText, long left,
	long top );
void RefreshGadgets( struct Gadget *gadgets, struct Window *window,
	struct Requester *requester );
UWORD RemoveGadget( struct Window *window, struct Gadget *gadget );
void ReportMouse( long flag, struct Window *window );
void ReportMouse1( struct Window *window, long flag );
BOOL Request( struct Requester *requester, struct Window *window );
void ScreenToBack( struct Screen *screen );
void ScreenToFront( struct Screen *screen );
BOOL SetDMRequest( struct Window *window, struct Requester *requester );
BOOL SetMenuStrip( struct Window *window, struct Menu *menu );
void SetPointer( struct Window *window, UWORD *pointer, long height,
	long width, long xOffset, long yOffset );
void SetWindowTitles( struct Window *window, UBYTE *windowTitle,
	UBYTE *screenTitle );
void ShowTitle( struct Screen *screen, long showIt );
void SizeWindow( struct Window *window, long dx, long dy );
struct View *ViewAddress( void );
struct ViewPort *ViewPortAddress( struct Window *window );
void WindowToBack( struct Window *window );
void WindowToFront( struct Window *window );
BOOL WindowLimits( struct Window *window, long widthMin, long heightMin,
	unsigned long widthMax, unsigned long heightMax );
struct Preferences *SetPrefs( struct Preferences *preferences, long size,
	long inform );
LONG IntuiTextLength( struct IntuiText *iText );
BOOL WBenchToBack( void );
BOOL WBenchToFront( void );
BOOL AutoRequest( struct Window *window, struct IntuiText *body,
	struct IntuiText *posText, struct IntuiText *negText,
	unsigned long pFlag, unsigned long nFlag, unsigned long width,
	unsigned long height );
void BeginRefresh( struct Window *window );
struct Window *BuildSysRequest( struct Window *window, struct IntuiText *body,
	struct IntuiText *posText, struct IntuiText *negText,
	unsigned long flags, unsigned long width, unsigned long height );
void EndRefresh( struct Window *window, long complete );
void FreeSysRequest( struct Window *window );
void MakeScreen( struct Screen *screen );
void RemakeDisplay( void );
void RethinkDisplay( void );
APTR AllocRemember( struct Remember **rememberKey, unsigned long size,
	unsigned long flags );
void AlohaWorkbench( long wbport );
void FreeRemember( struct Remember **rememberKey, long reallyForget );
ULONG LockIBase( unsigned long dontknow );
void UnlockIBase( unsigned long ibLock );
LONG GetScreenData( APTR buffer, unsigned long size, unsigned long type,
	struct Screen *screen );
void RefreshGList( struct Gadget *gadgets, struct Window *window,
	struct Requester *requester, long numGad );
UWORD AddGList( struct Window *window, struct Gadget *gadget,
	unsigned long position, long numGad, struct Requester *requester );
UWORD RemoveGList( struct Window *remPtr, struct Gadget *gadget,
	long numGad );
LONG ActivateWindow( struct Window *window );
void RefreshWindowFrame( struct Window *window );
BOOL ActivateGadget( struct Gadget *gadgets, struct Window *window,
	struct Requester *requester );
void NewModifyProp( struct Gadget *gadget, struct Window *window,
	struct Requester *requester, unsigned long flags,
	unsigned long horizPot, unsigned long vertPot,
	unsigned long horizBody, unsigned long vertBody, long numGad );
LONG QueryOverscan( unsigned long displayID, struct Rectangle *rect,
	long oScanType );
void MoveWindowInFrontOf( struct Window *window,
	struct Window *behindWindow );
void ChangeWindowBox( struct Window *window, long left, long top, long width,
	long height );
struct Hook *SetEditHook( struct Hook *hook );
LONG SetMouseQueue( struct Window *window, unsigned long queueLength );
void ZipWindow( struct Window *window );
struct Screen *LockPubScreen( UBYTE *name );
void UnlockPubScreen( UBYTE *name, struct Screen *screen );
struct List *LockPubScreenList( void );
void UnlockPubScreenList( void );
UBYTE *NextPubScreen( struct Screen *screen, UBYTE *namebuf );
void SetDefaultPubScreen( UBYTE *name );
UWORD SetPubScreenModes( unsigned long modes );
UWORD PubScreenStatus( struct Screen *screen, unsigned long statusFlags );
struct RastPort *ObtainGIRPort( struct GadgetInfo *gInfo );
void ReleaseGIRPort( struct RastPort *rp );
void GadgetMouse( struct Gadget *gadget, struct GadgetInfo *gInfo,
	WORD *mousePoint );
void GetDefaultPubScreen( UBYTE *nameBuffer );
LONG EasyRequestArgs( struct Window *window, struct EasyStruct *easyStruct,
	ULONG *idcmpPtr, APTR args );
LONG EasyRequest( struct Window *window, struct EasyStruct *easyStruct,
	ULONG *idcmpPtr, APTR arg1, ... );
struct Window *BuildEasyRequestArgs( struct Window *window,
	struct EasyStruct *easyStruct, unsigned long idcmp, APTR args );
struct Window *BuildEasyRequest( struct Window *window,
	struct EasyStruct *easyStruct, unsigned long idcmp, APTR arg1, ... );
LONG SysReqHandler( struct Window *window, ULONG *idcmpPtr, long waitInput );
struct Window *OpenWindowTagList( struct NewWindow *newWindow,
	struct TagItem *tagList );
struct Window *OpenWindowTags( struct NewWindow *newWindow,
	unsigned long tag1Type, ... );
struct Screen *OpenScreenTagList( struct NewScreen *newScreen,
	struct TagItem *tagList );
struct Screen *OpenScreenTags( struct NewScreen *newScreen,
	unsigned long tag1Type, ... );
void DrawImageState( struct RastPort *rp, struct Image *image, long leftOffset,
	long topOffset, unsigned long state, struct DrawInfo *drawInfo );
BOOL PointInImage( unsigned long point, struct Image *image );
void EraseImage( struct RastPort *rp, struct Image *image, long leftOffset,
	long topOffset );
APTR NewObjectA( struct IClass *class, UBYTE *classID,
	struct TagItem *tagList );
APTR NewObject( struct IClass *class, UBYTE *classID, unsigned long tag1,
	... );
void DisposeObject( APTR object );
ULONG SetAttrsA( APTR object, struct TagItem *tagList );
ULONG SetAttrs( APTR object, unsigned long tag1, ... );
ULONG GetAttr( unsigned long attrID, APTR object, ULONG *storagePtr );
ULONG SetGadgetAttrsA( struct Gadget *gadget, struct Window *window,
	struct Requester *requester, struct TagItem *tagList );
ULONG SetGadgetAttrs( struct Gadget *gadget, struct Window *window,
	struct Requester *requester, unsigned long tag1, ... );
APTR NextObject( APTR objectPtrPtr );
struct IClass *MakeClass( UBYTE *classID, UBYTE *superClassID,
	struct IClass *superClassPtr, unsigned long instanceSize,
	unsigned long flags );
void AddClass( struct IClass *class );
struct DrawInfo *GetScreenDrawInfo( struct Screen *screen );
void FreeScreenDrawInfo( struct Screen *screen, struct DrawInfo *drawInfo );
BOOL ResetMenuStrip( struct Window *window, struct Menu *menu );
void RemoveClass( struct IClass *classPtr );
BOOL FreeClass( struct IClass *classPtr );
struct FontContents {
    char    fc_FileName[256];
    UWORD   fc_YSize;
    UBYTE   fc_Style;
    UBYTE   fc_Flags;
};
struct TFontContents {
    char    tfc_FileName[256-2];
    UWORD   tfc_TagCount;
    UWORD   tfc_YSize;
    UBYTE   tfc_Style;
    UBYTE   tfc_Flags;
};
struct FontContentsHeader {
    UWORD   fch_FileID;
    UWORD   fch_NumEntries;
};
struct DiskFontHeader {
    struct Node dfh_DF;
    UWORD   dfh_FileID;
    UWORD   dfh_Revision;
    LONG    dfh_Segment;
    char    dfh_Name[32];
    struct TextFont dfh_TF;
};
struct AvailFonts {
    UWORD   af_Type;
    struct TextAttr af_Attr;
};
struct TAvailFonts {
    UWORD   taf_Type;
    struct TTextAttr taf_Attr;
};
struct AvailFontsHeader {
    UWORD   afh_NumEntries;
};
struct TextFont *OpenDiskFont( struct TextAttr *textAttr );
LONG AvailFonts( STRPTR buffer, long bufBytes, long flags );
struct FontContentsHeader *NewFontContents( BPTR fontsLock, STRPTR fontName );
void DisposeFontContents( struct FontContentsHeader *fontContentsHeader );
struct DiskFontHeader *NewScaledDiskFont( struct TextFont *sourceFont,
	struct TextAttr *destTextAttr );
struct VSprite
{
    struct VSprite   *NextVSprite;
    struct VSprite   *PrevVSprite;
    struct VSprite   *DrawPath;
    struct VSprite   *ClearPath;
    WORD OldY, OldX;
    WORD Flags;
    WORD Y, X;
    WORD Height;
    WORD Width;
    WORD Depth;
    WORD MeMask;
    WORD HitMask;
    WORD *ImageData;
    WORD *BorderLine;
    WORD *CollMask;
    WORD *SprColors;
    struct Bob *VSBob;
    BYTE PlanePick;
    BYTE PlaneOnOff;
    WORD VUserExt;
};
struct Bob
{
    WORD Flags;
    WORD *SaveBuffer;
    WORD *ImageShadow;
    struct Bob *Before;
    struct Bob *After;
    struct VSprite   *BobVSprite;
    struct AnimComp  *BobComp;
    struct DBufPacket *DBuffer;
    WORD BUserExt;
};
struct AnimComp
{
    WORD Flags;
    WORD Timer;
    WORD TimeSet;
    struct AnimComp  *NextComp;
    struct AnimComp  *PrevComp;
    struct AnimComp  *NextSeq;
    struct AnimComp  *PrevSeq;
    WORD (*AnimCRoutine)();
    WORD YTrans;
    WORD XTrans;
    struct AnimOb    *HeadOb;
    struct Bob	     *AnimBob;
};
struct AnimOb
{
    struct AnimOb    *NextOb, *PrevOb;
    LONG Clock;
    WORD AnOldY, AnOldX;
    WORD AnY, AnX;
    WORD YVel, XVel;
    WORD YAccel, XAccel;
    WORD RingYTrans, RingXTrans;
    WORD (*AnimORoutine)();
    struct AnimComp  *HeadComp;
    WORD AUserExt;
};
struct DBufPacket
{
    WORD BufY, BufX;
    struct VSprite   *BufPath;
    WORD *BufBuffer;
};
struct collTable
{
    int (*collPtrs[16])();
};
struct RegionRectangle
{
    struct RegionRectangle *Next,*Prev;
    struct Rectangle bounds;
};
struct Region
{
    struct Rectangle bounds;
    struct RegionRectangle *RegionRectangle;
};
struct SimpleSprite
{
    UWORD *posctldata;
    UWORD height;
    UWORD   x,y;
    UWORD   num;
};
struct bltnode
{
    struct  bltnode *n;
    int     (*function)();
    char    stat;
    short   blitsize;
    short   beamsync;
    int     (*cleanup)();
};
LONG BltBitMap( struct BitMap *srcBitMap, long xSrc, long ySrc,
	struct BitMap *destBitMap, long xDest, long yDest, long xSize,
	long ySize, unsigned long minterm, unsigned long mask,
	PLANEPTR tempA );
void BltTemplate( PLANEPTR source, long xSrc, long srcMod,
	struct RastPort *destRP, long xDest, long yDest, long xSize,
	long ySize );
void ClearEOL( struct RastPort *rp );
void ClearScreen( struct RastPort *rp );
WORD TextLength( struct RastPort *rp, STRPTR string, unsigned long count );
LONG Text( struct RastPort *rp, STRPTR string, unsigned long count );
LONG SetFont( struct RastPort *rp, struct TextFont *textFont );
struct TextFont *OpenFont( struct TextAttr *textAttr );
void CloseFont( struct TextFont *textFont );
ULONG AskSoftStyle( struct RastPort *rp );
ULONG SetSoftStyle( struct RastPort *rp, unsigned long style,
	unsigned long enable );
void AddBob( struct Bob *bob, struct RastPort *rp );
void AddVSprite( struct VSprite *vSprite, struct RastPort *rp );
void DoCollision( struct RastPort *rp );
void DrawGList( struct RastPort *rp, struct ViewPort *vp );
void InitGels( struct VSprite *head, struct VSprite *tail,
	struct GelsInfo *gelsInfo );
void InitMasks( struct VSprite *vSprite );
void RemIBob( struct Bob *bob, struct RastPort *rp, struct ViewPort *vp );
void RemVSprite( struct VSprite *vSprite );
void SetCollision( unsigned long num,
	void (*routine)(struct VSprite *vSprite, APTR),
	struct GelsInfo *gelsInfo );
void SortGList( struct RastPort *rp );
void AddAnimOb( struct AnimOb *anOb, struct AnimOb **anKey,
	struct RastPort *rp );
void Animate( struct AnimOb **anKey, struct RastPort *rp );
BOOL GetGBuffers( struct AnimOb *anOb, struct RastPort *rp, long flag );
void InitGMasks( struct AnimOb *anOb );
void DrawEllipse( struct RastPort *rp, long xCenter, long yCenter, long a,
	long b );
LONG AreaEllipse( struct RastPort *rp, long xCenter, long yCenter, long a,
	long b );
void LoadRGB4( struct ViewPort *vp, UWORD *colors, long count );
void InitRastPort( struct RastPort *rp );
void InitVPort( struct ViewPort *vp );
void MrgCop( struct View *view );
void MakeVPort( struct View *view, struct ViewPort *vp );
void LoadView( struct View *view );
void WaitBlit( void );
void SetRast( struct RastPort *rp, unsigned long pen );
void Move( struct RastPort *rp, long x, long y );
void Draw( struct RastPort *rp, long x, long y );
LONG AreaMove( struct RastPort *rp, long x, long y );
LONG AreaDraw( struct RastPort *rp, long x, long y );
LONG AreaEnd( struct RastPort *rp );
void WaitTOF( void );
void QBlit( struct bltnode *blit );
void InitArea( struct AreaInfo *areaInfo, APTR vectorBuffer,
	long maxVectors );
void SetRGB4( struct ViewPort *vp, long index, unsigned long red,
	unsigned long green, unsigned long blue );
void QBSBlit( struct bltnode *blit );
void BltClear( PLANEPTR memBlock, unsigned long byteCount,
	unsigned long flags );
void RectFill( struct RastPort *rp, long xMin, long yMin, long xMax,
	long yMax );
void BltPattern( struct RastPort *rp, PLANEPTR mask, long xMin, long yMin,
	long xMax, long yMax, unsigned long maskBPR );
ULONG ReadPixel( struct RastPort *rp, long x, long y );
LONG WritePixel( struct RastPort *rp, long x, long y );
BOOL Flood( struct RastPort *rp, unsigned long mode, long x, long y );
void PolyDraw( struct RastPort *rp, long count, WORD *polyTable );
void SetAPen( struct RastPort *rp, unsigned long pen );
void SetBPen( struct RastPort *rp, unsigned long pen );
void SetDrMd( struct RastPort *rp, unsigned long drawMode );
void InitView( struct View *view );
void CBump( struct UCopList *copList );
void CMove( struct UCopList *copList, APTR destination, long data );
void CWait( struct UCopList *copList, long v, long h );
LONG VBeamPos( void );
void InitBitMap( struct BitMap *bitMap, long depth, long width, long height );
void ScrollRaster( struct RastPort *rp, long dx, long dy, long xMin, long yMin,
	long xMax, long yMax );
void WaitBOVP( struct ViewPort *vp );
WORD GetSprite( struct SimpleSprite *sprite, long num );
void FreeSprite( long num );
void ChangeSprite( struct ViewPort *vp, struct SimpleSprite *sprite,
	PLANEPTR newData );
void MoveSprite( struct ViewPort *vp, struct SimpleSprite *sprite, long x,
	long y );
void LockLayerRom( struct Layer *layer );
void UnlockLayerRom( struct Layer *layer );
void SyncSBitMap( struct Layer *layer );
void CopySBitMap( struct Layer *layer );
void OwnBlitter( void );
void DisownBlitter( void );
struct TmpRas *InitTmpRas( struct TmpRas *tmpRas, PLANEPTR buffer,
	long size );
void AskFont( struct RastPort *rp, struct TextAttr *textAttr );
void AddFont( struct TextFont *textFont );
void RemFont( struct TextFont *textFont );
PLANEPTR AllocRaster( unsigned long width, unsigned long height );
void FreeRaster( PLANEPTR p, unsigned long width, unsigned long height );
void AndRectRegion( struct Region *region, struct Rectangle *rectangle );
BOOL OrRectRegion( struct Region *region, struct Rectangle *rectangle );
struct Region *NewRegion( void );
BOOL ClearRectRegion( struct Region *region, struct Rectangle *rectangle );
void ClearRegion( struct Region *region );
void DisposeRegion( struct Region *region );
void FreeVPortCopLists( struct ViewPort *vp );
void FreeCopList( struct CopList *copList );
void ClipBlit( struct RastPort *srcRP, long xSrc, long ySrc,
	struct RastPort *destRP, long xDest, long yDest, long xSize,
	long ySize, unsigned long minterm );
BOOL XorRectRegion( struct Region *region, struct Rectangle *rectangle );
void FreeCprList( struct cprlist *cprList );
struct ColorMap *GetColorMap( long entries );
void FreeColorMap( struct ColorMap *colorMap );
ULONG GetRGB4( struct ColorMap *colorMap, long entry );
void ScrollVPort( struct ViewPort *vp );
struct CopList *UCopperListInit( struct UCopList *uCopList, long n );
void FreeGBuffers( struct AnimOb *anOb, struct RastPort *rp, long flag );
void BltBitMapRastPort( struct BitMap *srcBitMap, long xSrc, long ySrc,
	struct RastPort *destRP, long xDest, long yDest, long xSize,
	long ySize, unsigned long minterm );
BOOL OrRegionRegion( struct Region *srcRegion, struct Region *destRegion );
BOOL XorRegionRegion( struct Region *srcRegion, struct Region *destRegion );
BOOL AndRegionRegion( struct Region *srcRegion, struct Region *destRegion );
void SetRGB4CM( struct ColorMap *colorMap, long index, unsigned long red,
	unsigned long green, unsigned long blue );
void BltMaskBitMapRastPort( struct BitMap *srcBitMap, long xSrc, long ySrc,
	struct RastPort *destRP, long xDest, long yDest, long xSize,
	long ySize, unsigned long minterm, PLANEPTR bltMask );
BOOL AttemptLockLayerRom( struct Layer *layer );
APTR GfxNew( unsigned long gfxNodeType );
void GfxFree( APTR gfxNodePtr );
void GfxAssociate( APTR associateNode, APTR gfxNodePtr );
void BitMapScale( struct BitScaleArgs *bitScaleArgs );
UWORD ScalerDiv( unsigned long factor, unsigned long numerator,
	unsigned long denominator );
WORD TextExtent( struct RastPort *rp, STRPTR string, long count,
	struct TextExtent *textExtent );
ULONG TextFit( struct RastPort *rp, STRPTR string, unsigned long strLen,
	struct TextExtent *textExtent, struct TextExtent *constrainingExtent,
	long strDirection, unsigned long constrainingBitWidth,
	unsigned long constrainingBitHeight );
APTR GfxLookUp( APTR associateNode );
BOOL VideoControl( struct ColorMap *colorMap, struct TagItem *tagarray );
struct MonitorSpec *OpenMonitor( STRPTR monitorName,
	unsigned long displayID );
BOOL CloseMonitor( struct MonitorSpec *monitorSpec );
DisplayInfoHandle FindDisplayInfo( unsigned long displayID );
ULONG NextDisplayInfo( unsigned long displayID );
ULONG GetDisplayInfoData( DisplayInfoHandle handle, UBYTE *buf,
	unsigned long size, unsigned long tagID, unsigned long displayID );
void FontExtent( struct TextFont *font, struct TextExtent *fontExtent );
LONG ReadPixelLine8( struct RastPort *rp, unsigned long xstart,
	unsigned long ystart, unsigned long width, UBYTE *array,
	struct RastPort *tempRP );
LONG WritePixelLine8( struct RastPort *rp, unsigned long xstart,
	unsigned long ystart, unsigned long width, UBYTE *array,
	struct RastPort *tempRP );
LONG ReadPixelArray8( struct RastPort *rp, unsigned long xstart,
	unsigned long ystart, unsigned long xstop, unsigned long ystop,
	UBYTE *array, struct RastPort *temprp );
LONG WritePixelArray8( struct RastPort *rp, unsigned long xstart,
	unsigned long ystart, unsigned long xstop, unsigned long ystop,
	UBYTE *array, struct RastPort *temprp );
LONG GetVPModeID( struct ViewPort *vp );
LONG ModeNotAvailable( unsigned long modeID );
WORD WeighTAMatch( struct TextAttr *reqTextAttr,
	struct TextAttr *targetTextAttr, struct TagItem *targetTags );
void EraseRect( struct RastPort *rp, long xMin, long yMin, long xMax,
	long yMax );
ULONG ExtendFont( struct TextFont *font, struct TagItem *fontTags );
void StripFont( struct TextFont *font );
struct Gadget *CreateGadgetA( unsigned long kind, struct Gadget *gad,
	struct NewGadget *ng, struct TagItem *taglist );
struct Gadget *CreateGadget( unsigned long kind, struct Gadget *gad,
	struct NewGadget *ng, Tag tag1, ... );
void FreeGadgets( struct Gadget *gad );
void GT_SetGadgetAttrsA( struct Gadget *gad, struct Window *win,
	struct Requester *req, struct TagItem *taglist );
void GT_SetGadgetAttrs( struct Gadget *gad, struct Window *win,
	struct Requester *req, Tag tag1, ... );
struct Menu *CreateMenusA( struct NewMenu *newmenu, struct TagItem *taglist );
struct Menu *CreateMenus( struct NewMenu *newmenu, Tag tag1, ... );
void FreeMenus( struct Menu *menu );
BOOL LayoutMenuItemsA( struct MenuItem *firstitem, APTR vi,
	struct TagItem *taglist );
BOOL LayoutMenuItems( struct MenuItem *firstitem, APTR vi, Tag tag1, ... );
BOOL LayoutMenusA( struct Menu *firstmenu, APTR vi, struct TagItem *taglist );
BOOL LayoutMenus( struct Menu *firstmenu, APTR vi, Tag tag1, ... );
struct IntuiMessage *GT_GetIMsg( struct MsgPort *iport );
void GT_ReplyIMsg( struct IntuiMessage *imsg );
void GT_RefreshWindow( struct Window *win, struct Requester *req );
void GT_BeginRefresh( struct Window *win );
void GT_EndRefresh( struct Window *win, long complete );
struct IntuiMessage *GT_FilterIMsg( struct IntuiMessage *imsg );
struct IntuiMessage *GT_PostFilterIMsg( struct IntuiMessage *imsg );
struct Gadget *CreateContext( struct Gadget **glistptr );
void DrawBevelBoxA( struct RastPort *rport, long left, long top, long width,
	long height, struct TagItem *taglist );
void DrawBevelBox( struct RastPort *rport, long left, long top, long width,
	long height, Tag tag1, ... );
APTR GetVisualInfoA( struct Screen *screen, struct TagItem *taglist );
APTR GetVisualInfo( struct Screen *screen, Tag tag1, ... );
void FreeVisualInfo( APTR vi );
struct WBStartup {
    struct Message	sm_Message;
    struct MsgPort *	sm_Process;
    BPTR		sm_Segment;
    LONG		sm_NumArgs;
    char *		sm_ToolWindow;
    struct WBArg *	sm_ArgList;
};
struct WBArg {
    BPTR		wa_Lock;
    BYTE *		wa_Name;
};
struct FileRequester	{
	APTR	rf_Reserved1;
	BYTE	*rf_File;
	BYTE	*rf_Dir;
	CPTR	rf_Reserved2;
	UBYTE	rf_Reserved3;
	UBYTE	rf_Reserved4;
	APTR	rf_Reserved5;
	WORD	rf_LeftEdge,rf_TopEdge;
	WORD	rf_Width,rf_Height;
	WORD	rf_Reserved6;
	LONG	rf_NumArgs;
	struct WBArg *rf_ArgList;
	APTR	rf_UserData;
	APTR	rf_Reserved7;
	APTR	rf_Reserved8;
	BYTE	*rf_Pat;
	};
struct FontRequester	{
	APTR	fo_Reserved1[2];
	struct TextAttr fo_Attr;
	UBYTE	fo_FrontPen;
	UBYTE	fo_BackPen;
	UBYTE	fo_DrawMode;
	APTR	fo_UserData;
	};
struct FileRequester *AllocFileRequest( void );
void FreeFileRequest( struct FileRequester *fileReq );
BOOL RequestFile( struct FileRequester *fileReq );
APTR AllocAslRequest( unsigned long type, struct TagItem *tagList );
APTR AllocAslRequestTags( unsigned long type, Tag Tag1, ... );
void FreeAslRequest( APTR request );
BOOL AslRequest( APTR request, struct TagItem *tagList );
BOOL AslRequestTags( APTR request, Tag Tag1, ... );
int	 SPFix();
float	 SPFlt();
int	 SPCmp();
int	 SPTst();
float	 SPAbs();
float	 SPFloor();
float	 SPCeil();
float	 SPNeg();
float	 SPAdd();
float	 SPSub();
float	 SPMul();
float	 SPDiv();
float	 SPAsin(),  SPAcos(),  SPAtan();
float	 SPSin(),   SPCos(),   SPTan(),   SPSincos();
float	 SPSinh(),  SPCosh(),  SPTanh();
float	 SPExp(),   SPLog(),   SPLog10(), SPPow();
float	 SPSqrt(),  SPFieee();
float	 afp(),    dbf();
struct NewBroker {
   BYTE     nb_Version;
   BYTE     *nb_Name;
   BYTE     *nb_Title;
   BYTE     *nb_Descr;
   SHORT    nb_Unique;
   SHORT    nb_Flags;
   BYTE     nb_Pri;
   struct MsgPort   *nb_Port;
   WORD     nb_ReservedChannel;
};
typedef LONG   CxObj;
typedef LONG   CxMsg;
typedef LONG   (*PFL)();
struct InputXpression {
   UBYTE   ix_Version;
   UBYTE   ix_Class;
   UWORD   ix_Code;
   UWORD   ix_CodeMask;
   UWORD   ix_Qualifier;
   UWORD   ix_QualMask;
   UWORD   ix_QualSame;
   };
typedef struct InputXpression IX;
void BeginIO( struct IORequest *io );
struct IORequest *CreateExtIO( struct MsgPort *msg, long size );
struct MsgPort *CreatePort( UBYTE *name, long pri );
struct IOStdReq *CreateStdIO( struct MsgPort *msg );
struct Task *CreateTask( UBYTE *name, long pri, APTR initPC,
	unsigned long stackSize );
void DeleteExtIO( struct IORequest *io );
void DeletePort( struct MsgPort *io );
void DeleteStdIO( struct IOStdReq *io );
void DeleteTask( struct Task *task );
void NewList( struct List *list );
LONG NameFromAnchor( struct AnchorPath *anchor, UBYTE *buffer, long buflen );
void AddTOF( struct Isrvstr *i, long (*p)(), long a );
void RemTOF( struct Isrvstr *i );
void waitbeam( long b );
FLOAT afp( BYTE *string );
void arnd( long place, long SPExp, BYTE *string );
FLOAT dbf( unsigned long SPExp, unsigned long mant );
LONG fpa( FLOAT fnum, BYTE *string );
void fpbcd( FLOAT fnum, BYTE *string );
LONG TimeDelay( long unit, unsigned long secs, unsigned long microsecs );
LONG DoTimer( struct timeval *, long unit, long command );
void ArgArrayDone( void );
UBYTE **ArgArrayInit( long arg1, UBYTE **arg2 );
LONG ArgInt( UBYTE **arg1, UBYTE *arg2, long arg3 );
UBYTE *ArgString( UBYTE **arg1, UBYTE *arg2, UBYTE *arg3 );
CxObj *HotKey( UBYTE *arg1, struct MsgPort *arg2, long arg3 );
struct InputEvent *InvertString( UBYTE *arg1, ULONG *arg2 );
LONG GetIcon( UBYTE *name, struct DiskObject *icon,
	struct FreeList *freelist );
BOOL PutIcon( UBYTE *name, struct DiskObject *icon );
void FreeFreeList( struct FreeList *freelist );
BOOL AddFreeList( struct FreeList *freelist, APTR mem, unsigned long size );
struct DiskObject *GetDiskObject( UBYTE *name );
BOOL PutDiskObject( UBYTE *name, struct DiskObject *diskobj );
void FreeDiskObject( struct DiskObject *diskobj );
UBYTE *FindToolType( UBYTE **toolTypeArray, UBYTE *typeName );
BOOL MatchToolValue( UBYTE *typeString, UBYTE *value );
UBYTE *BumpRevision( UBYTE *newname, UBYTE *oldname );
struct DiskObject *GetDefDiskObject( long type );
BOOL PutDefDiskObject( struct DiskObject *diskObject );
struct DiskObject *GetDiskObjectNew( UBYTE *name );
BOOL DeleteDiskObject( UBYTE *name );
struct AppWindow *AddAppWindowA( unsigned long id, unsigned long userdata,
	struct Window *window, struct MsgPort *msgport,
	struct TagItem *taglist );
struct AppWindow *AddAppWindow( unsigned long id, unsigned long userdata,
	struct Window *window, struct MsgPort *msgport, Tag tag1, ... );
BOOL RemoveAppWindow( struct AppWindow *appWindow );
struct AppIcon *AddAppIconA( unsigned long id, unsigned long userdata,
	UBYTE *text, struct MsgPort *msgport, struct FileLock *lock,
	struct DiskObject *diskobj, struct TagItem *taglist );
struct AppIcon *AddAppIcon( unsigned long id, unsigned long userdata,
	UBYTE *text, struct MsgPort *msgport, struct FileLock *lock,
	struct DiskObject *diskobj, Tag tag1, ... );
BOOL RemoveAppIcon( struct AppIcon *appIcon );
struct AppMenuItem *AddAppMenuItemA( unsigned long id, unsigned long userdata,
	UBYTE *text, struct MsgPort *msgport, struct TagItem *taglist );
struct AppMenuItem *AddAppMenuItem( unsigned long id, unsigned long userdata,
	UBYTE *text, struct MsgPort *msgport, Tag tag1, ... );
BOOL RemoveAppMenuItem( struct AppMenuItem *appMenuItem );
typedef struct TagItem          TAGS;
typedef BPTR                    LOCK;
typedef struct FileInfoBlock    FIB;
typedef struct Process          APROCESS;
typedef struct CommandLineInterface CLI;
typedef struct ExecBase 	EBASE;
typedef struct Node             NODE;
typedef struct List             LIST;
typedef struct Library          LIBRARY;
typedef struct Message          MSG;
typedef struct MsgPort          MPORT;
typedef struct Task		TASK;
typedef struct IntuitionBase    IBASE;
typedef struct VisualInfo       VINFO;
typedef struct Gadget           GADGET;
typedef struct NewGadget        NEWGAD;
typedef struct Screen           SCREEN;
typedef struct Window           WINDOW;
typedef struct IntuiMessage     IMSG;
typedef struct StringInfo       STRINGINFO;
typedef struct GfxBase          GBASE;
typedef struct View             VIEW;
typedef struct ViewPort         VPORT;
typedef struct RastPort         RPORT;
typedef struct BitMap           BITMAP;
typedef struct RasInfo          RINFO;
typedef struct TextAttr         TATTR;
typedef struct Rectangle        RECT;
typedef struct TextFont         FONT;
typedef struct IORequest        IOREQ;
typedef struct IOStdReq         STDREQ;
typedef struct IOExtSer         SERREQ;
typedef struct WBStartup	WBMSG;
typedef struct FontRequester    FONTREQ;
typedef struct FileRequester    FILEREQ;
extern __far struct Custom      custom;
extern GBASE                    *GfxBase;
typedef struct DLIST {
	NODE	node;
	char	name[2];
} DLIST;
typedef struct SYMLIST {
	ULONG *symbolname;
	ULONG address;
} SYMLIST;
enum DTYPES {
	DTYPE_DOSBASE,
	DTYPE_PROCESS,
	DTYPE_INFO,
	DTYPE_EXECBASE,
	DTYPE_RESOURCES,
	DTYPE_INTRS,
	DTYPE_PORTS,
	DTYPE_TASKS,
	DTYPE_LIBS,
	DTYPE_DEVICES,
	DTYPE_MEMLIST,
	DTYPE_REXXLIST,
	DTYPE_SYMLIST,
	MAX_DTYPE,
};
typedef struct DBugDisp {
	NODE	ds_Node;
	WINDOW	*ds_Win;
	STDREQ	ds_CReadReq;
	STDREQ	ds_CWriteReq;
	UBYTE	ds_CReadIP;
	UBYTE	ds_CWriteIP;
	UBYTE	ds_OpenError;
	UBYTE	ds_CsiState;
	UBYTE	ds_DoneFlag;
	UBYTE	ds_DisplayOffsets;
	UBYTE	ds_PromptLen;
	UBYTE	ds_PromptStart;
	ULONG	ds_Flags;
	UBYTE	ds_CInChar;
	UBYTE	ds_COutBuf[255];
	WORD	ds_COutIndex;
	UWORD	ds_DisplayMode;
	UWORD	ds_PreferedMode;
	UWORD	ds_ScrRows;
	UWORD	ds_ScrCols;
	UWORD	ds_ScrTop;
	UWORD	ds_ScrColNo;
	UWORD	ds_ScrRowNo;
	UBYTE	ds_RegFlag;
	UBYTE	ds_RegTouched;
	UBYTE	*ds_ScrAry;
	ULONG	ds_WindowTop;
	ULONG	ds_WindowTopLine;
	ULONG	ds_WindowBot;
	ULONG	ds_WindowBotLine;
	ULONG	ds_LastRefreshMode;
	ULONG	ds_LastRefreshTop;
	LIST	ds_List;
	char	ds_windowTitle[128];
} DBugDisp;
typedef struct SOURCE {
	ULONG	lineNumber;
	ULONG	address;
} SOURCE;
typedef struct DEBUG	{
	struct DEBUG	*link;
	struct SOURCE	*table;
	struct SOURCE	*tableEnd;
	char		sourceName[128];
	char		*source;
	ULONG		addrBegin;
	ULONG		addrEnd;
} DEBUG;
typedef struct HUNK {
	ULONG	type;
	ULONG	size;
	ULONG	*memptr;
	ULONG	*actual;
	ULONG	hSize;
	APTR	hunk;
	APTR	reloc32;
	APTR	symbols;
	DEBUG	*debug;
} HUNK;
typedef struct BP {
	UWORD	state;
	UWORD	count;
	UWORD	value;
	UWORD	*address;
} BP;
typedef struct WP {
	ULONG		type;
	char		expression[128];
} WP;
typedef struct DPREFS	{
	UWORD	top,left,width,height;
	UWORD DefaultMode;
	UBYTE DefaultOffset;
	alias[96];
} DPREFS;
extern IBASE			*IntuitionBase;
extern GBASE			*GfxBase;
extern EBASE			*SysBase;
extern struct DosLibrary	*DOSBase;
extern struct Library		*GadToolsBase;
extern char *RexxHostName;
extern char	*args;
extern ULONG	argSize;
extern TASK	*thisTask;
extern APROCESS *thisProcess;
extern CLI	*thisCli;
extern char	targetName[];
extern ULONG	*exeFile;
extern ULONG	exeSize;
extern ULONG	numHunks, firstHunk, lastHunk;
extern HUNK	*hunkArray;
extern USHORT oldrow, oldcol;
extern UBYTE	*programStack;
extern ULONG	programStackSize;
extern ULONG	programState;
extern UWORD	programSR;
extern ULONG	programPC;
extern ULONG	programD0;
extern ULONG	programD1;
extern ULONG	programD2;
extern ULONG	programD3;
extern ULONG	programD4;
extern ULONG	programD5;
extern ULONG	programD6;
extern ULONG	programD7;
extern ULONG	programA0;
extern ULONG	programA1;
extern ULONG	programA2;
extern ULONG	programA3;
extern ULONG	programA4;
extern ULONG	programA5;
extern ULONG	programA6;
extern ULONG	programA7;
extern ULONG	lastState;
extern UWORD	lastSR;
extern ULONG	lastPC;
extern ULONG	lastD0;
extern ULONG	lastD1;
extern ULONG	lastD2;
extern ULONG	lastD3;
extern ULONG	lastD4;
extern ULONG	lastD5;
extern ULONG	lastD6;
extern ULONG	lastD7;
extern ULONG	lastA0;
extern ULONG	lastA1;
extern ULONG	lastA2;
extern ULONG	lastA3;
extern ULONG	lastA4;
extern ULONG	lastA5;
extern ULONG	lastA6;
extern ULONG	lastA7;
enum DISPLAY_MODES {
	DISPLAY_DISM,
	DISPLAY_SOURCE,
	DISPLAY_MIXED,
	DISPLAY_BYTES,
	DISPLAY_WORDS,
	DISPLAY_LONGS,
	DISPLAY_HUNKS,
	DISPLAY_SYMBOL,
	DISPLAY_HELP,
	DISPLAY_BREAK,
	DISPLAY_DOSBASE,
	DISPLAY_PROCESS,
	DISPLAY_INFO,
	DISPLAY_EXECBASE,
	DISPLAY_RESOURCES,
	DISPLAY_INTRS,
	DISPLAY_PORTS,
	DISPLAY_TASKS,
	DISPLAY_LIBS,
	DISPLAY_DEVICES,
	DISPLAY_MEMLIST,
	DISPLAY_REXXLIST,
	DISPLAY_SYMLIST,
	MAX_MODES,
};
extern DPREFS	dprefs;
extern char	commandLine[];
extern UWORD	commandCol, commandEnd;
extern WP	wpTable[32];
extern BP	bpTable[32];
extern BP	bpTemp;
extern WORD	topBP;
extern DBugDisp *CurDisplay;
extern unsigned long  ScrollStart, ScrollEnd;
extern int SymbolCount;
extern __stkargs UBYTE	*MallocPublic(ULONG size);
extern __stkargs UBYTE	*MallocFast(ULONG size);
extern __stkargs UBYTE	*MallocChip(ULONG size);
extern __stkargs UBYTE	*MallocAny(ULONG size, ULONG type);
extern __stkargs void	Free(APTR ptr);
extern __stkargs void	CleanMem(void);
extern __stkargs ULONG	Disassemble(ULONG src, ULONG addr, char *buf);
extern __stkargs void	EnterProgram(void);
extern __stkargs void	TargetExit(void);
extern void	FreeDLIST(LIST *list);
extern BOOL	AddListNODE(LIST *list, UBYTE type, char *data);
extern BOOL	DownList(void);
extern BOOL	UpList(void);
extern BOOL	PageDownList(void);
extern BOOL	PageUpList(void);
extern WORD	RefreshList(WORD maxLines, BOOL fullRefresh, LONG top);
extern BOOL	SprintfDLIST(LIST *list, UBYTE type, char *fmt, ...);
extern void	ListDosBase(DBugDisp *dp);
extern void	ListProcess(DBugDisp *dp);
extern void	ListInfo(DBugDisp *dp);
extern void	ListExecBase(DBugDisp *dp);
extern void	BuildDLIST(LIST *dst, LIST *src, ULONG type);
extern void	ListResources(DBugDisp *dp);
extern void	ListIntrs(DBugDisp *dp);
extern void	ListPorts(DBugDisp *dp);
extern void	ListTasks(DBugDisp *dp);
extern void	ListLibs(DBugDisp *dp);
extern void	ListDevices(DBugDisp *dp);
extern void	ListMemList(DBugDisp *dp);
extern int 	SizeDLIST(LIST *list);
extern BOOL	ListSymbols(DBugDisp *dp);
extern void		Newline(void);
extern void		PrintAddress(ULONG addr);
extern void		OffsetAddressBuf(ULONG addr, char *buf);
extern void		InitCommand(void);
extern void		InitModes(void);
extern void		RefreshCommand(int fullRefresh);
extern void		RefreshPrompt(BOOL fullRefresh);
extern void		RefreshWindow(int fullRefresh);
extern void		RefreshAllWindows(int fullRefresh);
extern void		SetDisplayMode(WORD, BOOL);
extern void		ReadPrefs(void);
extern void		WritePrefs(void);
extern void		abort(void);
extern BOOL		ParseArgToken(char *buf);
extern ULONG 	OnOffToggle(char *arg, ULONG val, ULONG mask);
extern int		main(int ac, char *av[]);
extern LONG		CalcDisplayLines(void);
extern void		SetModeSave(WORD mode);
extern ULONG		ValidMemCheck(ULONG address);
extern __stkargs void kprintf(unsigned char *arg, ...);
extern UBYTE 	LineBuf[128];
extern UBYTE 	DirBuf[128];
extern WORD		ForceFullRefresh;
extern UBYTE 	RexxReplyString[256];
extern UBYTE 	DefaultPubName[128];
extern char		lastCommand[128];
extern int		RStepFlag;
extern char		rexxhostname[16];
extern long		ParseExp(char *, short *, long);
extern void		PushOp(short, short, short);
extern int		TopOfOpStack(void);
extern int		SecondOffOpStack(void);
extern void		PushAtom(long, short);
extern void		RefreshFKeys(BOOL fullRefresh);
extern BOOL		FunctionKey(UWORD num);
extern BOOL		HelpKey(void);
extern BOOL 		CmdFKey(char *args);
extern BOOL		CmdRexx(char *args);
extern BOOL		CmdSavePrefs(char *args);
extern BOOL		CmdInfo(char *args);
extern BOOL		CmdExecBase(char *args);
extern BOOL		CmdResources(char *args);
extern BOOL		CmdIntrs(char *args);
extern BOOL		CmdPorts(char *args);
extern BOOL		CmdSymList(char *args);
extern BOOL		CmdTasks(char *args);
extern BOOL		CmdLibs(char *args);
extern BOOL		CmdDevices(char *args);
extern BOOL		CmdMemList(char *args);
extern BOOL		CmdDoBsBase(char *args);
extern BOOL		CmdProcess(char *args);
extern BOOL		CmdOffsets(char *args);
extern BOOL		CmdDown(char *args);
extern BOOL		CmdUp(char *args);
extern BOOL		CmdPageDown(char *args);
extern BOOL		CmdPageUp(char *args);
extern BOOL		CmdSource(char *args);
extern BOOL		CmdDism(char *args);
extern BOOL		CmdMixed(char *args);
extern BOOL		CmdBytes(char *args);
extern BOOL		CmdWords(char *args);
extern BOOL		CmdLongs(char *args);
extern BOOL		CmdBreakpoint(char *args);
extern BOOL		CmdBP(char *args);
extern BOOL		CmdClear(char *args);
extern BOOL		CmdHunks(char *args);
extern BOOL		CmdSymbol(char *args);
extern BOOL		CmdSet(char *args);
extern BOOL		RStepTarget(void);
extern BOOL		StepTarget(void);
extern BOOL		StepTargetRange(ULONG addressLow, ULONG addressHi);
extern BOOL		RStepTargetRange(ULONG addressLow, ULONG addressHi);
extern BOOL		CmdStep(char *args);
extern BOOL		CmdRStep(char *args);
extern BOOL		OverTarget(void);
extern BOOL		OverTargetRange(ULONG addressLow, ULONG addressHi);
extern BOOL		CmdOver(char *args);
extern BOOL		CmdReset(char *args);
extern BOOL		GoTarget(void);
extern BOOL		CmdGo(char *args);
extern BOOL		CmdEval(char *args);
extern BOOL		CmdOpen(char *args);
extern BOOL		CmdClose(char *args);
extern BOOL		CmdQuit(char *args);
extern BOOL		CmdHelp(char *args) ;
extern BOOL		CmdWatchBytes(char *args);
extern BOOL		CmdWatchWords(char *args);
extern BOOL		CmdWatchLongs(char *args);
extern BOOL		CmdWatchClear(char *args);
extern BOOL		CmdRefresh(char *args);
extern BOOL		CmdDosBase(char *args);
extern WORD		RefreshHelp(WORD maxLines, BOOL fullRefresh, LONG);
extern BOOL		DownHelp(void);
extern BOOL		UpHelp(void);
extern int		HelpSize(void);
extern char		*SkipBlanks(char *s);
extern BOOL		DoCommand(char *command);
extern BOOL		CmdAlias(char *args);
extern BOOL		CmdUnAlias(char *args);
extern BOOL		CmdRegs(char *args);
extern BOOL		CmdJump(char *args);
extern BOOL 		CmdBar(char *args);
extern BOOL 		CmdEnd(char *args);
extern BOOL 		CmdItem(char *args);
extern BOOL 		CmdTitle(char *args);
extern BOOL 		CmdMenus(char *args);
extern BOOL 		CmdSubItem(char *args);
extern BOOL 		CmdChangeWindow(char *args);
extern BOOL 		CmdAgain(char *args);
extern void 		init_function_keys(void);
extern char	fkeys[10][16];
extern void kprintline(char *string);
extern void kprintlen(char *string, int len);
extern WORD		RefreshHunks(WORD maxLines, BOOL fullRefresh, LONG index);
extern WORD		RefreshSymbols(WORD maxLines, BOOL fullRefresh, LONG index);
extern LONG		SymbolIndexOfAddr(ULONG val);
extern BOOL		DownHunks(void);
extern BOOL		UpHunks(void);
extern BOOL		DownSymbol(void);
extern BOOL		PageDownSymbol(void);
extern BOOL		UpSymbol(void);
extern BOOL		PageUpSymbol(void);
extern BOOL		DBugLoadSeg(char *filename);
extern void		AllocateStack(void);
extern void		ResetTarget(void);
extern DEBUG 	*FindDebug(ULONG address);
extern DEBUG 	*FindNearestDebug(ULONG address);
extern SOURCE	*FindSource(DEBUG *debug, ULONG address);
extern char		*FindSourceLine(DEBUG *debug, SOURCE *source);
extern __stkargs char *LookupValue(ULONG value);
extern ULONG 	*NearestSymbol(ULONG value);
extern char		*NearestValue(ULONG value);
extern BOOL		LookupSymbol(char *symbol, ULONG *value);
extern BOOL		LookupSymLen(char *symbol, UWORD len, ULONG *value);
extern int		CountSymbols(void);
extern void		CopySymbols(SYMLIST *symlist);
extern char		*addscore(char *string);
extern char		*addat(char *string);
extern WORD		RefreshBreakpoints(WORD maxLines, BOOL fullRefresh);
extern BOOL		UpBreak(void);
extern BOOL		DownBreak(void);
extern void		InitBreakpoints(void);
extern void		InstallBreakpoints(void);
extern void		CheckBreakpoints(void);
extern BOOL		IsBreakpoint(ULONG address);
extern BOOL		SetBreakpoint(ULONG address, UWORD count, UWORD type);
extern BOOL		ClearBreakpoint(ULONG address);
extern void		SetTempBreakpoint(ULONG address);
extern void		SetAllBreakpoints(void);
extern WORD topBP;
extern WORD		RefreshBytes(WORD maxLines, BOOL fullRefresh, ULONG addr);
extern WORD		RefreshWords(WORD maxLines, BOOL fullRefresh, ULONG addr);
extern WORD		RefreshLongs(WORD maxLines, BOOL fullRefresh, ULONG addr);
extern BOOL		UpBytes(void);
extern BOOL		UpWords(void);
extern BOOL		UpLongs(void);
extern BOOL		PageUpHex(void);
extern BOOL		DownBytes(void);
extern BOOL		DownWords(void);
extern BOOL		DownLongs(void);
extern BOOL		PageDownHex(void);
extern BOOL		DownMixed(void);
extern BOOL		UpMixed(void);
extern BOOL		PageDownMixed(void);
extern BOOL		PageUpMixed(void);
extern BOOL		DownSource(void);
extern BOOL		UpSource(void);
extern BOOL		PageDownSource(void);
extern BOOL		PageUpSource(void);
extern WORD		RefreshMixed(WORD maxLines, BOOL fullRefresh, ULONG, ULONG, WORD);
extern WORD		PrevMixedLine(ULONG *addr, ULONG *line, LONG *info);
extern WORD		NextMixedLine(ULONG *addr, ULONG *line, LONG *info);
extern WORD		CurrentMixedLine(ULONG *addr, ULONG *line, LONG *info);
extern BOOL		DownDism(void);
extern BOOL		UpDism(void);
extern BOOL		PageDownDism(void);
extern BOOL		PageUpDism(void);
extern WORD		RefreshDism(short maxLines, BOOL fullRefresh);
extern ULONG 	PreviousInstruction(ULONG addr);
extern char		*StateText(ULONG staten);
extern WORD		RefreshRegisters(WORD maxLines, BOOL fullRefresh);
extern long		*RegisterAddress(char *name);
extern WORD		RefreshWatchpoints(WORD maxLines, BOOL fullRefresh);
extern void		InitWatchpoints(void);
extern BOOL		IsWatchpoint(char *expression);
extern BOOL		SetWatchpoint(char *expression, ULONG type);
extern BOOL		ClearWatchpoint(char *expression);
extern BOOL 		ShowWatchTitle(BOOL fullRefresh, WORD *count, WORD *maxLines);
extern BOOL 	enable_menus(void);
extern void 	init_default_menus(void);
extern void 	free_menus(void);
extern void 	set_menu_item(int num, int type, unsigned char *str, unsigned char *cmd, unsigned char *comkey);
extern void 	do_scroller(void);
extern UWORD FindScrollerTop(UWORD total, UWORD displayable, UWORD pot);
extern int 	FindScrollerValues(UWORD total, UWORD displayable, UWORD top, WORD overlap, UWORD *body, UWORD *pot);
extern void 	setscrollbar(int flag);
extern void 	ActivateArrows(struct Window *win);
extern void 	InActivateArrows(struct Window *win);
extern BOOL 	ProcessMenuItem(char *args,int type);
extern int	FindSlot(char *args);
extern struct Menu *v_create_menus(struct NewMenu *menulist);
extern int v_layout_menus(struct Menu *menus);
extern void v_free_menus(struct Menu *menus);
extern int text_width(char *str);
extern BOOL		RXGetPC(char *args);
extern BOOL		RXGetLine(char *args);
extern BOOL		RXGetInfo(char *args);
extern BOOL		RXGetDismLine(char *args);
extern BOOL 		RXGetEval(char *args);
extern BOOL 		RXGetBytes(char *args);
extern BOOL		RXGetWords(char *args);
extern BOOL		RXGetLongs(char *args);
extern BOOL		RXGetCommand(char *args);
extern BOOL		RXStartList(char *args);
extern BOOL		RXEndList(char *args);
extern BOOL		RXPutList(char *args);
extern void		InitConsole(void);
extern LONG		ScrMainBodyRange(void *ptop, void *pbot);
extern LONG		ScrColumns(WORD overhead, WORD itemWidth, WORD limit);
extern void		ScrFlush(void);
extern void		ScrPutNewline(void);
extern void		ScrPutChar(UBYTE c);
extern void		ScrWrite(char *s, ULONG len);
extern void		ScrPuts(char *s);
extern void		ScrPutsCtl(char *s);
extern WORD		ScrPrintf(const char *fmt, ...);
extern void		ScrStatus(const char *fmt, ...);
extern void		ScrHome(void);
extern void		ScrCursoff(void);
extern void		ScrCurson(void);
extern void		ScrClr(void);
extern void		ScrRowCol(UWORD row, UWORD col);
extern void		ScrEOL(void);
extern void		ScrHighlight(void);
extern void		ScrDull(void);
extern void		ScrPlain(void);
extern void		ScrInverse(void);
extern void		ScrItalics(void);
extern void		ScrUnderline(void);
extern void		ScrScrollup(void);
extern void		ScrScrolldown(void);
extern DBugDisp 	*ScrOpen(BOOL first, BOOL refresh, char *pubname);
extern void		ScrScrollClr(void);
extern void		GetWindowSize(void);
extern void		EnterDebugger(void);
extern void		CloseDisplay(struct DBugDisp *);
extern void		RequestCloseDisplay(struct DBugDisp *, int );
extern BOOL		CheckCloseDisplay(void);
extern void		ProcessDataAtCoord(DBugDisp *disp, WORD x, WORD y);
extern void 		SetTitle(char *title, DBugDisp *disp);
extern void 		draw_fkey_boxes(void);
extern void		drawdoublebox(void);
extern struct DBugDisp  *CurDisplay;
extern LIST	DisplayList;
extern  const unsigned char __CArya[257];
extern  const unsigned char __CAryb[257];
extern  const unsigned char __CUToL[257];
extern  const unsigned char __CLToU[257];
extern int isalnum(int);
extern int isalpha(int);
extern int iscntrl(int);
extern int isdigit(int);
extern int isgraph(int);
extern int islower(int);
extern int isspace(int);
extern int isupper(int);
extern int ispunct(int);
extern int isxdigit(int);
extern int isprint(int);
extern int tolower(int);
extern int toupper(int);
extern void		InitConsole(void);
extern LONG		ScrMainBodyRange(void *ptop, void *pbot);
extern LONG		ScrColumns(WORD overhead, WORD itemWidth, WORD limit);
extern void		ScrFlush(void);
extern void		ScrPutNewline(void);
extern void		ScrPutChar(UBYTE c);
extern void		ScrWrite(char *s, ULONG len);
extern void		ScrPuts(char *s);
extern void		ScrPutsCtl(char *s);
static unsigned int	_swrite(char *buf, size_t n1, size_t n2, const char **sst);
extern WORD		ScrPrintf(const char *fmt, ...);
extern void		ScrStatus(const char *fmt, ...);
static void		QueueRead(void);
static void		HandleConsoleInput(struct DBugDisp *disp, WORD c);
extern void		ScrHome(void);
extern void		ScrCursoff(void);
extern void		ScrCurson(void);
extern void		ScrClr(void);
extern void		ScrRowCol(UWORD row, UWORD col);
extern void		ScrEOL(void);
extern void		ScrHighlight(void);
extern void		ScrDull(void);
extern void		ScrPlain(void);
extern void		ScrInverse(void);
extern void		ScrItalics(void);
extern void		ScrUnderline(void);
extern void		ScrScrollup(void);
extern void		ScrScrolldown(void);
__autoexit static void	ScrClose(void);
extern DBugDisp 	*ScrOpen(BOOL first, BOOL refresh, char *pubname);
extern void		ScrScrollClr(void);
extern void		GetWindowSize(void);
extern void		EnterDebugger(void);
extern void		CloseDisplay(struct DBugDisp *);
extern void		RequestCloseDisplay(struct DBugDisp *, int );
extern BOOL		CheckCloseDisplay(void);
extern void		ProcessDataAtCoord(DBugDisp *disp, WORD x, WORD y);
extern void 		SetTitle(char *title, DBugDisp *disp);
extern void 		draw_fkey_boxes(void);
extern void		drawdoublebox(void);
static 	  void 		drawbox(int xcol,int yrow, int xlen, int ylen);
static     void		do_putc(DBugDisp *disp, UBYTE c);
extern struct DBugDisp  *CurDisplay;
extern LIST	DisplayList;
extern struct Menu      *DebugMenu;
extern struct Gadget ColorGadget;
extern struct Gadget DownGadget;
extern struct Gadget UpGadget;
extern struct Image ColorPropImage;
extern struct PropInfo ColorPropInfo;
DBugDisp    *CurDisplay;
LIST	    DisplayList;
MPORT	    DBugPort;
WORD	    CheckClose;
char	    ValidClipChar[256];
static int  count = 0;
static int  PageFlag = 0;
static int  Ticked = 0;
USHORT	oldrow = 0xFFFF;
USHORT  oldcol = 0xFFFF;
static ULONG seconds=0;
static ULONG micros=0;
__geta4 void	EnterDebugger(void) {
	struct	MenuItem *item;
    if (CurDisplay && CurDisplay->ds_DisplayMode > DISPLAY_MIXED)
	SetDisplayMode(CurDisplay->ds_PreferedMode, 0);
    RefreshWindow(-1);
    ScrStatus("Ready");
    RefreshCommand(1);
    ScrCurson();
    SetSignal(0L,(1L<<4));
    while (DisplayList.lh_Head != (NODE *)&DisplayList.lh_Tail) {
	ULONG	mask;
	MSG	*msg;
	if (CheckClose && CheckCloseDisplay()) {
	    break;
	}
	mask = Wait( (1<<DBugPort.mp_SigBit) | (1<<RexxSigBit) );
	if (mask & (1<<DBugPort.mp_SigBit)) {
 	    while (msg = GetMsg(&DBugPort)) {
		DBugDisp	*disp;
		for (disp = (DBugDisp *)DisplayList.lh_Head; disp->ds_Node.ln_Succ; disp = (DBugDisp *)disp->ds_Node.ln_Succ) {
		    if (msg == (MSG *)&disp->ds_CReadReq) {
			disp->ds_CReadIP = 0;
			CurDisplay = disp;
			HandleConsoleInput(disp, disp->ds_CInChar);
			CurDisplay = disp;
			QueueRead();
			msg = 0L;
			break;
		    }
		}
		if (msg == 0L)continue;
		CurDisplay = 0L;
		for (disp = (DBugDisp *)DisplayList.lh_Head; disp->ds_Node.ln_Succ; disp = (DBugDisp *)disp->ds_Node.ln_Succ) {
		    if (((IMSG *)msg)->IDCMPWindow == disp->ds_Win) {
			CurDisplay = disp;
			break;
		    }
		}
		if (CurDisplay) {
		    switch (((IMSG*)msg)->Class) {
			case 0x00000200:
			RequestCloseDisplay(CurDisplay,0);
			break;
		        case 0x00000002:
			    GetWindowSize();
			    {
			        WINDOW	*window = CurDisplay->ds_Win;
			        dprefs.left = window->LeftEdge; dprefs.top = window->TopEdge;
			        dprefs.width = window->Width; dprefs.height = window->Height;
			    }
			    ScrClr();
			    setscrollbar(1);
			    RefreshWindow(-1);
			    ScrStatus("Window Resized");
			    RefreshCommand(1);
			    ScrFlush();
			    break;
			case 0x00000008:
			    switch(((IMSG *)msg)->Code) {
				USHORT newrow, newcol, nc, nr;
				case (0x68 | 0x80):
				break;
				case (0x68):
				    newcol = (((IMSG *)msg)->MouseX);
				    nc = newcol >> 3;
				    newrow = (((IMSG *)msg)->MouseY);
				    nr = newrow >> 3;
				    if((oldcol == nc) && (oldrow == nr)) {
					char *string="bp\r";
				    	while (*string) {
				            HandleConsoleInput(disp,*string++);
					}
					oldcol = oldrow = 0xFFFF;
				    }
				    else {
				    	oldcol = nc;
				    	oldrow =  nr;
				        ProcessDataAtCoord(disp, newcol, newrow);
				    }
				break;
			    }
			    break;
			case 0x00000004:
			    BeginRefresh(disp->ds_Win);
			    EndRefresh(disp->ds_Win, 1);
			    break;
			case 0x00080000:
			    InActivateArrows(disp->ds_Win);
			    break;
			case 0x00040000: {
			    PageFlag = 0;
			    ActivateArrows(disp->ds_Win);
			    RefreshCommand(1);
			    break;
			}
			case 0x00400000:
			    if(PageFlag) {
				Ticked = 1;
				ScrCursoff();
				if( PageFlag == 1)DoCommand("UP");
				else DoCommand("DOWN");
				RefreshPrompt(1);
				RefreshCommand(1);
				ScrCurson();
			    }
			    break;
			case 0x00000040: {
				unsigned int id;
				APTR address = ((IMSG *)msg)->IAddress;
				if( (id = ((struct Gadget *)address)->GadgetID) != 0) {
				    PageFlag = 0;
				    if(Ticked) {
					Ticked = 0;
					break;
				    }
				    ScrCursoff();
				    if( id == 1)DoCommand("UP");
				    else DoCommand("DOWN");
				    RefreshPrompt(1);
				    RefreshCommand(1);
				    ScrCurson();
				}
				break;
			}
			case 0x00000010:
			    if(++count&1) {
				break;
			    }
			case 0x00000020: {
			    ULONG current, last;
				unsigned int id;
				APTR address = ((IMSG *)msg)->IAddress;
			    if( (id = ((struct Gadget *)address)->GadgetID) != 0) {
				PageFlag = (id == 1) ? 1 : 2;
				Ticked = 0;
				break;
			    }
			    switch (CurDisplay->ds_DisplayMode) {
				case DISPLAY_DISM:
				case DISPLAY_SOURCE:
				case DISPLAY_MIXED:
				case DISPLAY_BYTES:
				case DISPLAY_WORDS:
				case DISPLAY_LONGS:
				    last = (ScrollEnd - ScrollStart) >> 5;
				    break;
				case DISPLAY_HELP:
				    last = HelpSize();
				    break;
				case DISPLAY_SYMBOL:
				    last = SymbolCount;
				    break;
				case DISPLAY_HUNKS:
		    		    last = numHunks;
		    		    break;
				case DISPLAY_BREAK:
				    last = 32+5;
				    break;
				    default:
		    		    last = SizeDLIST(&CurDisplay->ds_List);
			    }
			    current = FindScrollerTop(last, CurDisplay->ds_ScrRows, ColorPropInfo.VertPot);
			    switch(CurDisplay->ds_DisplayMode) {
				case DISPLAY_DISM:
				case DISPLAY_SOURCE:
				case DISPLAY_MIXED:
				case DISPLAY_BYTES:
				case DISPLAY_WORDS:
				case DISPLAY_LONGS:
				    if((ScrollStart + (current << 5)) != CurDisplay->ds_WindowTop) {
					CurDisplay->ds_WindowTop = ScrollStart + (current << 5);
					CurDisplay->ds_WindowTopLine = 0;
					RefreshWindow(1);
				    }
				    break;
				case DISPLAY_BREAK:
				    if(topBP != current) {
					topBP = current;
					RefreshWindow(1);
				    }
				    break;
				default:;
				    if(CurDisplay->ds_WindowTop != current) {
					CurDisplay->ds_WindowTop = current;
					CurDisplay->ds_WindowTopLine = 0;
					RefreshWindow(1);
				    }
			    }
			    break;
			}
			case 0x00000100: {
			    USHORT code = ((IMSG *)msg)->Code;
			    char *string;
			    if (!code || (code == 0xFFFF))break;
				while (code && (code != 0xFFFF)) {
				    item = ItemAddress(DebugMenu,(LONG) code);
				    string = (* ( (APTR *)(item+1) ) );
				    while (*string) {
				        HandleConsoleInput(disp,*string++);
				    }
				    HandleConsoleInput(disp,'\r');
				    code = item->NextSelect;
				}
			    break;
			}
			default:
			break;
		    }
		}
		if(msg)ReplyMsg(msg);
	    }
	}
	if (mask & (1<<RexxSigBit)) {
	    ProcessRexxCommands(0L);
	}
    }
}
