/*******************************************************************/
/* This is Enlightenment's definition macro file                   */
/* This file determines keyword values and conveience macros for E */
/* This file is sourced for every file E has to parse              */
/*******************************************************************/
#ifndef __E16_DEFINITIONS__
#define __E16_DEFINITIONS__

/* section begin/end stuff */
#define __BGN 999
#define __END 1000

#define __E_CFG_VERSION 1001

/* booleans */
#define __OFF 0
#define __ON 1
#define __NO 0
#define __YES 1

/* focus mode options */
#define __POINTER 0
#define __SLOPPY 1
#define __CLICK_TO_FOCUS 2

/* move and resize mode */
#define __OPAQUE 0
#define __LINES 1
#define __BOX 2
#define __SHADE 3
#define __BOXSHADE 4
/* for move mode only */
#define __TRANSLUCENT 5
/* move and resize geometry display modes */
#define __NO_GEOMINFO     0
#define __CENTER_GEOMINFO 1
#define __CORNER_GEOMINFO 2


/* positioning and direction */
#define __LEFT 0
#define __RIGHT 1
#define __TOP 2
#define __BOTTOM 3
#define __UP 2
#define __DOWN 3

/* attributes */
#define __FLAG_TITLE            1
#define __FLAG_MINI_ICON        2
#define __FLAG_TITLE_AND_ICON   3

/* fill rules for imageclasses */
#define __SCALE             0
#define __STRETCH           0
#define __TILE_H            1
#define __TILE_V            2
#define __TILE              3
#define __INTEGER_TILE_H    4
#define __INTEGER_TILE_V    8
#define __INTEGER_TILE     12

/* major sections in the config */
#define __CONTROL 0
#define __TCLASS 1
#define __MENU 2
#define __BORDER 3
#define __BUTTON 4
#define __DESKTOP 5
#define __SOUND 9
#define __ACLASS 11
#define __ICLASS 12
#define __MATCH_WINDOW 14
#define __COLOR_MODIFIER 15
#define __SLIDEOUT 16
#define __ICONBOX 19
#define __FONTS 21

#define __MENU_STYLE 699
#define __BORDER_PART 505

#define __TOOLTIP_TEXT 17
#define __TOOLTIP 17

#define __NAME 100

#define __ORIENTATION 200
#define __JUSTIFICATION 201
#define __DRAWING_EFFECT 204
#define __FORGROUND_COLOR 205
#define __BACKGROUND_COLOR 206
#define __FONT_TO_RIGHT 0
#define __FONT_TO_DOWN  1
#define __FONT_TO_UP    2
#define __FONT_TO_LEFT  3

#define __EFFECT_NONE    0
#define __EFFECT_NORMAL  0
#define __EFFECT_SHADOW  1
#define __EFFECT_OUTLINE 2

#define __NORMAL 351
#define __CLICKED 352
#define __HILITED 353
#define __NORMAL_ACTIVE 354
#define __CLICKED_ACTIVE 355
#define __HILITED_ACTIVE 356
#define __EDGE_SCALING 357
#define __PADDING 358
#define __NORMAL_STICKY 359
#define __CLICKED_STICKY 360
#define __HILITED_STICKY 361
#define __NORMAL_ACTIVE_STICKY 362
#define __NORMAL_ACTIVE_CLICKED 363
#define __NORMAL_ACTIVE_HILITED 364
#define __CLICKED_ACTIVE_STICKY 363
#define __HILITED_ACTIVE_STICKY 364
#define __MODIFIER 370
#define __FILLRULE 371
#define __TRANSPARENT 372

#define __ROTATE 373
#define __ROTATE_90 1
#define __ROTATE_180 2
#define __ROTATE_270 3
#define __FLIP 373
#define __FLIP_HORIZONTAL 4
#define __FLIP_90 5
#define __FLIP_VERTICAL 6
#define __FLIP_270 7

#define __BEVEL 374
#define __BEVEL_AMIGA 1
#define __BEVEL_MOTIF 2
#define __BEVEL_NEXT 3
#define __BEVEL_DOUBLE 4
#define __BEVEL_WIDEDOUBLE 5
#define __BEVEL_THINPOINT 6
#define __BEVEL_THICKPOINT 7

#define __KEEP_ON_TOP 453
#define __FLAGS 454
#define __IS_A_REGION 455
#define __MIN_WIDTH 456
#define __MAX_WIDTH 457
#define __TOPLEFT_ORIGIN 467
#define __TOPLEFT_X_PERCENTAGE 458
#define __TOPLEFT_X_ABSOLUTE 459
#define __TOPLEFT_Y_PERCENTAGE 460
#define __TOPLEFT_Y_ABSOLUTE 461
#define __BOTTOMRIGHT_ORIGIN 462
#define __BOTTOMRIGHT_X_PERCENTAGE 463
#define __BOTTOMRIGHT_X_ABSOLUTE 464
#define __BOTTOMRIGHT_Y_PERCENTAGE 465
#define __BOTTOMRIGHT_Y_ABSOLUTE 466
#define __MIN_HEIGHT 468
#define __MAX_HEIGHT 469
#define __KEEP_WHEN_SHADED 470
#define __BORDER_SIZE_LEFT 501
#define __BORDER_SIZE_RIGHT 502
#define __BORDER_SIZE_TOP 503
#define __BORDER_SIZE_BOTTOM 504
#define __SHADE_DIRECTION 506
#define __CHANGES_SHAPE 507
#define __BORDER_GROUP_NAME 508

#define __X_ORIGIN 528
#define __Y_ORIGIN 529
#define __X_ABSOLUTE 530
#define __X_PERCENTAGE 531
#define __Y_ABSOLUTE 532
#define __Y_PERCENTAGE 533
#define __X_SIZE_PERCENTAGE 534
#define __Y_SIZE_PERCENTAGE 535
#define __X_SIZE_ABSOLUTE 536
#define __Y_SIZE_ABSOLUTE 537
#define __USE_SIZE_OF_IMAGE 538
#define __PUT_ON_DESKTOP 539
#define __MAKE_STICKY 540
#define __IS_INTERNAL 541
#define __SHOW_BY_DEFAULT 542
#define __LABEL 543

