#ifndef drwwh_H
 #define drwwh_H

#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <time.h>
#include <ctype.h>
#include <string.h>
#include <math.h>

#ifndef drw_swix_H
 #include "DRW/drwswix.h"
#endif

#ifndef wimp_H
 #include "OSlib/wimp.h"
#endif

#ifndef messagetrans_H
 #include "OSlib/messagetrans.h"
#endif

#ifndef osword_H
 #include "OSlib/osword.h"
#endif

#ifndef osgbpb_H
 #include "OSlib/osgbpb.h"
#endif

#ifndef fileswitch_H
 #include "OSlib/fileswitch.h"
#endif

#ifndef draw_H
 #include "OSlib/draw.h"
#endif

#ifndef colourpicker_H
 #include "OSlib/colourpicker.h"
#endif

#ifndef font_H
 #include "OSlib/font.h"
#endif

#ifndef os_H
 #include "OSlib/os.h"
#endif

#ifndef osspriteop_H
 #include "OSlib/osspriteop.h"
#endif

#ifndef territory_H
 #include "OSlib/territory.h"
#endif

#ifndef extedit_H
 #include "OSlib/extedit.h"
#endif

#include "DRW/drwfnptr.h"

#include "DRW/drwGPdef.h"

#ifndef drwacnh_H
 #include "DRW/drwacnh.h"
#endif

#ifndef drwalloc_H
 #include "DRW/drwalloch.h"
 #include "DRW/drwalloc.h"
 #include "DRW/drwalloct.h"
#endif

#ifndef drwll_H
 #include "DRW/drwllh.h"
 #include "DRW/drwll.h"
#endif

#include "DRW/drwWdragh.h"

#ifndef drwtwbh_H
 #include "DRW/drwtwbh.h"
#endif


