/* main.c */

#include "stats.h"

/* static data */

static int messages [] = {0};    /* all messages */
static int tbcodes [] = {0};     /* all Toolbox events */

static Bool quit = FALSE;

/* the toolbox id block */

static IdBlock idblk;
static WimpPollBlock pblock;



static Bool proginfo_show
(
    int code,                 /* event code [ProgInfo_AboutToBeShown] */
    ToolboxEvent *event,      /* Toolbox event block */
    IdBlock *idblock,         /* Toolbox Id block */
    void  *handle             /* user handle [0] */
)
{
    IGNORE(handle);
    IGNORE(event);
    IGNORE(code);
                          
    proginfo_set_version
    (
        0,                          /* flags */
        idblock->self_id,           /* object ID */
        message_lookup("Version")     /* version string */
    );

    return TRUE;
}


static Bool tbquit_handler
(
    int code,
    ToolboxEvent *event,
    IdBlock *idblock,
    void  *handle
)
{
    IGNORE(event);
    IGNORE(code);
    IGNORE(handle);
    IGNORE(idblock);

    quit = TRUE;
    return TRUE;
}


static Bool quit_handler (WimpMessage *message, void *handle)
{
    IGNORE (message);
    IGNORE (handle);

    quit = TRUE;
    return TRUE;
}


/*
 * Initialise the task (we use toolbox_initialise instead of wimp_initialise)
 * and register any events handlers.
 */

static error * app_init (void)
{
    /* initialise as a toolbox task */
    ER ( toolbox_initialise
         (
          /* IN */
             0,              /* flags */
             310,            /* earliest permissible WIMP version */
             messages,       /* list of interesting messages */
             tbcodes,        /* list of interesting Toolbox event codes */
             "<stats$dir>",  /* name of directory containing resources */
             &mbl,           /* for the Messages file descriptor */
             &idblk,         /* address of toolbox id block */
          /* OUT */
             NULL,           /* current Wimp version */
             NULL,           /* task handle */
             NULL            /* sprite area */
         ) );
                          
    /* initialise event lib */
    ER ( event_initialise (&idblk) );
    
    /* register message and event handlers */

    /* "Quit" message from Wimp */
    ER ( event_register_message_handler
         (
             Wimp_MQuit,     /* the Wimp Message */
             quit_handler,   /* the handler function for it */
             NULL            /* and a handle */
         ) );

    /* User chooses "Quit" entry from iconbar menu */
    ER ( event_register_toolbox_handler
         (
             -1,             /* for all objects */
             Event_Quit,     /* toolbox event code */
             tbquit_handler, /* the handler function for it */
             NULL            /* and a handle */
         ) );

    /* "ProgInfo" object is about to be shown */
    ER ( event_register_toolbox_handler
         (
             -1,
             ProgInfo_AboutToBeShown,
             proginfo_show,
             NULL
         ) );

    /* "Setup" object about to be shown */
    ER ( event_register_toolbox_handler
         (
             -1,
             Event_Setup,
             setup_abouttobeshown,
             NULL
         ) );

    /* Click on DEFAULT in Setup dbox */
    ER ( event_register_toolbox_handler
         (
             -1,
             Event_Setup_Default,
             setup_default,
             NULL
         ) );

    /* Click on SAVE in Setup dbox */
    ER ( event_register_toolbox_handler
         (
             -1,
             Event_Setup_Save,
             setup_save,
             NULL
         ) );

    /* Click on CANCEL in Setup dbox */
    ER ( event_register_toolbox_handler
         (
             -1,
             Event_Setup_Cancel,
             setup_cancel,
             NULL
         ) );

    /* Click on GO in Setup dbox */
    ER ( event_register_toolbox_handler
         (
             -1,
             Event_Setup_Go,
             setup_go,
             NULL
         ) );

    /* Choosing "Pause" entry from Scan menu */
    ER ( event_register_toolbox_handler
         (
             -1,
             Event_Pause,
             scan_pauseresume,
             NULL
         ) );

    /* Click on Close icon of Scan dbox */
    ER ( event_register_toolbox_handler
         (
             -1,
             Event_Scan_Cancel,
             scan_cancel,
             NULL
         ) );

    /* NULL event - only enabled whilst scanning is in progress */
    ER ( event_register_wimp_handler
         (
             -1,
             0,                /* Null_Reason_Code */
             scan_null,
             NULL
         ) );

    /* Scan menu about to be shown */
    ER ( event_register_toolbox_handler
         (
             -1,
             Event_Scan_Menu,
             scan_init_menu,
             NULL
         ) );

    /* Choosing "Display" entry from Scan menu */
    ER ( event_register_toolbox_handler
         (
             -1,
             Event_Display,
             scan_toggle_display,
             NULL
         ) );

    /* Centisecs dbox about to be shown, or click CANCEL on Centisecs dbox */
    ER ( event_register_toolbox_handler
         (
             -1,
             Event_Centisecs,
             scan_fill_in_timeslice,
             NULL
         ) );

    /* Click SET on Centisecs dbox */
    ER ( event_register_toolbox_handler
         (
             -1,
             Event_Centisecs_Set,
             scan_set_timeslice,
             NULL
         ) );

    /* DispOpts dbox about to be shown, or click CANCEL on DispOpts dbox */
    ER ( event_register_toolbox_handler
         (
             -1,
             Event_DispOpts,
             scan_fill_in_display_options,
             NULL
         ) );

    /* Click SET on DispOpts dbox */
    ER ( event_register_toolbox_handler
         (
             -1,
             Event_DispOpts_Set,
             scan_set_display_options,
             NULL
         ) );

    /* Moving across Save=>Text=> */
    ER ( event_register_toolbox_handler
         (
             -1,
             Event_Save_Text,
             scan_note_text_save,
             NULL
         ) );

    /* Moving across Save=>CSV=> */
    ER ( event_register_toolbox_handler
         (
             -1,
             Event_Save_CSV,
             scan_note_CSV_save,
             NULL
         ) );

    /* About to display Save box */
    ER ( event_register_toolbox_handler
         (
             -1,
             SaveAs_AboutToBeShown,
             scan_prepare_save,
             NULL
         ) );

    /* Save box just hidden */
    ER ( event_register_toolbox_handler
         (
             -1,
             SaveAs_DialogueCompleted,
             scan_save_over,
             NULL
         ) );

    return NULL;
}                                                              


int main (int argc, char *argv[])
{
    int code;

    /* set up debug output if DEBUG is set */
    debug_file("<stats$dir>.logfile");
                     
    EE ( app_init() );

    /* disable NULL events */
    event_set_mask (1);

    while (!quit)
       ED ( event_poll
            (
                &code,      /* event code */
                &pblock,    /* Wimp poll block */
                NULL        /* address of poll word (if necessary) */
            ) );

    exit (0);
}