#define __SOLID_COLOR 560
#define __BACKGROUND_LAYER 561
#define __FORGROUND_LAYER 562
#define __USE_ON_DESKTOP 564
#define __DESKTOP_ALL -1

#define __TYPE_NORMAL 5
#define __TYPE_GLOBAL 7

/* possible actions that can be performed */
#define __A_EXEC	exec
#define __A_CMD

#define __A_NONE	nop
#define __A_EXIT	exit
#define __A_ALERT	alert
#define __A_SHOW_MENU	menus show
#define __A_HIDE_MENU	menus hide
#define __A_CLEANUP	desk arrange
#define __A_ABOUT	about

#define __A_MOVE	wop * mo ptr
#define __A_RESIZE	wop * sz ptr
#define __A_RAISE	wop * ra
#define __A_LOWER	wop * lo
#define __A_RESIZE_H	wop * sz ptr-h
#define __A_RESIZE_V	wop * sz ptr-v
#define __A_KILL	wop * close
#define __A_KILL_NASTY	wop * kill
#define __A_STICK	wop * st
#define __A_ICONIFY	wop * ic
#define __A_SHADE	wop * sh
#define __A_MAX_HEIGHT	wop * th
#define __A_MAX_WIDTH	wop * tw
#define __A_MAX_SIZE	wop * ts
#define __A_SET_LAYER	wop * la
#define __A_SNAPSHOT	remember * all
#define __A_ZOOM	wop * zoom
#define __A_FULLSCREEN	wop * fs
#define __A_RAISE_LOWER	wop * raiselower
#define __A_SET_BORDER	wop * bo

#define __A_ICONIFY_NG	wop % ic
#define __A_KILL_NG	wop % close
#define __A_MOVE_NG	wop % mo ptr
#define __A_RAISE_NG	wop % ra
#define __A_LOWER_NG	wop % lo
#define __A_STICK_NG	wop % st
#define __A_SHADE_NG	wop % sh
#define __A_RAISE_LOWER_NG	wop % raiselower
#define __A_SET_BORDER_NG	wop % bo

#define __A_SKIPFOCUS	wop * skipfocus
#define __A_SKIPTASK	wop * skiptask
#define __A_SKIPWINLIST	wop * skipwinlist
#define __A_NEVERFOCUS	wop * no_wm_focus
#define __A_SKIPLISTS	wop * skiplists

#define __A_SEND_TO_NEXT_DESK	wop * desk next
#define __A_SEND_TO_PREV_DESK	wop * desk prev
#define __A_MOVE_WIN_TO_AREA	wop * area
#define __A_MOVE_WIN_BY_AREA	wop * arel

#define __A_DESKTOP_NEXT	desk next
#define __A_DESKTOP_PREV	desk prev
#define __A_DESKTOP_RAISE	desk raise
#define __A_DESKTOP_LOWER	desk lower
#define __A_DESKTOP_DRAG	desk drag
#define __A_DESKTOP_INPLACE	desk this
#define __A_GOTO_DESK		desk goto

#define __A_AREA_SET		area set
#define __A_AREA_MOVE_BY	area move

#define __A_DRAG_BUTTON		button mo ptr

#define __A_HIDESHOW_BUTTON	button_show
#define __A_SLIDEOUT		slideout
#define __A_FOCUS_NEXT		focus next
#define __A_FOCUS_PREV		focus prev
#define __A_BACKGROUND_SET	bg use

#define __A_START_GROUP		gop * start
#define __A_ADD_TO_GROUP	gop * add
#define __A_REMOVE_FROM_GROUP	gop * del
#define __A_BREAK_GROUP		gop * break
#define __A_SHOWHIDE_GROUP	gop * showhide

#define __A_CREATE_ICONBOX	ibox new

#define __MODIFIER_KEY 101
#define __TYPE 102
#define __ALLOW_ANY_MODIFIER_KEYS 103
#define __ACTION 104
#define __KEY 427
#define __EVENT 428
#define __ALLOW_ANY_BUTTON 930
#define __ALLOW_ANY_KEY 931
#define __NEXT_ACTION 105
#define __TOOLTIP_ACTION_TEXT 107

#define __NONE 0
#define __SHIFT 900
#define __LOCK 901
#define __CTRL 902
#define __ALT 903
#define __META2 904
#define __META3 905
#define __WINDOWS_KEY 906
#define __META5 907
#define __CTRL_ALT 910
#define __CTRL_SHIFT 911
#define __ALT_SHIFT 912
#define __CTRL_ALT_SHIFT 913
#define __CTRL_META4 914
#define __SHIFT_META4 915
#define __CTRL_META4_SHIFT 916
#define __CTRL_META5 917
#define __SHIFT_META5 918
#define __CTRL_META5_SHIFT 919
#define __WINDOWS_SHIFT 920
#define __WINDOWS_CTRL 921
#define __WINDOWS_ALT 922


#define __MOUSE_PRESS 0
#define __MOUSE_RELEASE 1
#define __MOUSE_ENTER 2
#define __MOUSE_LEAVE 3
#define __KEY_PRESS 4
#define __KEY_RELEASE 5
#define __DOUBLE_CLICK 6
#define __FOCUS_IN 7
#define __FOCUS_OUT 8

#define __USE_BORDER 480
#define __HAS_NAME 481
#define __HAS_CLASS 482
#define __HAS_TITLE 483
#define __IS_IN_WIDTH_RANGE 484
#define __IS_IN_HEIGHT_RANGE 485
#define __IS_TRANSIENT 486
#define __CANNOT_RESIZE_HORIZONTALLY 487
#define __CANNOT_RESIZE_VERTICALLY 488
#define __IS_SHAPED 489
#define __USE_ICON 490
#define __MAKE_WINDOW_STICKY 492

#define __RED 600
#define __GREEN 601
#define __BLUE 602

#define __SLIDE_DIRECTION 620

