// ============================================================================
// resgauge.h -- header file for ResGauge.
// ============================================================================


#ifndef RESGAUGE_H
    #define RESGAUGE_H

    // -------------
    // menu item IDs
    // -------------
    #define SC_KEEP_ON_TOP    100
    #define SC_CONFIGURE      101
    #define SC_ABOUT          102

    // --------------
    // dialog box IDs
    // --------------
    #define IDDB_ABOUT        1
    #define IDDB_CONFIGURE    2

    // --------------------------
    // "About..." dialog item IDs
    // --------------------------
    #define IDD_ABOUT1        100
    #define IDD_ABOUT2        101
    #define IDD_ABOUT3        102
    #define IDD_ABOUT4        103
    #define IDD_ABOUT5        104
    #define IDD_ABOUT6        105
    #define IDD_ABOUT7        106
    #define IDD_ABOUT8        107
    #define IDD_ABOUT9        108
    #define IDD_ABOUT10       109
    #define LAST_ABOUT        109

    // ------------------------------
    // "Configure..." dialog item IDs
    // ------------------------------
    #define IDD_USER          100
    #define IDD_GDI           101
    #define IDD_BOTH          102
    #define IDD_GAUGE_COLOR   103
    #define IDD_ENABLE        104
    #define IDD_BEEP          105
    #define IDD_FLASH         106
    #define IDD_THRESHOLD     107
    #define IDD_MINUS         108
    #define IDD_PLUS          109
    #define IDD_APPLY         110
    #define IDD_DEFAULT       111
    #define LAST_CONFIG       111
    #define IDD_PERCENT       112

    // ----------------
    // string table IDs
    // ----------------
    #define IDS_ALARM_ENABLED 1
    #define IDS_ALARM_TYPE    2
    #define IDS_APPLICATION   3
    #define IDS_BEEP          4
    #define IDS_BOTH          5
    #define IDS_COLOR_BOTH    6
    #define IDS_COLOR_GDI     7
    #define IDS_COLOR_USER    8
    #define IDS_FALSE         9
    #define IDS_FLASH         10
    #define IDS_FORMAT_BOTH   11
    #define IDS_FORMAT_GDI    12
    #define IDS_FORMAT_USER   13
    #define IDS_GDI           14
    #define IDS_KEEP_ON_TOP   15
    #define IDS_MONITOR       16
    #define IDS_PROFILE       17
    #define IDS_THRESHOLD     18
    #define IDS_TIMER_ERROR   19
    #define IDS_TRUE          20
    #define IDS_USER          21

    #define IDSM_ABOUT        22
    #define IDSM_CONFIGURE    23
    #define IDSM_KEEP_ON_TOP  24

    #ifndef RC_INVOKED
        // -----------------------
        // miscellaneous constants
        // -----------------------
        #define TIMER_ID  1
        #define TIMER_MS  500
        #define WM_REVERT WM_USER

        // --------------------
        // enumerated constants
        // --------------------
        enum
        {
            ALARM_BEEP,
            ALARM_FLASH
        };
        enum
        {
            MONITOR_USER,
            MONITOR_GDI,
            MONITOR_BOTH
        };

        // --------------
        // data structure
        // --------------
        typedef struct config
        {
            BOOL  fAlarmEnabled; // TRUE if the alarm is enabled
            BOOL  fKeepOnTop;    // TRUE if "Keep on top" is selected
            WORD  wAlarmType;    // beep or flash
            WORD  wMonitor;      // GDI, User, or both
            WORD  wThreshold;    // percent at which alarm sounds
            DWORD dwColorGDI;    // gauge color for GDI
            DWORD dwColorUser;   // gauge color for User
            DWORD dwColorBoth;   // gauge color for both
        } CONFIG;
        typedef CONFIG * PCONFIG;

        typedef struct offset
        {
            WORD wX;
            WORD wY;
        } OFFSET;

        // -------
        // about.c
        // -------
        BOOL CALLBACK AboutDlgProc(HWND   hDlg,
                                   UINT   msg,
                                   WPARAM wParam,
                                   LPARAM lParam);

        // --------
        // config.c
        // --------
        BOOL CALLBACK ConfigDlgProc(HWND   hDlg,
                                    UINT   msg,
                                    WPARAM wParam,
                                    LPARAM lParam);
        void FAR PASCAL InitConfigDlg(HWND hDlg);
        BOOL FAR PASCAL ConfigCommand(HWND    hDlg,
                                      PCONFIG pConfig,
                                      WPARAM  wParam,
                                      LPARAM  lParam);
        void FAR PASCAL EnableAlarmControls(HWND hDlg,
                                            BOOL fEnable);
        BOOL FAR PASCAL DoColor(HWND        hWnd,
                                DWORD FAR * lpdwColor);

        // ------
        // init.c
        // ------
        void FAR PASCAL ProcessCmdLine(LPSTR lpstrCmdLine);
        BOOL FAR PASCAL InitApplication(HINSTANCE hPrevInstance);
        BOOL FAR PASCAL InitInstance(void);

        // ---------
        // profile.c
        // ---------
        void FAR PASCAL SaveConfig(void);
        void FAR PASCAL GetConfig(void);
        void FAR PASCAL SaveKeepOnTop(void);
        UINT FAR PASCAL DecodeHexString(LPSTR       lpstrValue,
                                        DWORD FAR * dwValue);

        // ----------
        // resgauge.c
        // ----------
        LRESULT WINAPI MainWndProc(HWND   hWnd,
                                   UINT   msg,
                                   WPARAM wParam,
                                   LPARAM lParam);
        void FAR PASCAL MainCreate(HWND hWnd);
        void FAR PASCAL MainPaint(HWND hWnd);
        void FAR PASCAL MainTimer(HWND hWnd);
        void FAR PASCAL HandleKeepOnTop(HWND  hWnd,
                                        HMENU hMenu,
                                        BOOL  fKeepOnTop);
        void FAR PASCAL CenterDialog(HWND hDlg);
        WORD FAR PASCAL GetSystemResources(void);
        void FAR PASCAL FormatLabel(void);

        // --------------------------------------------------------------------
        // preprocessor macros to make globals resident in the main module:
        //     GARRAY() is used for global arrays;
        //     GINIT() is used for explicitly initialized globals; and
        //     GLOBAL() is used for all other globals.
        // --------------------------------------------------------------------
        #ifdef MAIN
            #define GARRAY(X, Y) X[Y]
            #define GINIT(X, Y)  X = Y
            #define GLOBAL(X)    X
        #else
            #define GARRAY(X, Y) extern X[Y]
            #define GINIT(X, Y)  extern X
            #define GLOBAL(X)    extern X
            extern CONFIG GcfgDef; // ugly but necessary
        #endif

        // ----------------------------
        // global/external declarations
        // ----------------------------
        GARRAY(char      GszBuf, 8);

        GLOBAL(CONFIG    GcfgCur);
        GLOBAL(HINSTANCE GhInst);
        GLOBAL(WORD      GwFree);
    #endif


#endif


// =================
// end of resgauge.h
// =================
