/*
 *  mon_ctrl.h - Part of AFD, an automatic file distribution program.
 *  Copyright (c) 1998 - 2022 Holger Kiehl <Holger.Kiehl@dwd.de>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#ifndef __mon_ctrl_h
#define __mon_ctrl_h

#include "motif_common_defs.h"
#include "mondefs.h"

#define BAR_LENGTH_MODIFIER            7
#define DEFAULT_NO_OF_ROWS             50

/* Definitions for the menu bar items. */
#define MON_W                          0
#define LOG_W                          1
#define CONTROL_W                      2
#define CONFIG_W                       3
#define HELP_W                         4

/* Definitions for Monitor pulldown. */
#define MON_SYS_LOG_W                  0
#define MON_LOG_W                      1
#define MON_RETRY_W                    2
#define MON_SWITCH_W                   3
#define MON_SELECT_W                   4
#define MON_DISABLE_W                  5
#define MON_TEST_W                     6
#define MON_INFO_W                     7
#define MON_EXIT_W                     8

/* Definitions for View pulldown. */
#define MON_AFD_CTRL_W                 0
#define MON_SYSTEM_W                   1
#define MON_EVENT_W                    2
#define MON_RECEIVE_W                  3
#define MON_TRANS_W                    4
#define MON_INPUT_W                    5
#define MON_PRODUCTION_W               6
#define MON_OUTPUT_W                   7
#define MON_DELETE_W                   8
#define MON_SHOW_QUEUE_W               9
#define MON_VIEW_LOAD_W                10

/* Definitions for Control pulldown. */
#define AMG_CTRL_W                     0
#define FD_CTRL_W                      1
#define RR_DC_W                        2
#define RR_HC_W                        3
#define EDIT_HC_W                      4
#define DIR_CTRL_W                     5
#define STARTUP_AFD_W                  6
#define SHUTDOWN_AFD_W                 7

/* Definitions of popup selections. */
#define MON_SYS_LOG_SEL                40
#define MON_LOG_SEL                    41
#define MON_INFO_SEL                   42
#define MON_RETRY_SEL                  43
#define MON_SWITCH_SEL                 44
#define MON_DISABLE_SEL                45
/* NOTE: Since some of these are used by more then one */
/*       program each may define only a certain range: */
/*         mafd_ctrl.h       0 - 39                    */
/*         mon_ctrl.h       40 - 69                    */
/*         dir_ctrl.h       70 - 99                    */
/*         x_common_defs.h 100 onwards.                */

/* Definitions for the Setup pulldown. */
#define MON_FONT_W                     0
#define MON_ROWS_W                     1
#define MON_STYLE_W                    2
#define MON_HISTORY_W                  3
#define MON_OTHER_W                    4
#define MON_OPEN_ALL_GROUPS_W          5
#define MON_CLOSE_ALL_GROUPS_W         6
#define MON_SAVE_W                     7

/* History length definitions. */
#define HIS_0                          "0"
#define HIS_1                          "6"
#define HIS_2                          "12"
#define HIS_3                          "18"
#define HIS_4                          "24"
#define HIS_5                          "30"
#define HIS_6                          "36"
#define HIS_7                          "42"
#define HIS_8                          "48"
#define NO_OF_HISTORY_LOGS             9

/* Log types. */
#define MON_LOG                        0
#define SYS_LOG                        1

/* History types. */
#define RECEIVE_HISTORY                0
#define SYSTEM_HISTORY                 1
#define TRANSFER_HISTORY               2

/* Character types. */
#define FILES_TO_BE_SEND               0
#define FILE_SIZE_TO_BE_SEND           1
#define AVERAGE_TRANSFER_RATE          2
#define AVERAGE_CONNECTION_RATE        3
#define TOTAL_ERROR_COUNTER            4
#define JOBS_IN_QUEUE                  5
#define ACTIVE_TRANSFERS               6
#define ERROR_HOSTS                    7

/* Bar types. */
#define MON_TR_BAR_NO                  0
#define ACTIVE_TRANSFERS_BAR_NO        1
#define HOST_ERROR_BAR_NO              2

/* Log indicators (bit mapped). */
#define MON_SYS_LOG_INDICATOR          0
#define MON_LOG_INDICATOR              1

struct mon_line 
       {
          char           afd_alias[MAX_AFDNAME_LENGTH + 1];
          char           afd_display_str[MAX_AFDNAME_LENGTH + 2];
          char           str_fc[5];
          char           str_fs[5];
          char           str_tr[5];
          char           str_fr[4];
          char           str_ec[3];
          char           str_jq[4];
          char           str_at[4];
          char           str_hec[3];
          char           sys_log_fifo[LOG_FIFO_SIZE + 1];
          char           log_history[NO_OF_LOG_HISTORY][MAX_LOG_HISTORY];
          char           amg;
          char           fd;
          signed char    blink_flag;
          signed char    blink;
          char           archive_watch;
          char           rcmd;
          char           plus_minus;
          int            jobs_in_queue;
          long           danger_no_of_jobs;
          long           link_max;
          int            no_of_transfers;
          int            host_error_counter;
          int            no_of_hosts;
          int            max_connections;
          size_t         afd_alias_length;
          unsigned int   sys_log_ec;
          unsigned int   fc;
          u_off_t        fs;
          u_off_t        tr;
          unsigned int   fr;
          unsigned int   ec;
          time_t         last_data_time;
          char           connect_status;
          float          scale[2];
          double         average_tr;         /* Average transfer rate.   */
          double         max_average_tr;     /* Max transfer rate.       */
          unsigned int   bar_length[3];
          unsigned short green_color_offset;
          unsigned short blue_color_offset;
          unsigned char  inverse;
          char           afd_toggle;
       };
      