#define __TOOLTIP_ICON 640
#define __BUBBLE1_ICLASS 641
#define __BUBBLE2_ICLASS 642
#define __BUBBLE3_ICLASS 643
#define __BUBBLE4_ICLASS 644
#define __DISTANCE 645
#define __TOOLTIP_HELP_ICON 646

#define __BG_ICLASS 700
#define __ITEM_ICLASS 701
#define __SUBMENU_ICLASS 702
#define __USE_ITEM_BACKGROUNDS 703
#define __MAXIMUM_NUMBER_OF_COLUMNS 704
#define __MAXIMUM_NUMBER_OF_ROWS 705
#define __STYLE 706
#define __MENU_ITEM 707
#define __SUMENU 708
#define __MENU_ACTION 709
#define __MENU_PREBUILT 710
#define __MENU_TITLE 711

#define __CURSOR 800
#define __BG_COLOR 801
#define __FG_COLOR 802
#define __XBM_FILE 803
#define __NATIVE_ID 804

#define __TRANSPARENCY 2001
#define __SHOW_NAMES 2002
#define __ICON_SIZE 2003
#define __ICON_MODE 2004
#define __SCROLLBAR_SIDE 2005
#define __SCROLLBAR_ARROWS 2006
#define __AUTOMATIC_RESIZE 2007
#define __SHOW_ICON_BASE 2008
#define __SCROLLBAR_AUTOHIDE 2009
#define __COVER_HIDE 2010
#define __RESIZE_ANCHOR 2011
#define __ICONBOX_ANIMATE 2012
#define __EXTRA_HEAD 2013

#define __HORIZONTAL 0
#define __VERTICAL 1
#define __BAR_TOP 0
#define __BAR_LEFT 0
#define __BAR_BOTTOM 1
#define __BAR_RIGHT 1
#define __START 0
#define __BOTH 1
#define __FINISH 2
#define __NEITHER 3

/* Native cursor definitions */
#define XC_NONE 999
#define XC_x_CURSOR 0
#define XC_ARROW 2
#define XC_BASED_ARROW_DOWN 4
#define XC_BASED_ARROW_UP 6
#define XC_BOAT 8
#define XC_BOGOSITY 10
#define XC_BOTTOM_LEFT_CORNER 12
#define XC_BOTTOM_RIGHT_CORNER 14
#define XC_BOTTOM_SIDE 16
#define XC_BOTTOM_TEE 18
#define XC_BOX_SPIRAL 20
#define XC_CENTER_PTR 22
#define XC_CIRCLE 24
#define XC_CLOCK 26
#define XC_COFFEE_MUG 28
#define XC_CROSS 30
#define XC_CROSS_REVERSE 32
#define XC_CROSSHAIR 34
#define XC_DIAMOND_CROSS 36
#define XC_DOT 38
#define XC_DOTBOX 40
#define XC_DOUBLE_ARROW 42
#define XC_DRAFT_LARGE 44
#define XC_DRAFT_SMALL 46
#define XC_DRAPED_BOX 48
#define XC_EXCHANGE 50
#define XC_FLEUR 52
#define XC_GOBBLER 54
#define XC_GUMBY 56
#define XC_HAND1 58
#define XC_HAND2 60
#define XC_HEART 62
#define XC_ICON 64
#define XC_IRON_CROSS 66
#define XC_LEFT_PTR 68
#define XC_LEFT_SIDE 70
#define XC_LEFT_TEE 72
#define XC_LEFTBUTTON 74
#define XC_LL_ANGLE 76
#define XC_LR_ANGLE 78
#define XC_MAN 80
#define XC_MIDDLEBUTTON 82
#define XC_MOUSE 84
#define XC_PENCIL 86
#define XC_PIRATE 88
#define XC_PLUS 90
#define XC_QUESTION_ARROW 92
#define XC_RIGHT_PTR 94
#define XC_RIGHT_SIDE 96
#define XC_RIGHT_TEE 98
#define XC_RIGHTBUTTON 100
#define XC_RTL_LOGO 102
#define XC_SAILBOAT 104
#define XC_SB_DOWN_ARROW 106
#define XC_SB_H_DOUBLE_ARROW 108
#define XC_SB_LEFT_ARROW 110
#define XC_SB_RIGHT_ARROW 112
#define XC_SB_UP_ARROW 114
#define XC_SB_V_DOUBLE_ARROW 116
#define XC_SHUTTLE 118
#define XC_SIZING 120
#define XC_SPIDER 122
#define XC_SPRAYCAN 124
#define XC_STAR 126
#define XC_TARGET 128
#define XC_TCROSS 130
#define XC_TOP_LEFT_ARROW 132
#define XC_TOP_LEFT_CORNER 134
#define XC_TOP_RIGHT_CORNER 136
#define XC_TOP_SIDE 138
#define XC_TOP_TEE 140
#define XC_TREK 142
#define XC_UL_ANGLE 144
#define XC_UMBRELLA 146
#define XC_UR_ANGLE 148
#define XC_WATCH 150
#define XC_XTERM 152

/*******************************************************************/
/* Convenience macros to make configuring E SO much simpler        */
/*******************************************************************/

/*********** Window match convenience macros ***********************/
#define BEGIN_BORDER_MATCH(name, border) \
__MATCH_WINDOW __BGN;\
  __NAME "name";\
  __USE_BORDER border

#define HAS_NAME(name) \
  __HAS_NAME name

#define HAS_CLASS(class) \
  __HAS_CLASS class

#define HAS_TITLE(title) \
  __HAS_TITLE title

#define IS_IN_WIDTH_RANGE(min, max) \
  __IS_IN_WIDTH_RANGE min max

#define IS_IN_HEIGHT_RANGE(min, max) \
  __IS_IN_HEIGHT_RANGE min max

#define CANNOT_RESIZE_HORIZONTALLY \
  __CANNOT_RESIZE_HORIZONTALLY __ON

#define CANNOT_RESIZE_VERTICALLY \
  __CANNOT_RESIZE_VERTICALLY __ON

