/*----------------------------------------------------------------------*
  defs.h version 3.0 -  © Copyright 1990-91 Jaba Development

  Author : Jan van den Baard
  Purpose: headerfile for making a pre-copiled symbol file (Aztec V5.0a)
 *----------------------------------------------------------------------*/
#include <exec/types.h>
#include <exec/memory.h>
#include <intuition/intuition.h>
#include <intuition/intuitionbase.h>
#include <libraries/dos.h>
#include <libraries/dosextens.h>
#include <workbench/workbench.h>
#include <workbench/startup.h>
#include <workbench/icon.h>
#include <functions.h>
#include <tool.h>                     /* tool.library V8++ !!! */

#define AND     &&
#define OR      ||

#define Alloc(c,s)    AllocItem(c,(ULONG)s,MEMF_PUBLIC|MEMF_CLEAR)

struct BitMapHeader {
    UWORD   w,h;
    WORD    x,y;
    UBYTE   nPlanes;
    UBYTE   masking;
    UBYTE   compression;
    UBYTE   pad1;
    UWORD   transparentColor;
    UBYTE   xAspect, yAspect;
    WORD    pageWidth, pageHeight;
};

struct FORMChunk {
    ULONG   fc_Type;
    ULONG   fc_Length;
    ULONG   fc_SubType;
};

struct IFFChunk {
    ULONG   ic_Type;
    ULONG   ic_Length;
};

#define bpr(w)  (((w+15)>>4)<<1)

#define RENDER  0
#define SELECT  1
#define STDPRP  2

#define TXT_ADD     0
#define TXT_MOVE    1
#define TXT_MODIFY  2
#define TXT_DELETE  3

#define TITLE ((UBYTE *)"PowerSource V3.0")

#define TYPE      ((ULONG)'PWSR')

struct ge_prefs {
    BOOL    skip_zero_planes;
    BOOL    auto_size;
    BOOL    image_copy;
    BOOL    text_copy;
    BOOL    static_structures;
    BOOL    no_flags;
    BOOL    os2_hborder;
    UWORD   flag_bits;
};

#define     GP_COORDS       0x0001

/*
 * FOR THE BINARY FILE STRUCTURE!!!
 */
#define GE_VERSION  4

struct BinHeader {
    ULONG   FileType;
    USHORT  Version;
    USHORT  ScrDepth;
    USHORT  Colors[32];
    USHORT  FPen;
    USHORT  BPen;
    USHORT  BackFill;
    USHORT  WDBackFill;
    USHORT  LightSide;
    USHORT  DarkSide;
    ULONG   FlagsBits;
    ULONG   SpareFlags;
    UWORD   Spare[6];
};

#define BH_WORKBENCH    0x0001
#define BH_REQUESTER    0x0002

#define GADGETOFF       0x0001
#define BORDERONLY      0x0002
#define NOSIGNAL        0x0004
#define IMAGEONLY       0x0008      /* not yet implemented! */
#define NOBORDER        0x0010
#define OS20BORDER      0x0020
#define USERLABEL       0x0040
#define OS20HIGHBORDER  0x0080
#define SHAREDBORDER    0x0100

/*
 * reserved bits ->
 * GZZGADGET 0x2000 in SpecialFlags!
 */

#define MAXLABEL        32

struct MyGadget {
    struct MyGadget     *Succ;
    struct MyGadget     *Pred;
    struct Gadget        Gadget;
    USHORT               SpecialFlags;
    UBYTE                GadgetLabel[MAXLABEL];
    UWORD                RenderAccount;
    UWORD                SelectAccount;
    UWORD                BorderAccount;
    UWORD                HBorderAccount;
};

struct GadgetList {
    struct MyGadget     *Head;
    struct MyGadget     *Tail;
    struct MyGadget     *TailPred;
};

struct SharedImage {
    struct SharedImage  *Succ;
    struct SharedImage  *Pred;
    struct Image        *Image;
    UWORD                UseCount;
    ULONG                CheckSum;
    UWORD                Colors[32];
};

