/* -----------------------------------------------------------
  $VER: calc.h 1.02 (29.02.2000)

  headers & defines for calculator project

  (C) Copyright 2000 Matthew J Fletcher - All Rights Reserved.
  amimjf@connectfree.co.uk - www.amimjf.connectfree.co.uk
  ------------------------------------------------------------ */

#define GetString( g ) ((( struct StringInfo * )g->SpecialInfo )->Buffer  )
#define GetNumber( g ) ((( struct StringInfo * )g->SpecialInfo )->LongInt )

#define GD_Gadget00                            0
#define GD_Gadget10                            1
#define GD_Gadget20                            2
#define GD_Gadget30                            3
#define GD_Gadget40                            4
#define GD_Gadget50                            5
#define GD_Gadget60                            6
#define GD_Gadget70                            7
#define GD_Gadget80                            8
#define GD_Gadget90                            9
#define GD_Gadget100                           10
#define GD_Gadget110                           11
#define GD_Gadget120                           12
#define GD_Gadget130                           13
#define GD_Gadget140                           14
#define GD_Gadget150                           15
#define GD_Gadget160                           16
#define GD_Gadget170                           17
#define GD_Gadget180                           18
#define GD_Gadget190                           19
#define GD_Gadget200                           20
#define GD_Gadget210                           21
#define GD_Gadget220                           22
#define GD_Gadget230                           23
#define GD_Gadget240                           24
#define GD_Gadget250                           25
#define GD_Gadget260                           26

#define GDX_Gadget00                           0
#define GDX_Gadget10                           1
#define GDX_Gadget20                           2
#define GDX_Gadget30                           3
#define GDX_Gadget40                           4
#define GDX_Gadget50                           5
#define GDX_Gadget60                           6
#define GDX_Gadget70                           7
#define GDX_Gadget80                           8
#define GDX_Gadget90                           9
#define GDX_Gadget100                          10
#define GDX_Gadget110                          11
#define GDX_Gadget120                          12
#define GDX_Gadget130                          13
#define GDX_Gadget140                          14
#define GDX_Gadget150                          15
#define GDX_Gadget160                          16
#define GDX_Gadget170                          17
#define GDX_Gadget180                          18
#define GDX_Gadget190                          19
#define GDX_Gadget200                          20
#define GDX_Gadget210                          21
#define GDX_Gadget220                          22
#define GDX_Gadget230                          23
#define GDX_Gadget240                          24
#define GDX_Gadget250                          25
#define GDX_Gadget260                          26

#define Calc_CNT 27

/* for easy console i/o formating */
#define ITALICS   "\033[3m"
#define BOLD      "\033[1m"
#define UNDERLINE "\033[4m"
#define NORMAL    "\033[0m"

extern struct IntuitionBase *IntuitionBase;
extern struct Library       *GadToolsBase;

extern struct Screen        *Scr;
extern UBYTE                 *PubScreenName;
extern APTR                  VisualInfo;
extern struct Window        *CalcWnd;
extern struct Window        *GraphWnd;
extern struct Gadget        *CalcGList;
extern struct Menu          *CalcMenus;
extern struct IntuiMessage   CalcMsg;
extern struct IntuiMessage   GraphMsg;
extern struct Gadget        *CalcGadgets[27];
extern UWORD                 CalcLeft;
extern UWORD                 CalcTop;
extern UWORD                 CalcWidth;
extern UWORD                 CalcHeight;
extern UWORD                 GraphLeft;
extern UWORD                 GraphTop;
extern UWORD                 GraphWidth;
extern UWORD                 GraphHeight;
extern UBYTE                *CalcWdt;
extern UBYTE                *GraphWdt;
extern struct TextAttr      *Font, Attr;
extern UWORD                 FontX, FontY;
extern UWORD                 OffX, OffY;
extern struct TextFont      *CalcFont;
extern struct TextFont      *GraphFont;
extern struct GfxBase       *GfxBase;
extern struct NewMenu        CalcNewMenu[];
extern UWORD                 CalcGTypes[];
extern struct NewGadget      CalcNGad[];
extern ULONG                 CalcGTags[];