#define MAKE_WINDOW_STICKY \
  __MAKE_WINDOW_STICKY __ON

#define IS_TRANSIENT \
  __IS_TRANSIENT __ON

#define IS_SHAPED \
  __IS_SHAPED __ON

#define USE_ICON(iclass) \
  __USE_ICON iclass

#define END_BORDER_MATCH \
__END

#define USE_BORDER_FOR_CLIENT_WITH_TITLE(title, border) \
__MATCH_WINDOW __BGN;\
  __NAME border"_MATCH";\
  __USE_BORDER border;\
  __HAS_TITLE title;\
__END

#define USE_BORDER_FOR_CLIENT_WITH_NAME(name, border) \
__MATCH_WINDOW __BGN;\
  __NAME border"_MATCH";\
  __USE_BORDER border;\
  __HAS_NAME name;\
__END

#define USE_BORDER_FOR_CLIENT_WITH_CLASS(class, border) \
__MATCH_WINDOW __BGN;\
  __NAME border"_MATCH";\
  __USE_BORDER border;\
  __HAS_CLASS class;\
__END

#define USE_BORDER_FOR_TRANSIENT_CLIENT(border) \
__MATCH_WINDOW __BGN;\
  __NAME border"_MATCH";\
  __USE_BORDER border;\
  __IS_TRANSIENT __ON;\
  __END

#define USE_BORDER_FOR_UNRESIZABLE_CLIENT(border) \
__MATCH_WINDOW __BGN;\
  __NAME border"_MATCH";\
  __USE_BORDER border;\
  __CANNOT_RESIZE_HORIZONTALLY __ON;\
  __CANNOT_RESIZE_VERTICALLY __ON;\
__END

#define USE_BORDER_FOR_SHAPED_CLIENT(border) \
__MATCH_WINDOW __BGN;\
  __NAME border"_MATCH";\
  __USE_BORDER border;\
  __IS_SHAPED __ON;\
__END

#define USE_ICON_IMAGE_FOR_CLIENT_TITLE(title, image) \
__MATCH_WINDOW __BGN;\
  __NAME image"_MATCH";\
  __USE_ICON image;\
  __HAS_TITLE title;\
__END

#define USE_ICON_IMAGE_FOR_CLIENT_NAME(name, image) \
__MATCH_WINDOW __BGN;\
  __NAME image"_MATCH";\
  __USE_ICON image;\
  __HAS_NAME name;\
__END

#define USE_ICON_IMAGE_FOR_CLIENT_CLASS(class, image) \
__MATCH_WINDOW __BGN;\
  __NAME image"_MATCH";\
  __USE_ICON image;\
  __HAS_CLASS class;\
__END

#define MAKE_WINDOW_STICKY_BY_TITLE(title) \
__MATCH_WINDOW __BGN;\
  __NAME title_"STICKYTITLE";\
  __MAKE_WINDOW_STICKY 1;\
  __HAS_TITLE title;\
__END

#define MAKE_WINDOW_STICKY_BY_CLASS(class) \
__MATCH_WINDOW __BGN;\
  __NAME class"_STICKYCLASS";\
  __MAKE_WINDOW_STICKY 1;\
  __HAS_CLASS class;\
__END

#define MAKE_WINDOW_STICKY_BY_NAME(name) \
__MATCH_WINDOW __BGN;\
  __NAME name"_STICKYNAME";\
  __MAKE_WINDOW_STICKY 1;\
  __HAS_NAME name;\
__END

/* Obsolete windowmatch macros */
#define USE_ICON_IMAGECLASS_FOR_CLIENT_TITLE(title, iclass)
#define USE_ICON_IMAGECLASS_FOR_CLIENT_NAME(name, iclass)
#define USE_ICON_IMAGECLASS_FOR_CLIENT_CLASS(class, iclass)

#define USE_ICON_IMAGES_FOR_CLIENT_TITLE(title, image, image2, image3)
#define USE_ICON_IMAGES_FOR_CLIENT_NAME(name, image, image2, image3)

#define WINDOW_ON_DESK_BY_NAME(name,desk)
#define WINDOW_ON_DESK_BY_TITLE(title,desk)
#define WINDOW_ON_DESK_BY_CLASS(class,desk)

/*********** Menu creation macros **********************************/
#define BEGIN_NEW_DIRSCAN_MENU(name, style, directory) \
__MENU __BGN;\
  __MENU_PREBUILT name style "dirscan" directory

#define BEGIN_NEW_GNOME_MENU(name, style, directory) \
__MENU __BGN;\
  __MENU_PREBUILT name style "gnome" directory

#define BEGIN_NEW_BORDERS_MENU(name, style) \
__MENU __BGN;\
  __MENU_PREBUILT name style "borders"

#define BEGIN_NEW_THEMES_MENU(name, style) \
__MENU __BGN;\
  __MENU_PREBUILT name style "themes"

#define BEGIN_NEW_WINDOWLIST_MENU(name, style) \
__MENU __BGN;\
  __MENU_PREBUILT name style "windowlist"

#define BEGIN_NEW_DESKTOPWINDOWLIST_MENU(name, style) \
__MENU __BGN;\
  __MENU_PREBUILT name style "desktopwindowlist"

#define ADD_MENU_TITLE(name) \
  __MENU_TITLE name

#define BEGIN_NEW_FILE_MENU(name, style, thefile) \
__MENU __BGN;\
  __MENU_PREBUILT name style "file" thefile

#define NORMAL_MENU_STYLE_VERTICAL(name, border, tclass, bg_iclass, item_iclass, submenu_iclass, max_items) \
__MENU_STYLE __BGN;\
  __NAME name;\
  __BORDER border;\
  __TCLASS tclass;\
  __BG_ICLASS bg_iclass;\
  __ITEM_ICLASS item_iclass;\
  __SUBMENU_ICLASS submenu_iclass;\
  __USE_ITEM_BACKGROUNDS __OFF;\
  __MAXIMUM_NUMBER_OF_ROWS max_items;\
__END