struct SharedList {
    struct SharedImage  *Head;
    struct SharedImage  *Tail;
    struct SharedImage  *TailPred;
};

struct MyMenu {
    /*** standard menu structure ***/
    struct MyMenu       *NextMenu;
    WORD                 LeftEdge, TopEdge, Width, Height;
    UWORD                Flags;
    BYTE                *MenuName;
    struct MyMenuItem   *FirstItem;
    WORD                 JazzX, JazzY, BeatX, BeatY;

    UWORD                SpecialFlags;      /* flags (see below)  */
    BYTE                 TheMenuName[32];   /* the menu it's name */
    struct ListItem     *ItsListItem;
};

#define USERFORMAT      0x0001  /* user specified format */

struct MyMenuItem {
    /*** standard MenuItem structure ***/
    struct MyMenuItem   *NextItem;
    WORD                 LeftEdge, TopEdge, Width, Height;
    UWORD                Flags;
    LONG                 MutualExclude;
    APTR                 ItemFill;
    APTR                 SelectFill;
    BYTE                 Command;
    BYTE                 KludgeFill0;
    struct MyMenuItem   *SubItem;
    UWORD                NextSelect;

    UWORD                SpecialFlags;  /* flags (see above)      */
    UWORD                RenderAccount; /* image account          */
    UWORD                SelectAccount; /* selected image account */
    struct ListItem     *ItsListItem;
};

struct ListItem {
    struct MenuItem      AItem;         /* just a stupid item           */
    struct IntuiText     Text;          /* and its stupid text          */
    UBYTE                Letters[10];   /* and room for the stupid text */
    struct MyMenu       *Menu;          /* the menu                     */
    struct MyMenuItem   *Item;          /* the item (if (sub)itemlist)  */
    struct MyMenuItem   *SubItem;       /* the subitem (if sublist)     */
};

struct SharedBorder {
    struct SharedBorder *Succ;
    struct SharedBorder *Pred;
    struct Border       *Border;
    UWORD                UseCount;
    UWORD                SpecialFlags;
};

#define SB_HIGHBORDER   0x0001
#define SB_BORDERONLY   0x0002

struct BorderList {
    struct SharedBorder *Head;
    struct SharedBorder *Tail;
    struct SharedBorder *TailPred;
};

#ifdef  FileRequester
#define FileSelector    FileRequester
#endif

#define RETURN_MAIN_MENU    0
#define RETURN_MENU_MENU    1
#define RETURN_ITEM_MENU    2

#define TEXT_WIDTH(r,t)      (TextLength(r,(char *)t,strlen((char *)t)))
#define TEXT_HEIGHT(r)       (r->Font->tf_YSize)

#define MENUED              0
#define ITEMED              1
#define SUBED               2

#define MENUSPACING         16
#define ITEMSPACING         1
#define TEXTSPACING         4

#define IDCMP_NM    NEWSIZE|GADGETUP|GADGETDOWN|INACTIVEWINDOW|ACTIVEWINDOW|MENUPICK|RAWKEY|MOUSEBUTTONS|CLOSEWINDOW|MOUSEMOVE
#define FLAGS_NM    WINDOWSIZING|WINDOWDRAG|WINDOWCLOSE|WINDOWDEPTH|NOCAREREFRESH|SMART_REFRESH+ACTIVATE
#define FLAGS_RQ    WINDOWSIZING|WINDOWDRAG|NOCAREREFRESH|SMART_REFRESH|ACTIVATE|SIZEBRIGHT|SIZEBBOTTOM|GIMMEZEROZERO|BORDERLESS

#define ESC         0x45
#define F1          0x50
#define F2          0x51
#define F3          0x52
#define F4          0x53
#define F5          0x54
#define F6          0x55
#define F7          0x56
#define F8          0x57
#define F9          0x58
#define F10         0x59
#define HELP        0x5F