#if defined NAMESPACE_DRWIMPC
  namespace DrWimpC {
#endif

#if defined NAMESPACE_OSLIB
  using namespace OSLib;
#endif

typedef struct drw_wbox                    drw_wbox;
typedef struct drw_visible_window_posn     drw_visible_window_posn;


typedef enum {

drw_no_win_pos = 0,
drw_centre_w = 1,
drw_hcentre_w = 2,
drw_vcentre_w = 3,
drw_topleft_w = 4,
drw_topright_w = 5,
drw_bottomleft_w = 6,
drw_bottomright_w = 7,
drw_topcentre_w = 8,
drw_leftcentre_w = 9,
drw_rightcentre_w = 10,
drw_bottomcentre_w = 11,
drw_open_at_pointer = 12,
drw_open_at_box = 13,
drw_num_open_win_pos

} drw_vw_posn;


#define drw_help_str_size          236


#define drw_wbox_num_size          20

struct drw_wbox {

int x0;
int y0;
int width;
int height;

};


struct drw_visible_window_posn {

drw_vw_posn posn;
drw_wbox wbox;

};


typedef enum {

drw_no_menu_pos = 0,
drw_iconbar_menu_pos = 1,
drw_centred_menu_pos = 2,
drw_rtptr_menu_pos = 3,
drw_at_icon_menu_pos = 4

} drw_menu_pop_up_pos;


#define drw_title_height         36
#define drw_caret_is_hidden      0x1000000

#define DRW_NO_AUTOFN    -1

typedef enum{

DRW_MOUSECLICK_AUTOFN = 1,
DRW_SHOW_AUTOFN = 2,
DRW_KEYPR_AUTOFN = 3,
DRW_INPUT_AUTOFN = 4,
DRW_INIT_AUTOFN = 5,
DRW_NULL_AUTOFN = 6,
DRW_REDRAW_AUTOFN = 7,
DRW_PTRIN_AUTOFN = 8,
DRW_PTROUT_AUTOFN = 9,
DRW_GAIN_CARET_AUTOFN = 10,
DRW_LOSE_CARET_AUTOFN = 11,
DRW_PRE_WCR_AUTOFN = 12,
DRW_OPENW_AUTOFN = 13,
DRW_PANE_AUTOFN = 14,
DRW_PRE_CLOSEW_AUTOFN = 15,
DRW_CLOSEW_AUTOFN = 16,
DRW_RBAND_DRAG_AUTOFN = 17,
DRW_POINT_DRAG_AUTOFN = 18,
DRW_CLOSEDOWN_AUTOFN = 19,
DRW_SAVEFILETYPE_AUTOFN = 20,
DRW_SAVEICON_AUTOFN = 21,
DRW_SAVEDATA_AUTOFN = 22,
DRW_ACCEPT_SAVE_AUTOFN = 23,
DRW_DSV_MY_REF_AUTOFN = 24,
DRW_DATASAVED_AUTOFN = 25,
DRW_LOADDATA_AUTOFN = 26,
DRW_POSTLOADDATA_AUTOFN = 27,
DRW_QUIT_AUTOFN = 28,
DRW_WMSG_AUTOFN = 29,
DRW_QS_ACCEPT_FNAME_AUTOFN = 30,
DRW_ACCEPT_RTFR_AUTOFN = 31,
DRW_RAM_TFR_AUTOFN = 32,
DRW_RTND_RTFR_AUTOFN = 33,
DRW_TRY_RTFR_AUTOFN = 34,
DRW_POST_RTFR_AUTOFN = 35,
DRW_RTVI_AUTOFN = 36,
DRW_DESKTOPSAVE_AUTOFN = 37,
DRW_ICONISE_AUTOFN = 38,
DRW_MODE_CHANGE_AUTOFN = 39,
DRW_HELP_AUTOFN = 40,
DRW_MENUHELP_AUTOFN = 41,
DRW_ICONBAR_AUTOFN = 42,
DRW_MENU_AUTOFN = 43,
DRW_MENUOPEN_AUTOFN = 44,
DRW_OVERMENUARROW_AUTOFN = 45,
DRW_MENUS_DELETED_AUTOFN = 46,
DRW_MENU_COUNT_I_AUTOFN = 47,
DRW_MENU_TOKEN_SEL_AUTOFN = 48,
DRW_MENU_TITLE_AUTOFN = 49,
DRW_MENU_TEXT_AUTOFN = 50,
DRW_MSL_AUTOFN = 51,
DRW_CRDEFCHOICES_AUTOFN = 52,
DRW_PRTGDCHOICES_AUTOFN = 53,
DRW_ACCEPT_CHOICE_AUTOFN = 54,
DRW_GETNTCHANGEDCHOICE_AUTOFN = 55,
DRW_SETAUTOSCROLL_AUTOFN = 56,
DRW_SCROLLOBSCURED_AUTOFN = 57,
DRW_SETAUTOSCROLLPTR_AUTOFN = 58,
DRW_ADJUSTWASCRDISTANCES_AUTOFN = 59,
DRW_LISTWINDOW_AUTOFN = 60,
DRW_RDTEXTLINE_AUTOFN = 61,
DRW_LWD_SELECTDRAG_AUTOFN = 62,
DRW_USERDRAGBOX_AUTOFN = 63,
DRW_SETICONDRAGBOUNDS_AUTOFN = 64,
DRW_DRAGGINGICON_AUTOFN = 65,
DRW_ENDICONDRAG_AUTOFN = 66,
DRW_DRAGICON_AUTOFN = 67,
DRW_SETOLESESSIONNO_AUTOFN = 68,
DRW_ACCEPTOLEFILETYPE_AUTOFN = 69,
DRW_LOADOLEFILE_AUTOFN = 70,
DRW_OLESESSIONOPEN_AUTOFN = 71,
DRW_OLEFILECHANGED_AUTOFN = 72,
DRW_DISCARDOLESESSION_AUTOFN = 73,
DRW_EDITUSERINIT_AUTOFN = 74,
DRW_SETJOBHANDLE_AUTOFN = 75,
DRW_ROCHECK_AUTOFN = 76,
DRW_RETRYEDIT_AUTOFN = 77,
DRW_STARTDATASAVE_AUTOFN = 78,
DRW_ABORTEDIT_AUTOFN = 79,
DRW_EDITABORTED_AUTOFN = 80,
DRW_ACCEPTEDIT_AUTOFN = 81,
DRW_PROCESSCURSOR_AUTOFN = 82,
DRW_PROCESSRTDCURSOR_AUTOFN = 83,
DRW_PROCESSEDITSAVE_AUTOFN = 84,
DRW_LOADEDITDATA_AUTOFN = 85,
DRW_POSTEDITTFR_AUTOFN = 86,
DRW_EDITSAVE_AUTOFN = 87,
DRW_RECVDLACK_AUTOFN = 88,
DRW_RESIZEEDITW_AUTOFN = 89,
DRW_CUEDITANYWAY_AUTOFN = 90,
DRW_EDITFILENAME_AUTOFN = 91,
DRW_SAVEEDITANYWAY_AUTOFN = 92,
DRW_CHECKEDITNAMES_AUTOFN = 93,
DRW_EDITACCEPTRAMTFR_AUTOFN = 94,
DRW_EDITRAMTFR_AUTOFN = 95,
DRW_EDITPOSTRAMTFR_AUTOFN = 96,
DRW_EDITRTDRAMTFR_AUTOFN = 97,
DRW_GETAPPNAME_AUTOFN = 98,
DRW_GETAPPPURPOSE_AUTOFN = 99,
DRW_GETAPPAUTHOR_AUTOFN = 100,
DRW_GETAPPVERSION_AUTOFN = 101,
DRW_COLPICKRGB_AUTOFN = 102,
DRW_COLPICKMODEL_AUTOFN = 103,
DRW_SPRITEGRAPHICS_AUTOFN = 104,
DRW_RIU_AUTOFN = 105,
DRW_RIUINUSE_AUTOFN = 106,
DRW_RIUNOTINUSE_AUTOFN = 107,
DRW_DECLAREFONTS_AUTOFN = 108,
DRW_PRINT_AUTOFN = 109,
DRW_PRINTING_AUTOFN = 118,
DRW_PRINTERCHANGE_AUTOFN = 111,
DRW_SHOWDCS_AUTOFN = 112,
DRW_CANCELDCS_AUTOFN = 113,
DRW_SAVEDCS_AUTOFN = 114,
DRW_DISCARDDCS_AUTOFN = 115,
DRW_ICONCLICKDCS_AUTOFN = 116,
DRW_SLIDER_AUTOFN = 117,
DRW_SLIDERBACK_AUTOFN = 118,
DRW_SLIDERVALUE_AUTOFN = 119,
DRW_CLIPBDPASTEDATAEXISTS_AUTOFN = 120,
DRW_CLIPBDPASTE_AUTOFN = 121,
DRW_COPYDATATOCLIPBD_AUTOFN = 122,
DRW_CONVCLIPBDDATA_AUTOFN = 123,
DRW_TRYCLIPRAMTFR_AUTOFN = 124,
DRW_CLIPBDPOSTPASTERAMTFR_AUTOFN = 125,
DRW_SELNACCEPTRAMTFR_AUTOFN = 126,
DRW_POSTSELNRAMTFR_AUTOFN = 127,
DRW_HASSELECTION_AUTOFN = 128,
DRW_REPLACESELECTION_AUTOFN = 129,
DRW_INSELECTION_AUTOFN = 130,
DRW_GAINFOCUS_AUTOFN = 131,
DRW_REMOVECARET_AUTOFN = 132,
DRW_CLEARSELECTION_AUTOFN = 133,
DRW_STARTSELNDRAG_AUTOFN = 134,
DRW_STARTRBANDDRAG_AUTOFN = 135,
DRW_STARTPOINTDRAG_AUTOFN = 136,
DRW_CLAIMDRAG_AUTOFN = 137,
DRW_DRAWPTRGHOSTCARET_AUTOFN = 138,
DRW_ENDRBANDDRAG_AUTOFN = 139,
DRW_ENDPOINTDRAG_AUTOFN = 140,
DRW_GETNEXTSELNOBJECT_AUTOFN = 141,
DRW_DELETESELNSOURCE_AUTOFN = 142,
DRW_SETINSERTPOINT_AUTOFN = 143,
DRW_TASK_INIT_AUTOFN = 144,
DRW_POLL_AUTOFN = 145,
DRW_POLLWD_NON_ZERO_AUTOFN = 146,
DRW_DATALOADACK_AUTOFN = 147,
DRW_BEGINOLEEDIT_AUTOFN = 148

} drw_autofn_numbers;

#define DRW_NUM_AUTOFN_TYPES     5


typedef enum {

drw_process_null_ufnno = 0,
drw_redraw_ufnno = 1,
drw_mouseclick_ufnno = 2,
drw_keypress_ufnno = 3,
drw_drag_ufnno = 4,
drw_ptr_entering_ufnno = 5,
drw_ptr_leaving_ufnno = 6,
drw_gain_caret_ufnno = 7,
drw_lose_caret_ufnno = 8,
drw_openwindow_ufnno = 9,
drw_pane_ufnno = 10,
drw_pre_closew_ufnno = 11,
drw_closewindow_ufnno = 12,
drw_pre_cr_window_ufnno = 13,
drw_rband_drag_ufnno = 14,
drw_point_drag_ufnno = 15,
drw_closedown_ufnno = 16,
drw_savefiletype_ufnno = 17,
drw_saveicon_ufnno = 18,
drw_savedata_ufnno = 19,
drw_accept_save_ufnno = 20,
drw_dsv_my_ref_ufnno = 21,
drw_datasaved_ufnno = 22,
drw_loaddata_ufnno = 23,
drw_postloaddata_ufnno = 24,
drw_quit_ufnno = 25,
drw_wmsg_ufnno = 26,
drw_qs_accept_fname_ufnno = 27,
drw_accept_ramtfr_ufnno = 28,
drw_ramtfr_ufnno = 29,
drw_rtnd_ramtfr_ufnno = 30,
drw_try_ram_fetch_ufnno = 31,
drw_post_ramtfr_ufnno = 32,
drw_rtvi_ufnno = 33,
drw_desktopsave_ufnno = 34,
drw_iconise_ufnno = 35,
drw_mode_change_ufnno = 36,
drw_help_ufnno = 37,
drw_menuhelp_ufnno = 38,
drw_iconbar_ufnno = 39,
drw_init_def_wdefn_ufnno = 40,
drw_menu_ufnno = 41,
drw_menuopen_ufnno = 42,
drw_overmenuarrow_ufnno = 43,
drw_menus_deleted_ufnno = 44,
drw_menu_count_i_ufnno = 45,
drw_menu_token_sel_ufnno = 46,
drw_menu_title_ufnno = 47,
drw_menu_text_ufnno= 48,
drw_msl_ufnno = 49,
drw_crdefchoices_ufnno = 50,
drw_prtgdchoice_ufnno = 51,
drw_getntchangedchoice_ufnno = 52,
drw_accept_choice_ufnno = 53,
drw_setautoscroll_ufnno = 54,
drw_scrollobscured_ufnno = 55,
drw_setautoscrollptr_ufnno = 56,
drw_adjustwascrdistances_ufnno = 57,
drw_listwindow_ufnno = 58,
drw_redrawtextline_ufnno = 59,
drw_lwd_selectdrag_ufnno = 60,
drw_userdragbox_ufnno = 61,
drw_seticondragbounds_ufnno = 62,
drw_draggingicon_ufnno = 63,
drw_endicondrag_ufnno = 64,
drw_dragicon_ufnno = 65,
drw_setolesessionno_ufnno = 66,
drw_acceptolefiletype_ufnno = 67,
drw_loadolefile_ufnno = 68,
drw_olesessionopen_ufnno = 69,
drw_olefilechanged_ufnno = 70,
drw_discardolesession_ufnno = 71,
drw_edituserinit_ufnno = 72,
drw_setjobhandle_ufnno = 73,
drw_rocheck_ufnno = 74,
drw_retryedit_ufnno = 75,
drw_startdatasave_ufnno = 76,
drw_abortedit_ufnno = 77,
drw_editaborted_ufnno = 78,
drw_acceptedit_ufnno = 79,
drw_processcursor_ufnno = 80,
drw_processrtdcursor_ufnno = 81,
drw_processeditsave_ufnno = 82,
drw_loadeditdata_ufnno = 83,
drw_postedittfr_ufnno = 84,
drw_editsave_ufnno = 85,
drw_recvdlack_ufnno = 86,
drw_resizeeditw_ufnno = 87,
drw_cueditanyway_ufnno = 88,
drw_editfilename_ufnno = 89,
drw_saveeditanyway_ufnno = 90,
drw_checkeditname_ufnno = 91,
drw_editacceptramtfr_ufnno = 92,
drw_editramtfr_ufnno = 93,
drw_editpostramtfr_ufnno = 94,
drw_editrtdramtfr_ufnno = 95,
drw_getappname_ufnno = 96,
drw_getapppurpose_ufnno = 97,
drw_getappauthor_ufnno = 98,
drw_getappversion_ufnno = 99,
drw_colpickrgb_ufnno = 100,
drw_colpickmodel_ufnno = 101,
drw_spritegraphics_ufnno = 102,
drw_riu_ufnno = 103,
drw_riuinuse_ufnno = 104,
drw_riunotinuse_ufnno = 105,
drw_declarefonts_ufnno = 106,
drw_print_ufnno = 107,
drw_printing_ufnno = 108,
drw_printerchange_ufnno = 109,
drw_showdcs_ufnno = 110,
drw_canceldcs_ufnno = 111,
drw_savedcs_ufnno = 112,
drw_discarddcs_ufnno = 113,
drw_iconclickdcs_ufnno = 114,
drw_slider_ufnno = 115,
drw_sliderback_ufnno = 116,
drw_slidervalue_ufnno = 117,
drw_clipbdpastedataexists_ufnno = 118,
drw_clipbdpaste_ufnno = 119,
drw_copydatatoclipbd_ufnno = 120,
drw_convclipbddata_ufnno = 121,
drw_tryclipramtfr_ufnno = 122,
drw_clipbdpostpasteramtfr_ufnno = 123,
drw_selnacceptramtfr_ufnno = 124,
drw_postselnramtfr_ufnno = 125,
drw_hasselection_ufnno = 126,
drw_replaceselection_ufnno = 127,
drw_inselection_ufnno = 128,
drw_gainfocus_ufnno = 129,
drw_removecaret_ufnno = 130,
drw_clearselection_ufnno = 131,
drw_startselndrag_ufnno = 132,
drw_startrbanddrag_ufnno = 133,
drw_startpointdrag_ufnno = 134,
drw_claimdrag_ufnno = 135,
drw_drawptrghostcaret_ufnno = 136,
drw_endrbanddrag_ufnno = 137,
drw_endpointdrag_ufnno = 138,
drw_getnextselnobject_ufnno = 139,
drw_deleteselnsource_ufnno = 140,
drw_setinsertpoint_ufnno = 141,
drw_task_init_ufnno = 142,
drw_poll_ufnno = 143,
drw_pollwd_non_zero_ufnno = 144,
drw_dataloadack_ufnno = 145,
drw_beginoleedit_ufnno = 146

} drw_ufn_numbers;


typedef struct drw_active_object_data   drw_active_object_data;


struct drw_active_object_data {

drw_autofn_numbers fntype;
drw_ll_hdr wobjfns;

};


#define drw_script_file_type            0x1d7


typedef bits drw_autofn_fn_flags;

#define drw_autofn_w_icons_linked       ((drw_autofn_fn_flags) 0x1u)
#define drw_autofn_not_active           ((drw_autofn_fn_flags) 0x2u)
#define drw_autofn_object_icon          ((drw_autofn_fn_flags) 0x4u)
#define drw_autofn_has_derived_fn       ((drw_autofn_fn_flags) 0x8u)
#define drw_autofn_done                 ((drw_autofn_fn_flags) 0x10u)
#define drw_autofn_has_initfn           ((drw_autofn_fn_flags) 0x20u)
#define drw_autofn_init_called          ((drw_autofn_fn_flags) 0x40u)
#define drw_autofn_not_in_object        ((drw_autofn_fn_flags) 0x80u)
#define drw_autofn_keep_icon            ((drw_autofn_fn_flags) 0x100u)
#define drw_autofn_objectid_allocated   ((drw_autofn_fn_flags) 0x200u)
#define drw_autofn_done_first_wh        ((drw_autofn_fn_flags) 0x400u)
#define drw_autofn_has_manual_fn        ((drw_autofn_fn_flags) 0x800u)
#define drw_autofn_is_manual_objectid   ((drw_autofn_fn_flags) 0x1000u)
#define drw_autofn_has_fndata           ((drw_autofn_fn_flags) 0x2000u)
#define drw_obj_icn_is_hidden           ((drw_autofn_fn_flags) 0x4000u)
#define drw_obj_is_hidden               ((drw_autofn_fn_flags) 0x8000u)
#define drw_wdata_auto_created          ((drw_autofn_fn_flags) 0x10000u)
#define drw_wdata_help_scan_file        ((drw_autofn_fn_flags) 0x20000u)
#define drw_wdata_is_menusrce           ((drw_autofn_fn_flags) 0x40000u)
#define drw_saveicons_checked           ((drw_autofn_fn_flags) 0x80000u)
#define drw_wdata_load_scut_hfns        ((drw_autofn_fn_flags) 0x100000u)
#define drw_is_scut_kp_fn               ((drw_autofn_fn_flags) 0x200000u)
#define drw_get_drvd_fn_refno_done      ((drw_autofn_fn_flags) 0x400000u)
#define drw_set_drvd_fn_icon_refno_done ((drw_autofn_fn_flags) 0x800000u)
#define drw_set_dfn_icon_refno_done     ((drw_autofn_fn_flags) 0x1000000u)
#define drw_assign_dfn_icon_refno_done  ((drw_autofn_fn_flags) 0x2000000u)
#define drw_autofn_has_hdefn_fn         ((drw_autofn_fn_flags) 0x4000000u)
#define drw_autofn_is_link_fn           ((drw_autofn_fn_flags) 0x8000000u)


typedef bits drw_app_fn_flags;

#define drw_call_appfn_no_flags         ((drw_app_fn_flags) 0x0u)
#define drw_call_appfn_before_ofn       ((drw_app_fn_flags) 0x1u)
#define drw_call_appfn_replace_ofn      ((drw_app_fn_flags) 0x2u)
#define drw_call_appfn_after_ofn        ((drw_app_fn_flags) 0x4u)
#define drw_appfn_open_ofnw             ((drw_app_fn_flags) 0x8u)
#define drw_appfn_open_fnw              ((drw_app_fn_flags) 0x10u)
#define drw_appfn_open_fnw_before       ((drw_app_fn_flags) 0x20u)
#define drw_appfn_open_fnw_replace      ((drw_app_fn_flags) 0x40u)
#define drw_appfn_open_fnw_after        ((drw_app_fn_flags) 0x80u)
#define drw_appfn_ofn_opos_updated      ((drw_app_fn_flags) 0x100u)
#define drw_appfn_fn_opos_updated       ((drw_app_fn_flags) 0x200u)


typedef bits drw_autofn_cr_flags;

#define drw_autofn_cr_flag_none         ((drw_autofn_cr_flags) 0x0u)
#define drw_autofn_cr_if_nf             ((drw_autofn_cr_flags) 0x1u)
#define drw_autofn_cr_clear_auto_cr     ((drw_autofn_cr_flags) 0x2u)


#define drw_get_autofn_by_name          1
#define drw_get_autofn_by_icon_no       2

#define drw_is_manual_object            1
#define drw_num_object_id_flags         1


typedef bits drw_object_fn_flags;

#define drw_object_fn_not_active        ((drw_object_fn_flags) 0x1u)
#define drw_object_is_not_real          ((drw_object_fn_flags) 0x2u)

typedef bits drw_application_data_flags;

#define drw_appn_is_external            ((drw_application_data_flags) 0x1u)
#define drw_runtime_scuts_file_loaded   ((drw_application_data_flags) 0x2u)

typedef bits drw_template_data_flags;

#define drw_template_is_external        ((drw_template_data_flags) 0x1u)

typedef bits drw_data_tfr_flags;

/* DRW_IS_RAM_FETCH, DRW_IS_RAM_TRANSMIT,DRW_TFR_DRAG_SAVE and DRW_TFR_DATA_FILE   are used to identify data transfer methods, DRW_TFR_DATA_LOAD,
   DRW_TFR_EXT_EDIT and DRW_TFR_CLIPBD_PASTE are used to identify the type of
   data describing the data transfer. (if none of these a drw_datasave_data
   structure is use for standard transfers. Otherwise a user defined
   structure is assumed. */

#define DRW_TFR_RAM_FETCH            ((drw_data_tfr_flags)   0x1u)
#define DRW_TFR_FIRST_RAM_FETCH      ((drw_data_tfr_flags)   0x2u)
#define DRW_TFR_RAM_TRANSMIT         ((drw_data_tfr_flags)   0x4u)
#define DRW_TFR_DRAG_SAVE            ((drw_data_tfr_flags)   0x8u)
#define DRW_TFR_DATA_FILE            ((drw_data_tfr_flags)   0x10u)
#define DRW_TFR_DATA_LOAD            ((drw_data_tfr_flags)   0x20u)
#define DRW_TFR_EXT_EDIT             ((drw_data_tfr_flags)   0x40u)
#define DRW_TFR_CLIPBD_PASTE         ((drw_data_tfr_flags)   0x80u)
#define DRW_TFR_DRAGGED_SELN         ((drw_data_tfr_flags)   0x100u)
#define DRW_TFR_DELETE_SOURCE        ((drw_data_tfr_flags)   0x200u)
#define DRW_TFR_TEMP_FILE            ((drw_data_tfr_flags)   0x400u)
#define DRW_TFR_WAITING              ((drw_data_tfr_flags)   0x800u)
#define DRW_TFR_DEFERRED             ((drw_data_tfr_flags)   0x1000u)
#define DRW_TFR_ORIG_RAM_FETCH       ((drw_data_tfr_flags)   0x2000u)
#define DRW_E06_RUN_FILE             ((drw_data_tfr_flags)   0x4000u)

#define DRW_TFR_USER_DATA_ID_MASK    ((drw_data_tfr_flags)   0xFFFF0000u)
#define DRW_TFR_USER_DATA_ID_SHIFT   16

typedef bits      drw_stronghelp_flags;

#define drw_no_stronghelp_flags           ((drw_stronghelp_flags) 0x0u)
#define drw_is_for_stronghelp             ((drw_stronghelp_flags) 0x1u)
#define drw_check_for_qmark               ((drw_stronghelp_flags) 0x2u)
#define drw_has_stronghelp_cmd            ((drw_stronghelp_flags) 0x4u)
#define drw_has_textfile_cmd              ((drw_stronghelp_flags) 0x8u)
#define drw_stronghelp_cmd_successful     ((drw_stronghelp_flags) 0x10u)
#define drw_has_url_cmd                   ((drw_stronghelp_flags) 0x20u)
#define drw_wimp_key_shift_f1_pressed     ((drw_stronghelp_flags) 0x40u)
#define drw_wimp_key_ctrl_f1_pressed      ((drw_stronghelp_flags) 0x80u)


typedef struct drw_autofn_wdata            drw_autofn_wdata;
typedef struct drw_autofn_namedata         drw_autofn_namedata;
typedef struct drw_autofn_data             drw_autofn_data;
typedef struct drw_object_fn_data          drw_object_fn_data;
typedef struct drw_autofn_whan_data        drw_autofn_whan_data;
typedef struct drw_object_occno_str        drw_object_occno_str;
typedef struct drw_application_data        drw_application_data;
typedef struct drw_autofn_template_data    drw_autofn_template_data;
typedef struct drw_autofn_wname_data       drw_autofn_wname_data;
typedef struct drw_wimp_menu_data          drw_wimp_menu_data;
typedef struct drw_autofn_fn_data          drw_autofn_fn_data;
typedef struct drw_autofn_type_data        drw_autofn_type_data;
typedef struct drw_obj_whan_data           drw_obj_whan_data;
typedef struct drw_autofn_obj_type_data    drw_autofn_obj_type_data;
typedef struct drw_derived_icon_data       drw_derived_icon_data;
typedef struct drw_autofn_icon_defn_data   drw_autofn_icon_defn_data;
typedef struct drw_scut_key_search_str     drw_scut_key_search_str;
typedef struct drw_menu_defn_search_str    drw_menu_defn_search_str;
typedef struct drw_menu_defn_data          drw_menu_defn_data;
typedef struct drw_menu_handlers           drw_menu_handlers;
typedef struct drw_menu_item_handlers      drw_menu_item_handlers;
typedef struct drw_gen_menu_str            drw_gen_menu_str;
typedef struct drw_sub_menu_wlink_data     drw_sub_menu_wlink_data;
typedef struct drw_menu_col_data           drw_menu_col_data;
typedef struct drw_autofn_smenu_wlink      drw_autofn_smenu_wlink;
typedef struct drw_spr_area_details        drw_spr_area_details;
typedef struct drw_menu_link_data          drw_menu_link_data;
typedef struct drw_shortcut_key_data       drw_shortcut_key_data;
typedef struct drw_escwd_data              drw_escwd_data;
typedef struct drw_version_str             drw_version_str;
typedef struct drw_appn_search_str         drw_appn_search_str;
typedef struct drw_datatfr                 drw_datatfr;
typedef struct drw_datasave_data           drw_datasave_data;
typedef struct drw_extedit_source_str      drw_extedit_source_str;
typedef struct drw_wcaretseln              drw_wcaretseln;
/*typedef struct drw_tempwimp_block          drw_tempwimp_block;*/
typedef struct drw_symlink_data_base       drw_symlink_data_base;
typedef struct drw_symlink_data            drw_symlink_data;
typedef struct drw_app_fn_data             drw_app_fn_data;
typedef struct drw_app_fn_help_data        drw_app_fn_help_data;


typedef bits   drw_wcaretseln_flags;


#ifndef DRW_FTYPE_STR_SIZE
 #define DRW_FTYPE_STR_SIZE 5
#endif

#ifndef DRW_FTYPE_STR_SIZE_ALIGNED
 #define DRW_FTYPE_STR_SIZE_ALIGNED 8
#endif



#define DRW_makeinvisible      ((drw_wcaretseln_flags) 0x1u)
#define DRW_usefontcaret       ((drw_wcaretseln_flags) 0x2u)
#define DRW_hasfocus           ((drw_wcaretseln_flags) 0x4u)
#define DRW_hascaret           ((drw_wcaretseln_flags) 0x8u)
#define DRW_hasselection       ((drw_wcaretseln_flags) 0x10u)
#define DRW_loseselnonclick    ((drw_wcaretseln_flags) 0x20u)
#define DRW_setcaret           ((drw_wcaretseln_flags) 0x40u)
#define DRW_setpointershape    ((drw_wcaretseln_flags) 0x80u)


struct drw_wcaretseln {

wimp_caret caret;
int ptrno;
osspriteop_area *ptrspritearea;
char pointername[osspriteop_NAME_LIMIT];
os_colour_number colour_number;
font_string_flags unit_flags;
drw_wcaretseln_flags flags;
int selnstartx;
int selnstarty;
bits dragpreftype;
int selncount;
void *selndata;
int savedref;

};

struct drw_datasave_data {

wimp_w w;
wimp_i i;
os_coord pos;
int est_size;
bits filetype;
wimp_t task;
int sv_my_ref;
int selncount;
void *selndata;
wimp_w wSavew;
char wsavet[DRW_FTYPE_STR_SIZE_ALIGNED];
char fname[212];

};


struct drw_datatfr {

int my_ref;
wimp_t totask;
byte *buffer;
int buffsize;
byte *buffptr;
int numbytes;
int buffpos;
int tfrinfotype;
void *tfrinfo;
drw_data_tfr_flags tfrflags;
wimp_w objwhan;
int objectid;

};


struct drw_extedit_source_str {

int source1;
int source2;
int source3;
int source4;
int extedit_process_type;

};


#define drw_version_str_size               32
#define drw_version_note_size              256


struct drw_version_str {

char versionstr[drw_version_str_size];
char versionnote[drw_version_note_size];
int vsnid;
drw_ll_hdr templatefiles;

};


struct drw_obj_whan_data {

drw_autofn_whan_data *whdata;
drw_ll_hdr objfns;
drw_ll_hdr nonobjfns;

};


struct drw_autofn_wdata {

wimp_w whan;
wimp_i icon;

};

#define drw_appname_len             12
#define drw_exttpltepathname_limit  11
#define drw_tfile_name_size         32
#define drw_icon_name_size          32
#define drw_menu_name_size          32
#define drw_key_str_size            16
#define drw_modifiers_str_size      8
#define drw_key_code_str_size       8

#define drw_extedit_def_retry_limit 20000
#define drw_ole_def_retry_limit     20000

/* Must be a minimum of 64 to accommodate various workstr fields for*/
/* holding various names up to 63 characters long. */

#define drw_nst 64

#define drw_wincode_name_size 32

#define drw_hname_size  12
#define drw_scut_name_size 12

#define drw_big_neg_val -1000000

/*typedef enum {

drw_menuitem_uline_flagno = 0,
drw_menuitem_fade_flagno = 1,
drw_menuitem_select_flagno = 2,
drw_menuitem_show_static_flagno = 3,
drw_menuitem_apply_smenu_all_flagno = 4,
drw_menuitem_apply_cancel_all_flagno = 5,
drw_num_menuitem_flags = 6

} drw_menuitem_flagnos;*/

typedef bits  drw_menuitem_flags;

#define drw_menuitem_no_flag_val              ((drw_menuitem_flags) 0x0u)
#define drw_menuitem_uline_flag               ((drw_menuitem_flags) 0x1u)
#define drw_menuitem_fade_flag                ((drw_menuitem_flags) 0x2u)
#define drw_menuitem_select_flag              ((drw_menuitem_flags) 0x4u)
#define drw_menuitem_show_static_flag         ((drw_menuitem_flags) 0x8u)
#define drw_menuitem_apply_smenu_all_flag     ((drw_menuitem_flags) 0x10u)
#define drw_menuitem_apply_cancel_all_flag    ((drw_menuitem_flags) 0x20u)

/*#define drw_menuitem_has_msl_handler          ((drw_menuitem_flags) 0x10000u)
#define drw_menuitem_has_marrow_handler       ((drw_menuitem_flags) 0x20000u)*/

#define drw_menuitem_flagstr_width            32

#define drw_menu_flags_delim        '!'

#define drw_menu_link_lt_data_delim '['
#define drw_menu_link_data_delim    ']'

#define drw_menu_click_data_ldelim  '('
#define drw_menu_click_data_rdelim  ')'

#define drw_is_click_action_win_ch  '+'

#define drw_mw_pos_ch               '&'

#define drw_tplte_flag_ind          '+'

#define drw_menu_scut_lt_data_delim '{'
#define drw_menu_scut_data_delim    '}'

#define drw_scut_flags_delim         '^'
#define drw_scut_opts_delim          '#'

#define drw_opos_box_ltch           '<'
#define drw_opos_box_rtch           '>'

struct drw_autofn_namedata {

char ext_tplte_path_name[drw_exttpltepathname_limit + 1];
char tfilename[drw_tfile_name_size];
char windowname[wimp_TEMPLATE_NAME_LIMIT];
char iconname[drw_icon_name_size];
char objid[drw_icon_name_size];

};


typedef bits      drw_openat_flags;

#define drw_oflags_open_select        ((drw_openat_flags) 0x1u)
#define drw_oflags_open_adjust        ((drw_openat_flags) 0x2u)
#define drw_oflags_open_menu          ((drw_openat_flags) 0x4u)
#define drw_oflags_is_transient       ((drw_openat_flags) 0x8u)
#define drw_oflags_is_submenu         ((drw_openat_flags) 0x10u)
#define drw_oflags_is_menu_click_a    ((drw_openat_flags) 0x20u)
#define drw_oflags_is_click_action    ((drw_openat_flags) 0x40u)
#define drw_oflags_is_fs_menu_a       ((drw_openat_flags) 0x80u)
#define drw_oflags_is_local           ((drw_openat_flags) 0x100u)
/*#define drw_smwd_is_matched           ((drw_openat_flags) 0x200u)*/


typedef bits      drw_main_win_open_flags;

#define drw_open_win_at_start_up      ((drw_main_win_open_flags) 0x1u)
#define drw_open_win_on_select        ((drw_main_win_open_flags) 0x2u)
#define drw_open_win_on_adjust        ((drw_main_win_open_flags) 0x4u)


#define drw_win_name_prefix       "Win_"
#define drw_ic_name_prefix        "Icon_"
#define drw_menu_name_prefix      "Menu_"

#define drw_num_open_types        2

#define drw_win_open_type_no     0
#define drw_menu_open_type_no    1


struct drw_appn_search_str {

char *appname;
int appid;

};


struct drw_application_data {

char appname[drw_appname_len];
drw_application_data_flags flags;
wimp_t ftask;
wimp_w wibar;
int appid;
drw_ll_hdr vsnlist;
drw_ll_hdr templatefiles;

};


struct drw_autofn_template_data {

char ext_tplte_path_name[drw_exttpltepathname_limit + 1];
char tfilename[drw_tfile_name_size];
drw_ll_hdr winlist;
drw_template_data_flags flags;
int templateid;

};


struct drw_autofn_wname_data {

char windowname[wimp_TEMPLATE_NAME_LIMIT];
drw_autofn_fn_flags flags;
drwGP icnhdr;
int baseobjectid;
int appid;
int vsnid;
int templateid;
int windowid;
drw_autofn_fn_data *finitfn;
drw_menu_defn_data *amdd;
drw_ll_hdr menulinks;
wimp_w openwh;
osspriteop_area *spr;
int userwincode;
drw_ll_hdr scutlist;
drw_ll_hdr escwdlist;
wimp_w devw;

};


struct drw_escwd_data {

drw_autofn_wname_data *wd;

};


struct drw_wimp_menu_data {

drw_menu_defn_data *thismenu;
int objectid;
int msize;

};


struct drw_object_occno_str {

int templateid;
int windowid;
char objectname[drw_icon_name_size];
int maxoccno;

};


struct drw_autofn_whan_data {

wimp_w whan;
drw_autofn_fn_flags flags;
drwGP icnhdr;
drwGP appnicnhdr;
int userwincode;
drw_autofn_wname_data *wdata;
int objectid;
void *windata;
drwGP menus;
drw_menu_defn_data *amdd;
drw_ll_hdr objoshdr;
wimp_i fileiconno;
wimp_i filenameiconno;
wimp_i okiconno;
wimp_icon_flags wbtype;

};


typedef int (*drw_user_pre_wcr_fn)(wimp_window *window,
                                   int userwincode,
                                   void *userdata);


typedef void (*drw_user_object_init_fn)(int objectid,
                                        wimp_w whan,
                                        wimp_i icon,
                                        int userwincode,
                                        void *userdata);


typedef bits drw_icon_defn_data_flags;

#define drw_autofn_is_external          ((drw_icon_defn_data_flags) 0x1u)
#define drw_autofn_manual_assign        ((drw_icon_defn_data_flags) 0x2u)
#define drw_autofn_is_menusrce_reg      ((drw_icon_defn_data_flags) 0x4u)
#define drw_multiple_fn_for_type        ((drw_icon_defn_data_flags) 0x8u)
#define drw_userdata_is_local           ((drw_icon_defn_data_flags) 0x10u)
#define drw_userdata_is_local_key       ((drw_icon_defn_data_flags) 0x20u)


struct drw_autofn_icon_defn_data {

char *exttpltename;
char *templatedefn;
char *windownamedefn;
char *iconnamedefn;
int occno;
int occnodefn;
char *occref;
char *occrefdefn;
char *hdefn;
char *altname;
drw_icon_defn_data_flags flags;

};


typedef struct drw_wimp_data              drw_wimp_data;
typedef struct drw_uw_data                drw_uw_data;

typedef bits drw_uw_flags;
typedef bits drw_uw_flags2;

typedef bits drw_autofn_data_flags;

#define drw_find_autofn_only            ((drw_autofn_data_flags) 0x1u)
#define drw_select_all_autofn           ((drw_autofn_data_flags) 0x2u)
#define drw_find_autofn_by_whan_icon    ((drw_autofn_data_flags) 0x4u)
#define drw_find_autofn_by_winname      ((drw_autofn_data_flags) 0x8u)
#define drw_find_tplte_external         ((drw_autofn_data_flags) 0x10u)
#define drw_no_base_check               ((drw_autofn_data_flags) 0x20u)
#define drw_exclude_objects             ((drw_autofn_data_flags) 0x40u)
#define drw_exclude_non_objects         ((drw_autofn_data_flags) 0x80u)
#define drw_traverse_object             ((drw_autofn_data_flags) 0x100u)
#define drw_check_for_fn_in_cmp_icnno   ((drw_autofn_data_flags) 0x200u)
#define drw_autofn_stop_selection       ((drw_autofn_data_flags) 0x400u)
#define drw_autofn_ignore_icon          ((drw_autofn_data_flags) 0x800u)
#define drw_autofn_try_icon_acn         ((drw_autofn_data_flags) 0x1000u)
#define drw_test_in_object_box          ((drw_autofn_data_flags) 0x2000u)
#define drw_test_in_fn_box              ((drw_autofn_data_flags) 0x4000u)
#define drw_traverse_all_objects        ((drw_autofn_data_flags) 0x8000u)
#define drw_traverse_all                ((drw_autofn_data_flags) 0x10000u)
#define drw_stop_nested_ll_search       ((drw_autofn_data_flags) 0x20000u)
#define drw_scanning_non_objects        ((drw_autofn_data_flags) 0x40000u)
#define drw_ignore_scan_non_obj_flag    ((drw_autofn_data_flags) 0x80000u)
#define drw_stop_on_icon_result         ((drw_autofn_data_flags) 0x100000u)
#define drw_autofn_match_icon           ((drw_autofn_data_flags) 0x200000u)
#define drw_autofn_ignore_occno         ((drw_autofn_data_flags) 0x400000u)
#define drw_icon_matched                ((drw_autofn_data_flags) 0x800000u)
#define drw_find_menu_srce_wdata        ((drw_autofn_data_flags) 0x1000000u)
#define drw_autofn_is_drwibar_win       ((drw_autofn_data_flags) 0x2000000u)
#define drw_only_call_icon_matched      ((drw_autofn_data_flags) 0x4000000u)
#define drw_is_in_object_box            ((drw_autofn_data_flags) 0x8000000u)
#define drw_is_in_fn_box                ((drw_autofn_data_flags) 0x10000000u)
#define drw_stop_after_is_in_obj_box    ((drw_autofn_data_flags) 0x20000000u)
#define drw_call_selector_fn_after      ((drw_autofn_data_flags) 0x40000000u)


#define drw_call_all_objectid_fn   -1
#define drw_call_non_object_fn     -2

typedef int (*drw_autofn_selector_obj)(drw_autofn_data *mdata,
                                       drw_object_fn_data *ofd,
                                       int result);

typedef int (*drw_autofn_selector_fn)(drw_autofn_data *mdata,
                                      drw_autofn_fn_data *fndata,
                                      int result);

struct drw_autofn_data {

drw_autofn_wdata wdata;
drw_autofn_namedata ndata;
drw_autofn_data_flags flags;
drw_fn_ptr fnlibfn;
void *fnpardata;
drw_fn_ptr autofn;
drw_autofn_numbers fntype;
int occno;
drw_fn_ptr afn;
drw_autofn_wname_data *wd;
drw_autofn_whan_data *whdata;
wimp_menu *menu;
wimp_menu *defmenu;
wimp_i defmenuicon;
int defobjectid;
drw_wimp_data *wpwd;
int objectid;
int userwincode;
drw_autofn_fn_data *lastinobj;
int result;
drw_autofn_selector_obj selectorobj;
drw_autofn_selector_fn selectorfn;
int x;
int y;
os_box *box;
int currobjectid;
wimp_i curricon;
wimp_mouse_state buttontype;
drw_autofn_wname_data *containingwdata;

};


struct drw_scut_key_search_str {

char appname[drw_appname_len];
char tfilename[drw_tfile_name_size];
char menuname[drw_menu_name_size];
drw_shortcut_key_data *scut;
drwGP menulist;
int resetlinks;

};


struct drw_menu_defn_search_str {

char *menuname;
char *appname;
char *tpltename;
char *tname;
wimp_menu *menu;
int itemno;
drw_menu_defn_data *amdd;
drw_autofn_wname_data *wdata;
drw_autofn_fn_data *fndata;

};


typedef bits drw_mdd_flags;

#define drw_mdd_unused_menu         ((drw_mdd_flags) 0x1u)
#define drw_menu_handlers_loaded    ((drw_mdd_flags) 0x2u)


struct drw_menu_handlers {

char handlername[drw_hname_size];
int rtitemno;
drw_autofn_type_data *mopenfn;
drw_autofn_type_data *mtitlefn;
drw_autofn_type_data *mtextfn;
drw_autofn_type_data *mdelfn;

};


struct drw_menu_defn_data {

wimp_menu **menuptr;
char menuname[drw_menu_name_size];
char appname[drw_appname_len];
drw_mdd_flags flags;
drw_menu_handlers mh;
drw_ll_hdr handlers;
char *menutitle;
drw_ll_hdr scutlinks;

};


struct drw_menu_item_handlers {

char handlername[drw_hname_size];
int rtitemno;
drw_autofn_type_data *mselfn;
drw_autofn_type_data *marrowfn;
drw_autofn_type_data *mhpfn;

};


struct drw_sub_menu_wlink_data {

wimp_menu *menu;
int itemno;
char appname[drw_appname_len];
char tpltename[drw_tfile_name_size];
char tname[wimp_TEMPLATE_NAME_LIMIT];
char menuname[drw_menu_name_size];
drw_visible_window_posn openat;
drw_openat_flags oflags;
drw_autofn_whan_data *openatstackpos;
drw_menu_pop_up_pos openatm;
drw_autofn_wname_data *wdata;

};


struct drw_autofn_smenu_wlink {

drw_menu_defn_data *amdd;
int itemno;
drw_openat_flags flags;
drw_autofn_wname_data *wdata;
drw_autofn_fn_data *fndata;
drw_visible_window_posn openat;
drw_openat_flags oflags;
drw_autofn_whan_data *openatstackpos;
drw_menu_pop_up_pos openatm;

};


typedef bits   drw_dk_flags;


struct drw_menu_link_data {

char templatename[drw_tfile_name_size];
char windowname[wimp_TEMPLATE_NAME_LIMIT];
char iconname[drw_icon_name_size];
drw_visible_window_posn openat;
drw_menu_pop_up_pos openatm;
char menuname[drw_menu_name_size];
drw_visible_window_posn mopenat;
drw_menu_pop_up_pos mopenatm;
char otemplatename[drw_tfile_name_size];
char owindowname[wimp_TEMPLATE_NAME_LIMIT];
drw_visible_window_posn oopenat;
drw_menu_pop_up_pos oopenatm;

};


typedef bits drw_shortcut_key_flags;

#define drw_shortuct_has_ctrl       ((drw_shortcut_key_flags) 0x1u)
#define drw_shortcut_has_shift      ((drw_shortcut_key_flags) 0x2u)
#define drw_scut_linked_to_menu     ((drw_shortcut_key_flags) 0x4u)
#define drw_scut_linked_to_hkw      ((drw_shortcut_key_flags) 0x8u)
#define drw_scut_popupm_srch_done   ((drw_shortcut_key_flags) 0x10u)
#define drw_scut_popupw_srch_done   ((drw_shortcut_key_flags) 0x20u)
#define drw_scut_clickw_srch_done   ((drw_shortcut_key_flags) 0x40u)
#define drw_scut_load_scut_hfn      ((drw_shortcut_key_flags) 0x80u)
#define drw_scut_user_defined       ((drw_shortcut_key_flags) 0x100u)
#define drw_scut_init_win_icons     ((drw_shortcut_key_flags) 0x200u)


struct drw_shortcut_key_data {

char appname[drw_appname_len];
char scutname[drw_modifiers_str_size + drw_key_str_size];
drw_menu_defn_data *amdd;
drw_shortcut_key_flags flags;
wimp_key_no key;
int mitemno;
drw_menu_link_data mldata;
drw_menu_defn_data *popupamdd;
drw_autofn_wname_data *popupw;
drw_autofn_wname_data *clickw;
char handlername[drw_hname_size];
drw_autofn_type_data *keyprfn;

};


typedef bits drw_scut_window_flags;

#define drw_scut_no_window_flags       ((drw_scut_window_flags) 0x0u)
#define drw_scut_modified              ((drw_scut_window_flags) 0x1u)
#define drw_scut_reset_key             ((drw_scut_window_flags) 0x2u)
#define drw_scut_reset_data            ((drw_scut_window_flags) 0x4u)
#define drw_scut_init_data             ((drw_scut_window_flags) 0x8u)
#define drw_scut_btt_if_open_only      ((drw_scut_window_flags) 0x10u)
#define drw_scut_close_if_safe         ((drw_scut_window_flags) 0x20u)
#define drw_scut_close_anyway          ((drw_scut_window_flags) 0x40u)
#define drw_scut_get_data_bfr_close    ((drw_scut_window_flags) 0x80u)
#define drw_scut_copying_scut          ((drw_scut_window_flags) 0x100u)


typedef void (*drw_modify_scut_user_fn)(drw_shortcut_key_data *scut,
                                        void *userfndata);


struct drw_autofn_fn_data {

char iconname[drw_icon_name_size];
char objid[drw_icon_name_size];
wimp_i icon;
int occno;
drw_ll_hdr autofnhdr;
void *userdata;
drw_autofn_whan_data *whdata0;
drw_autofn_fn_flags flags;
int objectid;
drw_autofn_fn_data *nextinobj;
drw_autofn_fn_data *priorinobj;
os_box *obox;
int templateid;
int windowid;
char *ref;
drw_autofn_fn_data *ntinitfn;
drwGP icninobj;
drw_menu_defn_data *amdd;
drw_autofn_smenu_wlink *asw;
drw_autofn_smenu_wlink *aswst;
drw_autofn_wname_data *owdata;

};


struct drw_derived_icon_data {

drw_autofn_whan_data *whdata;
drw_autofn_fn_data *fndata;
wimp_icon_state *wistate;

};


struct drw_autofn_type_data {

drw_autofn_numbers fntype;
drw_fn_ptr autofn;
drw_autofn_fn_data *fndata;
void *localuserdata;
drw_autofn_type_data *hdefnftd;

};


struct drw_autofn_obj_type_data {

drw_autofn_type_data *ftd;
drw_object_fn_flags flags;
wimp_i icon;

};


struct drw_app_fn_help_data {

char *currhelpstr;
char iconhelpstr[drw_help_str_size];
char fnhelpstr[drw_help_str_size];

};


struct drw_app_fn_data {

drw_app_fn_flags flags;
drw_fn_ptr objectfn;
void *ofnuserdata;
void *userdata;
int result;
wimp_w ofnw;
wimp_w fnw;
drw_openat_flags ofnoflags;
drw_openat_flags fnoflags;
wimp_w ofnstackpos;
wimp_w fnstackpos;
drw_visible_window_posn ofnwopenat;
drw_visible_window_posn fnwopenat;
drw_menu_pop_up_pos  ofnwpopuppos;
drw_menu_pop_up_pos fnwpopuppos;
drw_app_fn_help_data helpdata;

};


typedef struct drw_object_data    drw_object_data;

struct drw_object_data {

void *userdata;

};


#define drw_object_data_page_size ((size_t) 4096)
#define drw_num_object_data_in_page ((size_t) 4096 / sizeof(drw_object_data))


struct drw_object_fn_data {

int objectid;
drw_object_fn_flags flags;
os_box *obox;
drw_ll_hdr fns;

};


typedef struct drw_user_data_search_str    drw_user_data_search_str;

struct drw_user_data_search_str {

char *name;
int name_is_ref;
int name_is_object;
int occno;
int objectid;
wimp_i icon;

};


typedef struct drw_autofn_icn_data         drw_autofn_icn_data;

struct drw_autofn_icn_data {

wimp_i icon;
void *userdata;

};


#define drw_autofn_par_1         1
#define drw_autofn_par_2         2
#define drw_autofn_par_3         3
#define drw_autofn_par_4         4
#define drw_autofn_par_5         5
#define drw_autofn_par_6         6

#define drw_num_autofn_click_par 6
#define drw_num_autofn_show_par  5
#define drw_num_autofn_keypr_par 6
#define drw_num_autofn_input_par 3
#define drw_num_autofn_init_par  2


#define drw_template_name_size 11
#define drw_template_hdr_name_size 32
#define drw_font_count_array_size 256
#define drw_template_filename_size 256
#define drw_min_obj_size 1024
#define drw_min_wimp_blk_size 1024
#define drw_min_wimp_mem 32
#define drw_no_handle (-1)
#define drw_no_handle_0 (0)
#define drw_no_template_context (0)
#define drw_mouse_blk_size 9
#define drw_def_edit_wait_count 200
#define drw_qsender_blk_size 4
#define drw_wd_scale_blk_size 80
#define drw_wsprcoltrans_blk_size 300
#define drw_wdtrans_blk_size 300
#define drw_wcolour_blk_size 256
#define drw_num_wimp_colours 16
#define drw_draw_data_size_1 16
#define drw_draw_data_size_2 256
#define drw_draw_data_size_3 24
#define drw_draw_font_names_size 4096
#define drw_wimp_no_value (-1)

/*#define drwimpc_menu_prefix_size  (sizeof(int) * (size_t) 2)*/

#define drwimpc_menu_prefix_size  (sizeof(drw_wimp_menu_data))


/* The next three items are passed to flag setting and retrieving functions */
/* To indicate: pwnv -> no value supplied leave value unchanged. */
/*              pwcv -> Change value according to the function's purpose, or */
/*                      according to a state value pased to the function. */
/*              pwicv -> In appropriate functions, initialise the flag to */
/*                       a default initial value. */

#define pwnv (-1)
#define pwcv (-2)
#define pwicv (-3)

#define drw_num_territories    160

#define drw_z_flag             (0x40000000)

#define drw_poll_error_box_quit_button   (3)

#define drw_is_window          0x1u

#define drw_def_help_menu_item ((wimp_i) 2)

#define drw_scrap_dir_name_len 232
#define drw_scrap_dir_name_lim 231

#define drw_obj_ftype_len      8

#define roundup(n)    (0xfffffffc & (n + 3))
#define rounddown(n)  (0xfffffffc & (n))

#define DRW_CLEAR_STATE         (0)
#define DRW_SET_STATE           (1)
#define DRW_TOGGLE_STATE        (2)
#define DRW_UNCHANGED_STATE     (-1)

#define wSUBMENUCOLOURPICKER 4
#define wfontmenubuflen 255
#define wmaxdepth 5
#define wdynamicnum 240

#define STD_NO_WITEM -1

#define drw_msg_menustr_size 256

#define DRW_USE_SEQ 1
#define DRW_USE_RND 2
#define DRW_USE_USER 3


typedef enum {

DRW_STR_MENU = 0,
DRW_ARRAY_MENU,
DRW_MSG_MENU_B,
DRW_MSG_MENU,
DRW_MEMBLK_MENU,
DRW_USER_MENU,
DRW_INT_MENU,
DRW_INSERT_ITEMS = 255,
DRW_GENERATED_MENU = 511,
DRW_GENERATED_LOCAL = 1023

} drw_menu_cr_method;


typedef enum {

drw_get_int_menu_count = 1,
drw_get_int_menu_title,
drw_get_int_menu_next_item,
drw_get_int_menu_end_of_items

} drw_int_menu_action_types;

typedef int (*drw_int_menu_fn)(char *dataptr,
                               drw_int_menu_action_types action,
                               char *buff,
                               int buffsize,
                               int *index);

typedef bits drw_quit_flags;

#define DRW_NO_QUIT        (drw_quit_flags)   0x1u
#define DRW_APP_QUIT       (drw_quit_flags)   0x2u
#define DRW_DESKTOP_QUIT   (drw_quit_flags)   0x4u
#define DRW_QUIT_BOTH      (drw_quit_flags)   0x6u
#define DRW_DCS_IS_POP_UP  (drw_quit_flags)   0x8u
#define DRW_DCS_IS_STATIC  (drw_quit_flags)   0x10u
#define DRW_TASK_IS_ALREADY_RUNNING    ((drw_quit_flags) 0x80u)

#define DRW_DCS_QUIT_TYPE_MASK                0x7u


#define DRW_NOT_FOUND                     0
#define DRW_IS_FILE                       1
#define DRW_IS_DIRECTORY                  2
#define DRW_IS_IMAGE_FILE                 3


typedef struct wkspace                    wkspace;
typedef struct pwd_flag_wd                pwd_flag_wd;
typedef struct msghandlestr               msghandlestr;
typedef struct drw_deep_key               drw_deep_key;
typedef struct drw_tbuff_data             drw_tbuff_data;
typedef bits   drw_misc_flags;
typedef bits   drw_res_obj_search_flags;

typedef bits   drw_icon_name_flags;

typedef bits   drw_pwd_flags;
typedef bits   drw_pwd_wflags;


#define drw_ole_s   unsigned int


/* pwd flag values. */

#define DRW_alloc_mem_for_str          ((drw_pwd_flags) 0x1u)
#define DRW_alloc_mem_for_valn_str     ((drw_pwd_flags) 0x2u)
#define DRW_alloc_mem_for_sprite       ((drw_pwd_flags) 0x4u)
#define DRW_memallocfail               ((drw_pwd_flags) 0x8u)
#define DRW_quit                       ((drw_pwd_flags) 0x10u)
#define DRW_wfinished                  ((drw_pwd_flags) 0x20u)
#define DRW_wprinting                  ((drw_pwd_flags) 0x40u)
#define DRW_wBANNER                    ((drw_pwd_flags) 0x80u)
#define DRW_wBARTEXT                   ((drw_pwd_flags) 0x100u)
#define DRW_NULLVAL                    ((drw_pwd_flags) 0x200u)
#define DRW__UNUSED_                   ((drw_pwd_flags) 0x400u)
#define DRW_OBJDONE                    ((drw_pwd_flags) 0x800u)
#define DRW_wICONISE                   ((drw_pwd_flags) 0x1000u)
#define DRW_wdesktopsave               ((drw_pwd_flags) 0x2000u)
#define DRW_doclosedown                ((drw_pwd_flags) 0x4000u)
#define DRW_Wdelete                    ((drw_pwd_flags) 0x8000u)
#define DRW_wColourdrag                ((drw_pwd_flags) 0x10000u)
#define DRW_caretselclaimed            ((drw_pwd_flags) 0x20000u)
#define DRW_clipbdclaimed              ((drw_pwd_flags) 0x40000u)
#define DRW_flex_in_use                ((drw_pwd_flags) 0x80000u)
#define DRW_flex_budge_state           ((drw_pwd_flags) 0x100000u)
#define DRW_flex_compact_state         ((drw_pwd_flags) 0x200000u)
#define DRW_finding_paste_data         ((drw_pwd_flags) 0x400000u)
#define DRW_keep_data_tfr              ((drw_pwd_flags) 0x800000u)
#define DRW_wToPrinter                 ((drw_pwd_flags) 0x1000000u)
#define DRW_DRAG_FINISHED              ((drw_pwd_flags) 0x2000000u)
#define DRW_DRAG_ABORTED               ((drw_pwd_flags) 0x4000000u)
#define DRW_CLAIMING_DRAG              ((drw_pwd_flags) 0x8000000u)
#define DRW_FORCE_NULLS                ((drw_pwd_flags) 0x10000000u)
#define DRW_APPMSGFILE_FOUND           ((drw_pwd_flags) 0x20000000u)
#define DRW_prtdirect                  ((drw_pwd_flags) 0x40000000u)
#define DRW_autoscrollfn               ((drw_pwd_flags) 0x80000000u)


#define DRW_banner_to_front            ((drw_pwd_wflags) 0x1u)
#define DRW_whm3_208                   ((drw_pwd_wflags) 0x2u)
#define DRW_banner_close_on_click      ((drw_pwd_wflags) 0x4u)
#define DRW_ask_already_in_use         ((drw_pwd_wflags) 0x8u)
#define DRW_task_is_initialised        ((drw_pwd_wflags) 0x10u)
#define DRW_call_u_mem_alloc_fn        ((drw_pwd_wflags) 0x20u)
#define DRW_app_is_waiting             ((drw_pwd_wflags) 0x40u)
#define DRW_is_preclose_window         ((drw_pwd_wflags) 0x80u)
#define DRW_drwibar_load_win           ((drw_pwd_wflags) 0x100u)
#define DRW_drwibar_load_for_hot_keys  ((drw_pwd_wflags) 0x200u)
#define DRW_check_appname_drwimpc      ((drw_pwd_wflags) 0x400u)
#define DRW_ignore_curr_app_name       ((drw_pwd_wflags) 0x800u)
#define DRW_delay_link_w_autofn        ((drw_pwd_wflags) 0x1000u)
#define DRW_is_rt_drwimpc              ((drw_pwd_wflags) 0x2000u)
#define DRW_suppress_lib_errmsgs       ((drw_pwd_wflags) 0x4000u)
#define DRW_stop_print_job             ((drw_pwd_wflags) 0x8000u)
#define DRW_include_lib_msg_instnum    ((drw_pwd_wflags) 0x10000u)
#define DRW_menu_pop_up_done           ((drw_pwd_wflags) 0x20000u)
#define DRW_use_drwimpc_for_scrap      ((drw_pwd_wflags) 0x40000u)
#define DRW_f1_key_pressed             ((drw_pwd_wflags) 0x80000u)
#define DRW_app_has_loaded_stronghelp  ((drw_pwd_wflags) 0x100000u)
#define DRW_WIMP_POLL_CALLED           ((drw_pwd_wflags) 0x200000u)
#define DRW_is_save_window             ((drw_pwd_wflags) 0x400000u)
#define DRW_user_mouse_click_done      ((drw_pwd_wflags) 0x800000u)
#define DRW_extedit_data_types_in_use  ((drw_pwd_wflags) 0x1000000u)
#define DRW_syslog_module_present      ((drw_pwd_wflags) 0x2000000u)
#define DRW_menu_no_reopen             ((drw_pwd_wflags) 0x4000000u)
#define DRW_no_delete_all_scrap        ((drw_pwd_wflags) 0x8000000u)
#define DRW_sending_data_save_msg      ((drw_pwd_wflags) 0x10000000u)


#define drw_unhandled_event_msg_no     0xffffffff


#define DRW_rele0                      0x0u
#define DRW_rele1                      0x1u
#define DRW_rele2                      0x2u
#define DRW_rele3                      0x3u
#define DRW_rele4                      0x4u


#define NORMAL_START               ((drw_misc_flags) 0x1u)
#define FROM_BOOT                  ((drw_misc_flags) 0x2u)
#define FROM_DESKFILE              ((drw_misc_flags) 0x4u)
#define ADD_BOOT_STR               ((drw_misc_flags) 0x8u)
#define REOPEN_TEMPLATE_FILE       ((drw_misc_flags) 0x10u)
#define DRW_AUTOFN_FN_DONE         ((drw_misc_flags) 0x20u)


#define DRW_DK_LSHIFT              ((drw_dk_flags) 0x1u)
#define DRW_DK_RSHIFT              ((drw_dk_flags) 0x2u)
#define DRW_DK_LCTRL               ((drw_dk_flags) 0x4u)
#define DRW_DK_RCTRL               ((drw_dk_flags) 0x8u)
#define DRW_DK_LALT                ((drw_dk_flags) 0x10u)
#define DRW_DK_RALT                ((drw_dk_flags) 0x20u)
#define DRW_DK_LLOGO               ((drw_dk_flags) 0x40u)
#define DRW_DK_RLOGO               ((drw_dk_flags) 0x80u)
#define DRW_DK_MENUKEY             ((drw_dk_flags) 0x100)
#define DRW_DK_PRESENT             ((drw_dk_flags) 0x8000)
#define DRW_DK_PHYS_KEY_MASK       ((drw_dk_flags) 0xFFFF0000u)

#define DRW_DK_PHYS_KEY_SHIFT      16

#define drw_is_ctl_key             26

#define DRW_NULLS_CV               0
#define DRW_ENABLE_NULLS           1
#define DRW_ENABLE_DISABLE_NULLS   2
#define DRW_ENABLE_NULLS_TEMP      3

#ifndef drw_choices_comment_ch
 #define drw_choices_comment_ch '#'
#endif

#ifndef drw_choices_separator_ch
 #define drw_choices_separator_ch ':'
#endif

#define drw_icon_keep_flag_ch     '*'
#define drw_icon_prefix_flag_ch   '+'

#define drw_icon_name_keep         ((drw_icon_name_flags) 0x1u)
#define drw_icon_name_prefix       ((drw_icon_name_flags) 0x2u)


#define DRW_CLIPBD_ASK_SAVE_SAVE   ((wimp_i) 0)
#define DRW_CLIPBD_ASK_SAVE_CANCEL ((wimp_i) 1)
#define DRW_CLIPBD_ASK_SAVE_Q      ((wimp_i) 2)

#define DRW_CLIPBD_SAVE_SAVE       ((wimp_i) 0)
#define DRW_CLIPBD_SAVE_DISCARD    ((wimp_i) 1)
#define DRW_CLIPBD_SAVE_FNAME_ICN  ((wimp_i) 2)
#define DRW_CLIPBD_SAVE_FTYPE_ICN  ((wimp_i) 3)

#define DRW_CLIPBD_DFLT_COPY_KEY   (0x43u)
#define DRW_CLIPBD_DFLT_PASTE_KEY  (0x56u)
#define DRW_CLIPBD_DFLT_CUT_KEY    (0x58u)
#define DRW_CLIPBD_DFLT_CLEAR_KEY  (0x5Au)

#define DRW_CLIPBD_PASTE           (0x0u)
#define DRW_CLIPBD_COPY            (0x1u)
#define DRW_CLIPBD_CUT             (0x2u)
#define DRW_CLIPBD_CLEAR           (0x3u)

#define DRW_EXT_EDIT_JH_METHOD      1
#define DRW_OLE_SESSION_ID_METHOD   2

#define DRW_DEF_DRAG_DELAY          10

#define drw_def_num_dir_entries     20

#define drw_scandir_tbuff           0
#define drw_loadfile_tbuff          1
#define drw_liblist_tbuff           2
#define drw_stdwkbuff_tbuff         3
#define drw_workvar_tbuff           4
#define drw_wmsgout_tbuff           5
#define drw_defformobj_tbuff        6
#define drw_sysvar_tbuff            7


#define drw_std_ok_icn_no           ((wimp_i) 0)
#define drw_std_cancel_icn_no       ((wimp_i) 1)

#define drw_dcs_def_msg_icn_no      ((wimp_i) 3)
#define drw_dcs_def_save_icn_no     ((wimp_i) 0)
#define drw_dcs_def_cancel_icn_no   ((wimp_i) 1)
#define drw_dcs_def_discard_icn_no  ((wimp_i) 2)

#define drw_info_def_name_icn_no    ((wimp_i) 0)
#define drw_info_def_purpose_icn_no ((wimp_i) 1)
#define drw_info_def_author_icn_no  ((wimp_i) 2)
#define drw_info_def_version_icn_no ((wimp_i) 3)
#define drw_info_def_website_icn_no ((wimp_i) 4)

#define drw_savebox_def_drag_icn    ((wimp_i) 0)
#define drw_savebox_def_write_icn   ((wimp_i) 1)
#define drw_savebox_def_ok_icn      ((wimp_i) 2)


#define drw_def_bar_menu_size       3

typedef enum {

drw_choices_read = 1,
drw_choices_write = 2,
drw_user_choices_read = 3,
drw_user_choices_write = 4

} drw_choices_file_type;


#define drw_num_uwd_values          24


#define drw_use_tname               (drw_res_obj_search_flags) 0x1u
#define drw_use_tno                 (drw_res_obj_search_flags) 0x2u
#define drw_use_default             (drw_res_obj_search_flags) 0x4u
#define drw_is_full_path            (drw_res_obj_search_flags) 0x8u
#define drw_use_appdirname          (drw_res_obj_search_flags) 0x10u
#define drw_use_obey_dir            (drw_res_obj_search_flags) 0x20u
#define drw_try_app_path_name       (drw_res_obj_search_flags) 0x40u
#define drw_get_res_filename_only   (drw_res_obj_search_flags) 0x80u
#define drw_res_file_found          ((drw_res_obj_search_flags) 0x100u)
#define drw_res_file_default_found  ((drw_res_obj_search_flags) 0x200u)
#define drw_res_dir_found           ((drw_res_obj_search_flags) 0x400u)
#define drw_res_defaults_used       ((drw_res_obj_search_flags) 0x800u)
#define drw_use_default_name        ((drw_res_obj_search_flags) 0x1000u)
#define drw_res_is_ext_tplte        ((drw_res_obj_search_flags) 0x2000u)
#define drw_res_is_vsn_dir          ((drw_res_obj_search_flags) 0x4000u)
#define drw_res_cr_vsn_dir_if_nf    ((drw_res_obj_search_flags) 0x8000u)
#define drw_res_cr_tfname_if_nf     ((drw_res_obj_search_flags) 0x10000u)
#define drw_res_cr_tnoname_if_nf    ((drw_res_obj_search_flags) 0x20000u)
#define drw_res_tfname_exists       ((drw_res_obj_search_flags) 0x40000u)
#define drw_res_tnoname_exists      ((drw_res_obj_search_flags) 0x80000u)
#define drw_res_rtn_tfnamef_if_nf   ((drw_res_obj_search_flags) 0x100000u)
#define drw_res_rtn_tnonamef_if_nf  ((drw_res_obj_search_flags) 0x200000u)


#define drw_def_territory_dir_entries  5


#define DRW_NO_WINDOW_TYPE          0
#define DRW_MAIN_WINDOW             256
#define DRW_INFO_BOX                257
#define DRW_BACK_WINDOW             1
#define DRW_SAVE_WINDOW             2
#define DRW_DCS_BOX                 3
#define DRW_CLIPBD_ASK_SAVE_W       4
#define DRW_CLIPBD_SAVE_W           5


#define drw_acorn_leafname_len      255

#define drw_scan_dir_wkbuffno       0
#define drw_temp_fname_buffno       -1
#define drw_temp_fname_buffno_2     -2
#define drw_temp_iconname_buffno    -3
#define drw_temp_iconvaln_buffno    -4
#define drw_temp_wkbuff2            -5


typedef void (*drw_scan_dir_fn2)(void *appdataptr);
typedef void (*drw_scan_dir_fn3)(void *appdataptr,
                                 void *info,
                                 drwGP scandata); /* Or any other appn data. */

typedef int (*drw_scan_dir_fn1)(void *scaninfo,
                                int scantype,
                                drwGP scandata,
                                void *userfndata,
                                drw_scan_dir_fn2 appscandirfn1,
                                drw_scan_dir_fn3 appscandirfn2);


struct wkspace {

int nextfree;
int currsize;
byte *iwkspace;
int memtype;

};


struct msghandlestr {

char *msghandle;
char *buffer;
size_t size;

};


struct drw_deep_key {

wimp_w w;
wimp_i i;
os_coord pos;
int height;
int index;
wimp_key_no c;
drw_dk_flags flags;

};


struct drw_tbuff_data {

int tbuffno;
drwGP tbuff;
int tbuffsize;
drwGP ntbuff;

};


typedef bits drw_gen_menu_str_flags;

#define drw_menu_load_local            ((drw_gen_menu_str_flags) 0x1u)
#define drw_skip_shortcut_menu_links   ((drw_gen_menu_str_flags) 0x2u)
#define drw_mcol_file_loaded           ((drw_gen_menu_str_flags) 0x4u)

struct drw_menu_col_data {

char menuname[drw_menu_name_size];
int itemno;
drw_uw_flags2 flags2;
wimp_colour menufgcol;
wimp_colour menubgcol;
wimp_colour menutfgcol;
wimp_colour menutbgcol;

};


struct drw_gen_menu_str {

char appname[drw_appname_len];
msghandlestr msgfile; /* For AllItems msg file. */
msghandlestr mlmsgfile; /* For the MenuLinks msg file. */
msghandlestr ichpmsgfile; /* For Icon Help msg file. */
drw_gen_menu_str_flags flags;
drw_ll_hdr *menulist;
drw_ll_hdr *unusedmenulist;
drw_ll_hdr *menulinks;
drw_ll_hdr *unusedmenulinks;
wimp_menu *intmenu;
char *appdir;
drw_ll_hdr mcollist;
drw_menu_col_data mcols;

};


typedef enum  {

drw_menu_fg_colno = 0,
drw_menu_bg_colno = 1,
drw_menu_tfg_colno = 2,
drw_menu_tbg_colno = 3,
drw_num_menu_colours = 4

} drwimpc_menu_colours;


struct drw_spr_area_details {

char extpathname[drw_appname_len];
char template_leaf_name[drw_tfile_name_size];
char sprfileleafname[wimp_TEMPLATE_NAME_LIMIT];
osspriteop_area *spr;

};


#define drw_uw_appres_dirname_size 12
#define drw_uw_appres_pfx_name_size 12
#define drw_uw_ibar_menutok_name_size 12
#define drw_uw_std_tplte_names_name_size 16
#define drw_uw_ibar_icon_text_size 16

#define drw_mainwinopen              ((drw_uw_flags) 0x1u)
#define drw_setupmainwin             ((drw_uw_flags) 0x2u)
#define drw_hasibaricon              ((drw_uw_flags) 0x4u)
#define drw_ibariconlhs              ((drw_uw_flags) 0x8u)
#define drw_hasbarmenu               ((drw_uw_flags) 0x10u)
#define drw_stdbarmenuitems          ((drw_uw_flags) 0x20u)
#define drw_setupinfobox             ((drw_uw_flags) 0x40u)
#define drw_setupinfofields          ((drw_uw_flags) 0x80u)
#define drw_stdinfobox               ((drw_uw_flags) 0x100u)
#define drw_attachinfobox            ((drw_uw_flags) 0x200u)
#define drw_setupsavebox             ((drw_uw_flags) 0x400u)
#define drw_stdsavebox               ((drw_uw_flags) 0x800u)
#define drw_useterrname              ((drw_uw_flags) 0x1000u)
#define drw_useterrno                ((drw_uw_flags) 0x2000u)
#define drw_appnameisreg             ((drw_uw_flags) 0x4000u)
#define drw_noopenappmsgfile         ((drw_uw_flags) 0x8000u)
#define drw_nolibmsgfile             ((drw_uw_flags) 0x10000u)
#define drw_do_squeeze               ((drw_uw_flags) 0x20000u)
#define drw_uwd_defined              ((drw_uw_flags) 0x40000u)
#define drw_def_compiler_cc          ((drw_uw_flags) 0x80000u)
#define drw_def_compiler_gcc         ((drw_uw_flags) 0x100000u)
#define drw_def_linker_link          ((drw_uw_flags) 0x200000u)
#define drw_def_linker_drlink        ((drw_uw_flags) 0x400000u)
#define drw_def_libfile_castle       ((drw_uw_flags) 0x800000u)
#define drw_def_libfile_gnu          ((drw_uw_flags) 0x1000000u)
#define drw_def_make_castle          ((drw_uw_flags) 0x2000000u)
#define drw_def_make_gnu             ((drw_uw_flags) 0x4000000u)
#define drw_merge_appn_sprites       ((drw_uw_flags) 0x8000000u)
#define drw_force_build_appn         ((drw_uw_flags) 0x10000000u)
#define drw_run_from_task_window     ((drw_uw_flags) 0x20000000u)
#define drw_has_dc_defaults_file     ((drw_uw_flags) 0x40000000u)
#define drw_use_scl                  ((drw_uw_flags) 0x80000000u)


#define drw_elf_fmt                  ((drw_uw_flags2) 0x1u)
#define drw_lib_shared               ((drw_uw_flags2) 0x2u)
#define drw_is_runtime               ((drw_uw_flags2) 0x4u)
#define drw_is_local_app             ((drw_uw_flags2) 0x8u)
#define drw_loaded_in_app_builder    ((drw_uw_flags2) 0x10u)
#define drw_has_cc_defaults_file     ((drw_uw_flags2) 0x20u)
#define drw_main_win_open_sel        ((drw_uw_flags2) 0x40u)
#define drw_main_win_open_adj        ((drw_uw_flags2) 0x80u)
#define drw_app_is_being_loaded      ((drw_uw_flags2) 0x100u)
#define drw_openw_lib_debug_file     ((drw_uw_flags2) 0x200u)
#define drw_write_stup_debug_info    ((drw_uw_flags2) 0x400u)
#define drw_write_lib_debug_info     ((drw_uw_flags2) 0x800u)
#define drw_stop_stup_debug_info     ((drw_uw_flags2) 0x1000u)
#define drw_stop_lib_debug_info      ((drw_uw_flags2) 0x2000u)
#define drw_close_lib_debug_file     ((drw_uw_flags2) 0x4000u)
#define drw_opena_lib_debug_file     ((drw_uw_flags2) 0x8000u)
#define drw_claim_unhandled_events   ((drw_uw_flags2) 0x10000u)
#define drw_user_has_acknowledged_dl ((drw_uw_flags2) 0x20000u)
#define drw_mem_do_heap_checks       ((drw_uw_flags2) 0x40000u)
#define drw_syslog_log_mem_reports   ((drw_uw_flags2) 0x80000u)
#define drw_syslog_log_mem_err_rep   ((drw_uw_flags2) 0x100000u)
#define drw_reload_mcol_file         ((drw_uw_flags2) 0x200000u)
#define drw_process_shift_f1_key     ((drw_uw_flags2) 0x400000u)
#define drw_process_ctrl_f1_key      ((drw_uw_flags2) 0x800000u)
#define drw_shift_fn_key_pressed     ((drw_uw_flags2) 0x1000000u)
#define drw_ctrl_fn_key_pressed      ((drw_uw_flags2) 0x2000000u)


#define drwimpc_default_somexpire 0

typedef enum {

drwimpc_memforwimpblock = 1,
drwimpc_appresdir = 2,
drwimpc_maxobjsize = 3,
drwimpc_appresdirprefix = 4,
drwimpc_nolongerused1 = 5,
drwimpc_savedesktopflag = 6,
drwimpc_wimp_version = 7,
drwimpc_appn_syntax_str = 8,
drwimpc_has_ibaricon = 9,
drwimpc_ibar_leftside = 10,
drwimpc_ibartext = 11,

drwimpc_ibarmaxlen = 12,

drwimpc_use_terrname = 13,
drwimpc_use_terrno = 14,
drwimpc_open_appmsgs = 15,
drwimpc_use_libmsgfile = 16,
drwimpc_editor_delay = 17,
drwimpc_datahandle = 18,
drwimpc_edit_retries = 19,
drwimpc_ole_retries = 20,
drwimpc_force_build_appn = 21,

drwimpc_num_fntypes = 22,

drwimpc_is_runtime = 23,
drwimpc_is_local = 24,
drwimpc_som_expire = 25,
drwimpc_rsvd_def4 = 26,
drwimpc_rsvd_def5 = 27,
drwimpc_appdirname = 28,
drwimpc_endofdefaults = 29

} drwimpc_dc_defaults_item_nos;


typedef enum {

drwimpc_def_compiler_cc = 1,
drwimpc_def_compiler_gcc = 2,
drwimpc_def_linker_link = 3,
drwimpc_def_linker_drlink = 4,
drwimpc_def_libfile_castle = 5,
drwimpc_def_libfile_gnu = 6,
drwimpc_def_make_castle = 7,
drwimpc_def_make_gnu = 8,
drwimpc_cflags_cc = 9,
drwimpc_warnings_cc = 10,
drwimpc_cflags_gcc = 11,
drwimpc_warnings_gcc = 12,
drwimpc_link_flags_link = 13,
drwimpc_link_flags_drlink = 14,
drwimpc_libfile_flags_castle = 15,
drwimpc_libfile_flags_gnu = 16,

drwimpc_do_squeeze_flag = 17,
drwimpc_squeeze_flags = 18,

drwimpc_use_scl = 19,
drwimpc_elf_fmt = 20,
drwimpc_shared_libs = 21,


} drwimpc_cc_defaults_item_nos;


struct drw_uw_data {

wimp_w barwin;
wimp_w barwinstack;
wimp_w info;
wimp_w savebox;
wimp_i baric;
wimp_menu *barmenu;
wimp_menu *mainmenu;
size_t memforwimpblock;
char appresdir[drw_uw_appres_dirname_size];
size_t maxobjsize;
char appresdirprefix[drw_uw_appres_pfx_name_size];
int savedesktopflag;
wimp_version_no version_in;
char *appsyntax;
char ibartext[drw_wincode_name_size];
int ibarmaxlen;
char *ibarmenutitle;
char ibarmenutok[drw_uw_ibar_menutok_name_size];
char *ibarmfile;
int barmenusize;
wimp_colour barmenufgcol;
wimp_colour barmenubgcol;
wimp_colour barmenutfgcol;
wimp_colour barmenutbgcol;
char mainwinname[wimp_TEMPLATE_NAME_LIMIT + 1];
char infoboxname[wimp_TEMPLATE_NAME_LIMIT + 1];
char saveboxname[wimp_TEMPLATE_NAME_LIMIT + 1];
char templatemain[drw_uw_std_tplte_names_name_size];
char templateinfo[drw_uw_std_tplte_names_name_size];
char templatesave[drw_uw_std_tplte_names_name_size];
drw_visible_window_posn mainwinpos;
wimp_i info_name;
wimp_i info_purpose;
wimp_i info_author;
wimp_i info_version;
wimp_i info_website;
wimp_i save_fileiconno;
wimp_i save_filenameiconno;
wimp_i save_ok_iconno;
drw_uw_flags flags;
drw_uw_flags2 flags2;
char appdirname[drw_appname_len];
void *appdata;
wimp_message_list *messages;
int waitforeditor;
char *datahandle;
void *localconv;
char *ccflags;
char *gccflags;
char *ccwarnings;
char *gccwarnings;
char *linkflags;
char *drlinkflags;
char *libfileflags;
char *gnulibfileflags;
char *squeezeflags;
osspriteop_area *mainwsprites;
territory_t tno;
char *mwsprfile;
void *mainwdata;
int argc;
char **argv;
int numfntypes;
char *fullappdirname;
int extedit_retry_limit;
int ole_retry_limit;
drw_ll_hdr resvsns;
char thisvsnstr[drw_version_str_size];
int somexpire;

};


/*typedef bits drw_tempwimpblock_flags;

#define drw_tempwimpblock_in_use        ((drw_tempwimpblock_flags) 0x1u)
#define drw_tempwimpblock_winfo_found   ((drw_tempwimpblock_flags) 0x2u)

struct drw_tempwimp_block {

wimp_w whan;
drw_tempwimpblock_flags flags;
byte *tempwimpb;
int tempwimpblocksize;
wimp_window_info *winfo;
wimp_window *wnd;
int numicons;

};*/


#define drw_num_menu_seln            21
#define drw_error_fname_size         ((size_t) 200)


struct drw_wimp_data {

byte *wimpb;
wimp_block *wb;
int wimpblocksize;
byte *tempwimpb;
/*drw_ll_hdr tempwimpb;*/
int tempwimpblocksize;
wimp_poll_flags mask;
os_error *oserr;
os_error drwwerr;
drw_pwd_flags flags;
drw_pwd_wflags wflags;
unsigned int releasingentity;
void *mylconv;
byte fontcounts[drw_font_count_array_size];
byte tempfontcounts[drw_font_count_array_size];
char currtemplatefilename[drw_template_filename_size];
char wstartupoption[drw_template_filename_size];
int wcurrosver;
wimp_version_no wcurrwimpversion;
osword_block oswdblk;
wimp_t wtask;
char *wappname;
char *wapppurpose;
char *wappauthor;
char *wappver;
char noname[4];
wimp_t lastsender;
wimp_t wquitsender;
double ftodratio;
double dtofratio;
byte wsprcoltrans[drw_wsprcoltrans_blk_size];
byte wcolourblock[drw_wcolour_blk_size];
int wdfn[drw_draw_data_size_2];
char *wdf[drw_draw_data_size_2];
int wdflen;
wimp_w wbanner;
wimp_i wIbarhan;
int wMaxlen;
char *wIbarSprite;
char *wIbarSprtxt;
os_t wDelaymax;
os_t wDragScrollDelay;
wimp_w wSaveClipbd;
wimp_w wSavedrag;
wimp_w wSelndrag;
wimp_w wDclaimw;
wimp_w wRbanddrag;
wimp_w wPointdrag;
wimp_w wSlidedrag;
wimp_w wSavew;
char wsavet[DRW_FTYPE_STR_SIZE_ALIGNED];
wimp_w wSlidew;
wimp_i wSlidei;
int wslidedirn;
wimp_w wIcondrag;
wimp_w wIconw;
wimp_i wIconi;
wimp_mouse_state wDragbutton;
os_box rel;
int wStartx;
int wStarty;
int wox;
int woy;
int wlen;
int wlen2;
int wswid;
int wshei;
int forcednullscount;
wimp_w wFocus;
wimp_w wActive;
int selncount;
void *selndata;
void *draggingselndata;
os_t dragdelay;
wimp_t dragclaimant;
int dragclaimref;
wimp_caret ghostcaret;
wimp_drag drag;
wimp_dragging_flags draggingflags;
wimp_drag_claim_flags dragclaimflags;
wimp_w wAscrhw;
wimp_w wlistw;
int wmaxdynamicareas;
drw_da_str wdynamicarea[wdynamicnum + 1];
char drwchecktext[4];
wkspace iconwkspace;
byte wTempblk[drw_min_wimp_blk_size];
byte wTempblk2[drw_min_wimp_blk_size];
char drw_draw_font_names[drw_draw_font_names_size];
wimp_window defwdefn;
wimp_icon_create defwic;
int wdynamics;
int mempagesize;
int numpages;
drw_quit_flags drwqtype;
wimp_w wMenuwhan;
wimp_i wMenuicon;
wimp_pointer wptr;
int uftype;
size_t maxobjsize;
char *stdwkbuffer;
char *workvar;
char *wdesktopsavestr;
char *wenvstr;
drw_misc_flags wmiscflags;
wimp_menu *wsubmenu;
int menudepth;
wimp_menu *menupath[drw_num_menu_seln];
wimp_menu *wLastmenu;
wimp_menu *lastsubmenu;
int menuitems[drw_num_menu_seln];
char *wmessageout;
drw_uw_data *uwd;
double drwpi;
msghandlestr appmsgs;
int witem;
os_fw wprnt;
colourpicker_d wpickerhandle;
wimp_w wPickerwindow;
int wdirbuffer;
wimp_menu *wFONTMENU;
byte *wFontInd;
wimp_menu *wheldmenu;
int wfontmenulen;
int wfontmenudepth;
int wReopened;
int *wmenutree;
char *wPrintFile;
bits wPrintFileType;
int numtbuff;
drw_tbuff_data *tbufflist;
drw_lwd_endofdrag_fn Lwddrag;
void *Lwddata;
wimp_w exddcsbox;
drw_fn_ptr_str *ufnptr;
drw_uw_data *currappuwd;
drw_active_object_data *activeobj;
drw_ll_hdr appnlist;
drw_ll_hdr autofntfiles;
drw_ll_hdr autofnwinstances;
int ntextappid;
wimp_w dragobjwhan;
int dragobjectid;
drw_ll_hdr objectdata;
wimp_i curricon;
void *mainwindata;
drw_autofn_wname_data *currwnamedata;
drw_autofn_whan_data *actualwhdata;
drw_ll_hdr rtmenucol;
drw_menu_defn_data *currthismenu;
int menulevel;
drw_application_data *appn;
wimp_w drwibarwin;
drw_autofn_whan_data *drwibarwhdata;
char currappname[drw_appname_len];
int currappid;
char *currapppath;
drw_shortcut_key_data *drwimpcscut;
char scut_mods_and_str[drw_modifiers_str_size + drw_key_str_size + 1];
wimp_w lastclickwhan;
int pollword;
os_error *dtferror;
char errorfname[drw_error_fname_size + 4];
char errorfname2[drw_error_fname_size + 4];
int scanobjectfound;
char objftype[drw_obj_ftype_len + 1];
bits scanfiletype;

};


#define drw_SYMLINK_MEMBERS \
  char linkval[4]; \
  char lendata[sizeof(size_t)];

struct drw_symlink_data_base {

drw_SYMLINK_MEMBERS

};

struct drw_symlink_data {

drw_SYMLINK_MEMBERS
char namebuff[UNKNOWN];

};

#define drw_SYMLINK(N) \
   struct \
      { drw_SYMLINK_MEMBERS \
        char namebuff[N]; \
      }

#define drw_SIZEOF_SYMLINK(N) \
   (offsetof (drw_symlink_data, namebuff) + \
         (N)*sizeof ((drw_symlink_data *) NULL)->namebuff)


typedef enum {

drw_use_error_fname_1 = 1,
drw_use_error_fname_2 = 2,
drw_use_fopen_filename = 3

} drw_error_fname_locations;


typedef int (*drw_ulib_init_fn)(void);
typedef void (*drw_utpltes_register_fn)(void);
typedef void (*drw_usetappname_fn)(char *namebuff);
typedef void (*drw_setuwdata_fn)(drw_uw_data *uwdata);

#if defined NAMESPACE_DRWIMPC
  }
#endif

#ifndef drwlibmsgh_H
 #include "DRW/drwlibmsgh.h"
#endif

#endif

/* End of drwwh definitions. */