#define NORMAL_MENU_STYLE_HORIZONTAL(name, border, tclass, bg_iclass, item_iclass, submenu_iclass, max_items) \
__MENU_STYLE __BGN;\
  __NAME name;\
  __BORDER border;\
  __TCLASS tclass;\
  __BG_ICLASS bg_iclass;\
  __ITEM_ICLASS item_iclass;\
  __SUBMENU_ICLASS submenu_iclass;\
  __USE_ITEM_BACKGROUNDS __OFF;\
  __MAXIMUM_NUMBER_OF_COLUMNS max_items;\
__END

#define NEXTSTEP_MENU_STYLE_VERTICAL(name, border, tclass, item_iclass, submenu_iclass, max_items) \
__MENU_STYLE __BGN;\
  __NAME name;\
  __BORDER border;\
  __TCLASS tclass;\
  __ITEM_ICLASS item_iclass;\
  __SUBMENU_ICLASS submenu_iclass;\
  __USE_ITEM_BACKGROUNDS __ON;\
  __MAXIMUM_NUMBER_OF_ROWS max_items;\
__END

#define NEXTSTEP_MENU_STYLE_HORIZONTAL(name, border, tclass, item_iclass, submenu_iclass, max_items) \
__MENU_STYLE __BGN;\
  __NAME name;\
  __BORDER border;\
  __TCLASS tclass;\
  __ITEM_ICLASS item_iclass;\
  __SUBMENU_ICLASS submenu_iclass;\
  __USE_ITEM_BACKGROUNDS __ON;\
  __MAXIMUM_NUMBER_OF_COLUMNS max_items;\
__END

#define BEGIN_NEW_MENU(name, style) \
__MENU __BGN;\
  __NAME name;\
  __STYLE style

#define END_MENU \
__END

#define ADD_MENU_ITEM(text, icon_iclass, action, parameters) \
  __MENU_ITEM icon_iclass text;\
  __MENU_ACTION action parameters

#define ADD_MENU_TEXT_ITEM(text, action, parameters) \
  __MENU_ITEM "NULL" text;\
  __MENU_ACTION action parameters

#define ADD_MENU_ICON_ITEM(icon_iclass, action, parameters) \
  __MENU_ITEM icon_iclass;\
  __MENU_ACTION action parameters

#define ADD_MENU_SUBMENU_ITEM(text, icon_iclass, submenu_name) \
  __SUMENU submenu_name icon_iclass text

#define ADD_MENU_SUBMENU_TEXT_ITEM(text, submenu_name) \
  __SUMENU submenu_name "NULL" text

#define ADD_MENU_SUBMENU_ICON_ITEM(icon_iclass, submenu_name) \
  __SUMENU submenu_name icon_iclass

/*********** Tooltip creation macros *******************************/
#define DEFINE_TOOLTIP(name, main_iclass, cloud1_iclass, cloud2_iclass, cloud3_iclass, cloud4_iclass, tclass, distance) \
__TOOLTIP __BGN;\
  __NAME name;\
  __ICLASS main_iclass;\
  __BUBBLE1_ICLASS cloud1_iclass;\
  __BUBBLE2_ICLASS cloud2_iclass;\
  __BUBBLE3_ICLASS cloud3_iclass;\
  __BUBBLE4_ICLASS cloud4_iclass;\
  __TOOLTIP_HELP_ICON "DO_HELP_BUTTON";\
  __TCLASS tclass;\
  __DISTANCE distance;\
__END

#define DEFINE_TOOLTIP_WITH_LOGO(name, main_iclass, cloud1_iclass, cloud2_iclass, cloud3_iclass, cloud4_iclass, tclass, distance, logo) \
__TOOLTIP __BGN;\
  __NAME name;\
  __ICLASS main_iclass;\
  __BUBBLE1_ICLASS cloud1_iclass;\
  __BUBBLE2_ICLASS cloud2_iclass;\
  __BUBBLE3_ICLASS cloud3_iclass;\
  __BUBBLE4_ICLASS cloud4_iclass;\
  __TOOLTIP_HELP_ICON logo;\
  __TCLASS tclass;\
  __DISTANCE distance;\
__END

#define DEFINE_TOOLTIP_SIMPLE(name, iclass, tclass, distance) \
__TOOLTIP __BGN;\
  __NAME name;\
  __ICLASS iclass;\
  __TCLASS tclass;\
  __DISTANCE distance;\
__END

#define TOOLTIP(name, main_iclass, cloud1_iclass, cloud2_iclass, cloud3_iclass, cloud4_iclass, tclass, distance) \
__TOOLTIP __BGN;\
  __NAME name;\
  __ICLASS main_iclass;\
  __BUBBLE1_ICLASS cloud1_iclass;\
  __BUBBLE2_ICLASS cloud2_iclass;\
  __BUBBLE3_ICLASS cloud3_iclass;\
  __BUBBLE4_ICLASS cloud4_iclass;\
  __TOOLTIP_HELP_ICON "DO_HELP_BUTTON";\
  __TCLASS tclass;\
  __DISTANCE distance;\
__END

#define TOOLTIP_WITH_LOGO(name, main_iclass, cloud1_iclass, cloud2_iclass, cloud3_iclass, cloud4_iclass, tclass, distance, logo) \
__TOOLTIP __BGN;\
  __NAME name;\
  __ICLASS main_iclass;\
  __BUBBLE1_ICLASS cloud1_iclass;\
  __BUBBLE2_ICLASS cloud2_iclass;\
  __BUBBLE3_ICLASS cloud3_iclass;\
  __BUBBLE4_ICLASS cloud4_iclass;\
  __TOOLTIP_HELP_ICON logo;\
  __TCLASS tclass;\
  __DISTANCE distance;\
__END

#define TOOLTIP_SIMPLE(name, iclass, tclass, distance) \
__TOOLTIP __BGN;\
  __NAME name;\
  __ICLASS iclass;\
  __TCLASS tclass;\
  __DISTANCE distance;\
__END