/* Structure that holds the permissions. */
struct mon_control_perm
       {
          char        **mon_ctrl_list;
          char        **retry_list;
          char        **switch_list;
          char        **disable_list;
          char        **afd_ctrl_list;
          char        **show_slog_list;
          char        **show_elog_list;
          char        **show_rlog_list;
          char        **show_tlog_list;
          char        **show_mm_log_list;
          char        **show_ilog_list;
          char        **show_plog_list;
          char        **show_olog_list;
          char        **show_dlog_list;
          char        **afd_load_list;
          char        **edit_hc_list;
          signed char show_ms_log;           /* Show Monitor System Log  */
          signed char show_mon_log;          /* Show Monitor Log         */
          signed char amg_ctrl;              /* Start/Stop the AMG       */
          signed char fd_ctrl;               /* Start/Stop the FD        */
          signed char rr_dc;                 /* Reread DIR_CONFIG        */
          signed char rr_hc;                 /* Reread HOST_CONFIG       */
          signed char startup_afd;           /* Startup AFD              */
          signed char shutdown_afd;          /* Shutdown AFD             */
          signed char mon_info;              /* Info about AFD           */
          signed char retry;                 /* Retry connecting to AFD  */
          signed char switch_afd;            /* Switch AFD               */
          signed char disable;               /* Enable/Disable AFD       */
          signed char afd_ctrl;              /* Show AFD Control Dialog  */
          signed char show_slog;             /* Show System Log          */
          signed char show_elog;             /* Show Event Log           */
          signed char show_rlog;             /* Show Receive Log         */
          signed char show_tlog;             /* Show Transfer Log        */
          signed char show_ilog;             /* Show Input Log           */
          signed char show_plog;             /* Show Production Log      */
          signed char show_olog;             /* Show Output Log          */
          signed char show_dlog;             /* Show Delete Log          */
          signed char show_queue;            /* Show AFD Queue           */
          signed char afd_load;              /* Show load of AFD         */
          signed char edit_hc;               /* Edit HOST_CONFIG         */
          signed char dir_ctrl;              /* dir_ctrl dialog          */
       };

/* Function Prototypes. */
signed char mon_window_size(int *, int *),
            resize_mon_window(void);
void        calc_mon_but_coord(int),
            change_mon_history_cb(Widget, XtPointer, XtPointer),
            change_mon_font_cb(Widget, XtPointer, XtPointer),
            change_mon_other_cb(Widget, XtPointer, XtPointer),
            change_mon_rows_cb(Widget, XtPointer, XtPointer),
            change_mon_style_cb(Widget, XtPointer, XtPointer),
            check_afd_status(Widget),
            check_mon_status(Widget),
            destroy_error_history(void),
            draw_afd_identifier(int, int, int),
            draw_clock(time_t),
            draw_mon_bar(int, signed char, char, int, int),
            draw_mon_blank_line(int, int),
            draw_mon_button_line(void),
            draw_mon_chars(int, char, int, int),
            draw_mon_label_line(void),
            draw_mon_line_status(int, signed char, int, int),
            draw_mon_log_status(int, int),
            draw_mon_proc_led(int, signed char, int, int),
            draw_plus_minus(int, int, int),
            draw_remote_log_status(int, int, int, int),
            draw_remote_history(int, int, int, int),
            init_gcs(void),
            mconfig_log(int, char *, char *, ...),
            mon_expose_handler_button(Widget, XtPointer,
                                      XmDrawingAreaCallbackStruct *),
            mon_expose_handler_label(Widget, XtPointer,
                                     XmDrawingAreaCallbackStruct *),
            mon_expose_handler_line(Widget, XtPointer,
                                    XmDrawingAreaCallbackStruct *),
            mon_focus(Widget, XtPointer, XEvent *),
            mon_input(Widget, XtPointer, XEvent *),
            mon_popup_cb(Widget, XtPointer, XtPointer),
            open_close_all_groups(Widget, XtPointer, XtPointer),
            popup_error_history(int, int, int),
            popup_mon_menu_cb(Widget, XtPointer, XEvent *),
            redraw_all(void),
            save_mon_setup(void),
            save_mon_setup_cb(Widget, XtPointer, XtPointer),
            select_afd_dialog(Widget, XtPointer, XtPointer),
            setup_mon_window(char *),
            start_remote_prog(Widget, XtPointer, XtPointer);

#endif /* __mon_ctrl_h */