/******************************************************************
** cmap.h : Datatypes and constants used by the programme        **
**                                                               **
** Special Requirements: WorkBench 2.0, version 36 or above      **
******************************************************************/

#ifndef	CHARMAP_H
#define	CHARMAP_H

/* Some constant definitions */
#define	MIN_VERSION       36L
#define	CHARMAP_VERSION   "2.0"
#define	CHARMAP_DATE      "19 feb 2002"
#define	TEMPLATE          "GEOMETRY/K,PREFS/K,BGINFO/N"
#define	MAX_OPTIONS       3

/* Maximal character in the main string gadget */
#define	MAX_CHARACTERS    100

/* To init the charset, depending how many chars are defined in a font */
#define	Get_charset(textfont)      (textfont->tf_LoChar>=32?CHARSET_LATIN1 : CHARSET_8BITS)
#define	Init_charset(textfont)     CharsetNum=Get_charset(textfont);

/* If you get bored with long expressions... */
#define	MENUITEM(M,I,S)    ((struct MenuItem *)ItemAddress(menu,SHIFTMENU(M)+SHIFTITEM(I)+SHIFTSUB(S)))
#define	sti(gad)           ((struct StringInfo *)gad->SpecialInfo)
#define	NBITEM(T)          (sizeof(T)/sizeof(T[0]))

/* To access error mesages table */
#define ErrMsg(num)     Errors[ num-ERR_BADOS ]
extern  STRPTR          Errors[];

/* Pens index meaning **/
#define	PEN_BACKFILL   pens[0]
#define	PEN_TEXT       pens[1]
#define	PEN_INFOWND    pens[2]
#define	PEN_TEXTFILL   pens[3]
#define	PEN_SHINE      pens[4]
#define	PEN_SHADE      pens[5]
extern	UWORD          pens[];

/* Different values, to handle the recessed box while pressing lmb */
#define	KEYB_CONTROL      -1
#define	NOT_PRESSED        0
#define	PRESSED            1
#define	OUTSIDE_AREA       2

/* Common gadget index number */
#define	GAD_STRTEST        0
#define	GAD_DEL            1
#define	GAD_COPY           2
#define	GAD_PASTE          3
#define	GAD_FONTTYPE       4
#define	GAD_CHARSET        5

/* Possible types of interface layout */
#define	LAYOUT_SMALL       1
#define	LAYOUT_MIDDLE      2
#define	LAYOUT_LARGE       3

/* Some common NewMenu and GadTxt entries */
#define	NM_FONTTYPE        2
#define	NM_CHARSET         6
#define	NM_COPY            16
#define	NM_PASTE           17
#define	NM_VERTSORT        20
#define	NM_NOTRANS         254
#define	NM_TRANSLATE       255
#define	NMUD_FONT          10101

#define	GTXT_DEL           0
#define	GTXT_CYCLEFONT     1
#define	GTXT_CYCLECHAR     2
#define	GTXT_COPY          3
#define	GTXT_PASTE         4
#define	GTXT_STRTEST       5
#define	GTXT_CHARSET       6
#define	GTXT_FONTTYPE      10

/* Charset type */
#define	CHARSET_8BITS      0
#define	CHARSET_LATIN1     1
#define	CHARSET_AMIGA      2
#define	CHARSET_NUM        3
#define	CHARSET_NOCARE     4

/* Public functions */
void cleanup         ( STRPTR, WORD err );
BOOL Setup           ( void );
void Draw_ASCIIChart ( void );
void Create_gadgets  ( void );
BOOL Handle_menu     ( LONG MenuID );
void ThrowError      ( STRPTR );

#endif