#define TOOLTIP_SIMPLE_WITH_LOGO(name, iclass, tclass, distance, logo) \
__TOOLTIP __BGN;\
  __NAME name;\
  __ICLASS iclass;\
  __TCLASS tclass;\
  __TOOLTIP_HELP_ICON logo;\
  __DISTANCE distance;\
__END

/*********** Sound creation macros *******************************/
#define BEGIN_SOUND \
__SOUND __BGN

#define END_SOUND \
__END

/*********** Action macros ***************************************/
#define BEGIN_ACLASS(name, type) \
__ACLASS __BGN; \
  __NAME name; \
  __TYPE type

#define ACLASS_TOOLTIP(tooltip) \
  __TOOLTIP_TEXT tooltip

#define ACLASS_ACTION(action, event) \
  __EVENT event; \
  __ACTION action

#define ACLASS_ACTION_WITH_TOOLTIP(action, event, tooltip) \
  __TOOLTIP_ACTION_TEXT tooltip; \
  __EVENT event; \
  __ACTION action

#define ACLASS_SHOW_MENU(menuname, event) \
  __EVENT event; \
  __ACTION __A_SHOW_MENU named menuname

#define ACLASS_BUTTON(button, modifier) \
  __BUTTON button; \
  __MODIFIER_KEY modifier

#define ACLASS_KEY(key, mod) \
  __KEY key; \
  __MODIFIER_KEY mod

#define ACLASS_ALLOW_ANY_BUTTON \
  __ALLOW_ANY_BUTTON __ON

#define ACLASS_ALLOW_ANY_MODIFIER_KEYS \
  __ALLOW_ANY_MODIFIER_KEYS __ON

#define ACLASS_ALLOW_ANY_KEY \
  __ALLOW_ANY_KEY __ON

#define ACLASS_NEXT_ACTION \
  __NEXT_ACTION

#define END_ACLASS \
__END

/*********** Cursor macros ***************************************/
#define CURSOR(name, fg, bg, file) \
__CURSOR __BGN; \
  __NAME name; \
  __FG_COLOR fg; \
  __BG_COLOR bg; \
  __XBM_FILE file; \
__END

#define NATIVE_CURSOR(name, fg, bg, id) \
__CURSOR __BGN; \
  __NAME name; \
  __FG_COLOR fg; \
  __BG_COLOR bg; \
  __NATIVE_ID id; \
__END

/*********** Slideout and button macros **************************/
#define BEGIN_BUTTON(name, iclass, aclass) \
__BUTTON __BGN; \
  __NAME name; \
  __ICLASS iclass; \
  __ACLASS aclass

#define BUTTON_LABEL(label) \
  __LABEL label

#define BUTTON_CURSOR(cursor) \
  __CURSOR cursor

#define BUTTON_TEXT(text) \
  __TCLASS text

#define BUTTON_IS_INTERNAL \
  __IS_INTERNAL __ON

#define BUTTON_SHOW_BY_DEFAULT \
  __SHOW_BY_DEFAULT __ON

#define BUTTON_USE_SIZE_OF_IMAGE \
  __USE_SIZE_OF_IMAGE __ON

#define BUTTON_MAKE_STICKY \
  __MAKE_STICKY __ON

#define BUTTON_KEEP_ON_TOP \
  __KEEP_ON_TOP __ON

#define BUTTON_PUT_ON_DESKTOP(num) \
  __PUT_ON_DESKTOP num

#define BUTTON_LOCATION(xo, xp, xa, yo, yp, ya) \
  __X_ORIGIN xo; \
  __X_PERCENTAGE xp; \
  __X_ABSOLUTE xa; \
  __Y_ORIGIN yo; \
  __Y_PERCENTAGE yp; \
  __Y_ABSOLUTE ya

#define END_BUTTON \
__END

#define BEGIN_SLIDEOUT(name, direction) \
__SLIDEOUT __BGN;\
  __NAME name;\
  __SLIDE_DIRECTION direction

#define SLIDEOUT_BUTTON(name) \
  __BUTTON name

#define ADD_BUTTON_TO_SLIDEOUT(name) \
  __BUTTON name

#define END_SLIDEOUT \
__END

/*********** Desktop BG creation macros ***************************/
#define BEGIN_BACKGROUND(name) \
__DESKTOP __BGN;\
  __NAME name

#define END_BACKGROUND \
__END

#define SET_SOLID(color) \
  __SOLID_COLOR color

#define ON_DESKTOP(num) \
  __USE_ON_DESKTOP num

#define DEFAULT_BACKGROUND \
  __USE_ON_DESKTOP __DESKTOP_ALL

#define ADD_BACKGROUND_TILED(file)\
  __BACKGROUND_LAYER file 1 1 0 0 0 0

#define ADD_BACKGROUND_SCALED(file)\
  __BACKGROUND_LAYER file 0 0 0 0 1024 1024

#define ADD_BACKGROUND_TILED_SCALED_VERTICALLY(file)\
  __BACKGROUND_LAYER file 1 0 0 0 0 1024

#define ADD_BACKGROUND_TILED_SCALED_HORIZONTALLY(file)\
  __BACKGROUND_LAYER file 1 0 0 0 1024 0

#define ADD_BACKGROUND_CENTERED(file)\
  __BACKGROUND_LAYER file 0 1 512 512 0 0

#define ADD_BACKGROUND_TILED_CENTER(file)\
  __BACKGROUND_LAYER file 1 1 512 512 0 0

#define ADD_BACKGROUND_SCALED_RETAIN_ASPECT(file)\
  __BACKGROUND_LAYER file 0 1 512 512 1024 1024

#define ADD_BACKGROUND_TILED_SCALED_RETAIN_ASPECT(file)\
  __BACKGROUND_LAYER file 1 1 512 512 1024 1024

#define ADD_OVERLAY_IMAGE_CENTERED(file) \
  __FORGROUND_LAYER file 1 512 512 0 0

#define ADD_OVERLAY_IMAGE_TOP_LEFT(file) \
  __FORGROUND_LAYER file 1 0 0 0 0

#define ADD_OVERLAY_IMAGE_TOP_RIGHT(file) \
  __FORGROUND_LAYER file 1 1024 0 0 0