/* display buffer */
extern char buffer[100]; /* 100 chars should be enough */
extern char memory1[100];
/* tape history */
extern int UseTape;
/* maths mode */
extern int mode;

extern int Gadget00Clicked( void );
extern int Gadget10Clicked( void );
extern int Gadget20Clicked( void );
extern int Gadget30Clicked( void );
extern int Gadget40Clicked( void );
extern int Gadget50Clicked( void );
extern int Gadget60Clicked( void );
extern int Gadget70Clicked( void );
extern int Gadget80Clicked( void );
extern int Gadget90Clicked( void );
extern int Gadget100Clicked( void );
extern int Gadget110Clicked( void );
extern int Gadget120Clicked( void );
extern int Gadget130Clicked( void );
extern int Gadget140Clicked( void );
extern int Gadget150Clicked( void );
extern int Gadget160Clicked( void );
extern int Gadget170Clicked( void );
extern int Gadget180Clicked( void );
extern int Gadget190Clicked( void );
extern int Gadget200Clicked( void );
extern int Gadget210Clicked( void );
extern int Gadget220Clicked( void );
extern int Gadget230Clicked( void );
extern int CalcItem0( void );
extern int CalcItem1( void );
extern int CalcItem2( void );
extern int CalcItem3( void );
extern int CalcItem4( void );
extern int CalcItem5( void );
extern int CalcItem6( void );
extern int CalcItem7( void );

extern int SetupScreen( void );
extern void CloseDownScreen( void );
extern void CalcRender( void );
extern int HandleCalcIDCMP( void );
extern int CalcCloseWindow( void );
extern int OpenCalcWindow( void );
extern void CloseCalcWindow( void );
extern int HandleGraphIDCMP( void );
extern int GraphCloseWindow( void );
extern int OpenGraphWindow( void );
extern void CloseGraphWindow( void );
extern int CalcVanillaKey( void );
extern int CalcRawKey( void );

extern void Shutdown( void );
extern int ReadClip( char * );
extern int WriteClip( char * );
extern double do_math( char );
extern int draw_display( char * , int );
extern void clear_display ( void );
extern void clear_buffers ( void );
extern void draw_op( char );
extern int atob( char *);

/* ----------------- */
/* Clipboard Support */
/* ----------------- */

struct cbbuf {
ULONG size;     /* size of memory allocation            */
ULONG count;    /* number of characters after stripping */
UBYTE *mem;     /* pointer to memory containing data    */
};

#define MAKE_ID(a,b,c,d) ((a<<24L) | (b<<16L) | (c<<8L) | d)
#define ID_FORM MAKE_ID('F','O','R','M')
#define ID_FTXT MAKE_ID('F','T','X','T')
#define ID_CHRS MAKE_ID('C','H','R','S')

/* prototypes */

struct IOClipReq        *CBOpen         ( ULONG );
void                    CBClose         (struct IOClipReq *);
int                     CBWriteFTXT     (struct IOClipReq *, char *);
int                     CBQueryFTXT     (struct IOClipReq *);
struct cbbuf            *CBReadCHRS     (struct IOClipReq *);
void                    CBReadDone      (struct IOClipReq *);
void                    CBFreeBuf       (struct cbbuf *);

/* routines which are meant to be used internally  */
int                     WriteLong       (struct IOClipReq *, long *);
int                     ReadLong        (struct IOClipReq *, ULONG *);
struct cbbuf            *FillCBData     (struct IOClipReq *, ULONG);

extern struct IOClipReq *CBOpen         ( ULONG );
extern void             CBClose         (struct IOClipReq *);
extern int              CBWriteFTXT     (struct IOClipReq *, char *);
extern int              CBQueryFTXT     (struct IOClipReq *);
extern struct cbbuf     *CBReadCHRS     (struct IOClipReq *);
extern void             CBReadDone      (struct IOClipReq *);
extern void             CBFreeBuf       (struct cbbuf *);