#define ADD_OVERLAY_IMAGE_BOTTOM_LEFT(file) \
  __FORGROUND_LAYER file 1 0 1024 0 0

#define ADD_OVERLAY_IMAGE_BOTTOM_RIGHT(file) \
  __FORGROUND_LAYER file 1 1024 1024 0 0

#define ADD_OVERLAY_IMAGE_BOTTOM_MIDDLE(file) \
  __FORGROUND_LAYER file 1 512 1024 0 0

#define ADD_OVERLAY_IMAGE_TOP_MIDDLE(file) \
  __FORGROUND_LAYER file 1 512 0 0 0

#define ADD_OVERLAY_IMAGE_LEFT_MIDDLE(file) \
  __FORGROUND_LAYER file 1 0 512 0 0

#define ADD_OVERLAY_IMAGE_RIGHT_MIDDLE(file) \
  __FORGROUND_LAYER file 1 1024 512 0 0

#define ADD_OVERLAY_IMAGE_SCALED(file) \
  __FORGROUND_LAYER file 0 0 0 1024 1024

#define ADD_OVERLAY_IMAGE_ASPECT(file) \
  __FORGROUND_LAYER file 1 512 512 1024 1024

#define ADD_BACKGROUND_SCALED_RETAIN_ASPECT_ALIGN_RIGHT(file)\
  __BACKGROUND_LAYER file 0 1 1024 512 0 1024

#define ADD_BACKGROUND_SCALED_RETAIN_ASPECT_ALIGN_LEFT(file)\
  __BACKGROUND_LAYER file 0 1 0 512 0 1024

#define ADD_BACKGROUND_SCALED_RETAIN_ASPECT_ALIGN_TOP(file)\
  __BACKGROUND_LAYER file 0 1 512 0 1024 0

#define ADD_BACKGROUND_SCALED_RETAIN_ASPECT_ALIGN_BOTTOM(file)\
  __BACKGROUND_LAYER file 0 1 512 1024 1024 0

/*********** Border creation macros *******************************/
#define BEGIN_BORDER(name, left, right, top, bottom) \
__BORDER __BGN; \
  __NAME name; \
  __BORDER_SIZE_LEFT left; \
  __BORDER_SIZE_RIGHT right; \
  __BORDER_SIZE_TOP top; \
  __BORDER_SIZE_BOTTOM bottom

#define BORDER_CHANGES_SHAPE \
  __CHANGES_SHAPE __ON

#define BORDER_SHADE_DIRECTION(direction) \
  __SHADE_DIRECTION direction

#define BORDER_SHADE_UP \
  __SHADE_DIRECTION __UP

#define BORDER_GROUP_NAME(name) \
  __BORDER_GROUP_NAME name

#define BEGIN_BORDER_PART(iclass, min_width, max_width, min_height, max_height) \
__BORDER_PART __BGN; \
  __ICLASS iclass; \
  __MIN_WIDTH min_width; \
  __MAX_WIDTH max_width; \
  __MIN_HEIGHT min_height; \
  __MAX_HEIGHT max_height

#define BORDER_PART_KEEP_WHEN_SHADED(value) \
  __KEEP_WHEN_SHADED value;

#define BORDER_PART_KEEP_ON_TOP \
  __KEEP_ON_TOP __ON

#define BORDER_PART_ACTION(aclass) \
  __ACLASS aclass

#define BORDER_PART_CURSOR(cursor) \
  __CURSOR cursor

#define BORDER_PART_TITLE(tclass) \
  __TCLASS tclass; \
  __FLAGS __FLAG_TITLE

#define BORDER_PART_TITLE_AND_ICON(tclass) \
  __TCLASS tclass; \
  __FLAGS __FLAG_TITLE_AND_ICON

#define BORDER_PART_MINI_ICON \
  __FLAGS __FLAG_MINI_ICON

#define BORDER_PART_REGION(o1, x1p, x1, y1p, y1, o2, x2p, x2, y2p, y2) \
  __TOPLEFT_ORIGIN o1; \
  __TOPLEFT_X_PERCENTAGE x1p; \
  __TOPLEFT_X_ABSOLUTE x1; \
  __TOPLEFT_Y_PERCENTAGE y1p; \
  __TOPLEFT_Y_ABSOLUTE y1; \
  __BOTTOMRIGHT_ORIGIN o2; \
  __BOTTOMRIGHT_X_PERCENTAGE x2p; \
  __BOTTOMRIGHT_X_ABSOLUTE x2; \
  __BOTTOMRIGHT_Y_PERCENTAGE y2p; \
  __BOTTOMRIGHT_Y_ABSOLUTE y2

#define END_BORDER_PART \
  __END

#define END_BORDER \
__END

/*********** Image creation macros ********************************/
#define BEGIN_IMAGE(name) \
__ICLASS __BGN; \
  __NAME name

#define IMAGE_NORMAL(file, fill, l, r, t, b) \
  __NORMAL file; \
  __FILLRULE fill; \
  __EDGE_SCALING l r t b

#define IMAGE_HILITED(file, fill, l, r, t, b) \
  __HILITED file; \
  __FILLRULE fill; \
  __EDGE_SCALING l r t b

#define IMAGE_CLICKED(file, fill, l, r, t, b) \
  __CLICKED file; \
  __FILLRULE fill; \
  __EDGE_SCALING l r t b

#define IMAGE_NORMAL_ACTIVE(file, fill, l, r, t, b) \
  __NORMAL_ACTIVE file; \
  __FILLRULE fill; \
  __EDGE_SCALING l r t b

#define IMAGE_HILITED_ACTIVE(file, fill, l, r, t, b) \
  __HILITED_ACTIVE file; \
  __FILLRULE fill; \
  __EDGE_SCALING l r t b

#define IMAGE_CLICKED_ACTIVE(file, fill, l, r, t, b) \
  __CLICKED_ACTIVE file; \
  __FILLRULE fill; \
  __EDGE_SCALING l r t b

#define IMAGE_NORMAL_STICKY(file, fill, l, r, t, b) \
  __NORMAL_STICKY file; \
  __FILLRULE fill; \
  __EDGE_SCALING l r t b

#define IMAGE_HILITED_STICKY(file, fill, l, r, t, b) \
  __HILITED_STICKY file; \
  __FILLRULE fill; \
  __EDGE_SCALING l r t b

#define IMAGE_CLICKED_STICKY(file, fill, l, r, t, b) \
  __CLICKED_STICKY file; \
  __FILLRULE fill; \
  __EDGE_SCALING l r t b

#define IMAGE_NORMAL_ACTIVE_STICKY(file, fill, l, r, t, b) \
  __NORMAL_ACTIVE_STICKY file; \
  __FILLRULE fill; \
  __EDGE_SCALING l r t b

#define IMAGE_NORMAL_ACTIVE_HILITED(file, fill, l, r, t, b) \
  __NORMAL_ACTIVE_HILITED file; \
  __FILLRULE fill; \
  __EDGE_SCALING l r t b

#define IMAGE_NORMAL_ACTIVE_CLICKED(file, fill, l, r, t, b) \
  __NORMAL_ACTIVE_CLICKED file; \
  __FILLRULE fill; \
  __EDGE_SCALING l r t b

#define IMAGE_HILITED_ACTIVE_STICKY(file, fill, l, r, t, b) \
  __HILITED_ACTIVE_STICKY file; \
  __FILLRULE fill; \
  __EDGE_SCALING l r t b

#define IMAGE_CLICKED_ACTIVE_STICKY(file, fill, l, r, t, b) \
  __CLICKED_ACTIVE_STICKY file; \
  __FILLRULE fill; \
  __EDGE_SCALING l r t b

#define IMAGE_PADDING(l, r, t, b) \
  __PADDING l r t b

#define IMAGE_BEVEL(bevel) \
  __BEVEL bevel

#define IMAGE_ROTATE(rotate) \
  __ROTATE rotate

#define IMAGE_FLIP(flip) \
  __FLIP flip

#define END_IMAGE \
__END

#define BEGIN_TEXT(name) \
__TCLASS __BGN; \
  __NAME name

#define TEXT_NORMAL(font, effect, fgcolor, bgcolor) \
  __NORMAL font; \
  __DRAWING_EFFECT effect; \
  __FORGROUND_COLOR fgcolor; \
  __BACKGROUND_COLOR bgcolor

#define TEXT_CLICKED(font, effect, fgcolor, bgcolor) \
  __CLICKED font; \
  __DRAWING_EFFECT effect; \
  __FORGROUND_COLOR fgcolor; \
  __BACKGROUND_COLOR bgcolor

#define TEXT_HILITED(font, effect, fgcolor, bgcolor) \
  __HILITED font; \
  __DRAWING_EFFECT effect; \
  __FORGROUND_COLOR fgcolor; \
  __BACKGROUND_COLOR bgcolor

#define TEXT_NORMAL_ACTIVE(font, effect, fgcolor, bgcolor) \
  __NORMAL_ACTIVE font; \
  __DRAWING_EFFECT effect; \
  __FORGROUND_COLOR fgcolor; \
  __BACKGROUND_COLOR bgcolor

#define TEXT_CLICKED_ACTIVE(font, effect, fgcolor, bgcolor) \
  __CLICKED_ACTIVE font; \
  __DRAWING_EFFECT effect; \
  __FORGROUND_COLOR fgcolor; \
  __BACKGROUND_COLOR bgcolor

#define TEXT_HILITED_ACTIVE(font, effect, fgcolor, bgcolor) \
  __HILITED_ACTIVE font; \
  __DRAWING_EFFECT effect; \
  __FORGROUND_COLOR fgcolor; \
  __BACKGROUND_COLOR bgcolor

#define TEXT_NORMAL_STICKY(font, effect, fgcolor, bgcolor) \
  __NORMAL_STICKY font; \
  __DRAWING_EFFECT effect; \
  __FORGROUND_COLOR fgcolor; \
  __BACKGROUND_COLOR bgcolor

#define TEXT_CLICKED_STICKY(font, effect, fgcolor, bgcolor) \
  __CLICKED_STICKY font; \
  __DRAWING_EFFECT effect; \
  __FORGROUND_COLOR fgcolor; \
  __BACKGROUND_COLOR bgcolor

#define TEXT_HILITED_STICKY(font, effect, fgcolor, bgcolor) \
  __HILITED_STICKY font; \
  __DRAWING_EFFECT effect; \
  __FORGROUND_COLOR fgcolor; \
  __BACKGROUND_COLOR bgcolor

#define TEXT_NORMAL_ACTIVE_STICKY(font, effect, fgcolor, bgcolor) \
  __NORMAL_ACTIVE_STICKY font; \
  __DRAWING_EFFECT effect; \
  __FORGROUND_COLOR fgcolor; \
  __BACKGROUND_COLOR bgcolor

#define TEXT_NORMAL_ACTIVE_CLICKED(font, effect, fgcolor, bgcolor) \
  __NORMAL_ACTIVE_CLICKED font; \
  __DRAWING_EFFECT effect; \
  __FORGROUND_COLOR fgcolor; \
  __BACKGROUND_COLOR bgcolor

#define TEXT_NORMAL_ACTIVE_HILITED(font, effect, fgcolor, bgcolor) \
  __NORMAL_ACTIVE_HILITED font; \
  __DRAWING_EFFECT effect; \
  __FORGROUND_COLOR fgcolor; \
  __BACKGROUND_COLOR bgcolor

#define TEXT_JUSTIFY_LEFT \
  __JUSTIFICATION 0

#define TEXT_JUSTIFY_CENTER \
  __JUSTIFICATION 512

#define TEXT_JUSTIFY_RIGHT \
  __JUSTIFICATION 1024

#define TEXT_ORIENTATION(direction) \
  __ORIENTATION direction

#define END_TEXT \
__END

#define BEGIN_FONTS \
__FONTS __BGN

#define END_FONTS \
__END

#endif /* __E16_DEFINITIONS__ */
