/*
 * Copyright (c) 2005 Massachusetts Institute of Technology
 *
 * Permission is hereby granted, free of charge, to any person
 * obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without
 * restriction, including without limitation the rights to use, copy,
 * modify, merge, publish, distribute, sublicense, and/or sell copies
 * of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

/* $Id$ */

#ifndef __KHIMAIRA_APPGLOBAL_H
#define __KHIMAIRA_APPGLOBAL_H

/* Helpfile */
#define NIDM_HELPFILE              L"netidmgr.chm"

/* global data */
extern HINSTANCE khm_hInstance;
extern int khm_nCmdShow;
extern const wchar_t * khm_facility;
extern kconf_schema schema_uiconfig[];
extern khm_ui_4 khm_commctl_version;
extern const khm_version app_version;

#define IS_COMMCTL6() (khm_commctl_version >= 0x60000)

/* The structure used to send command-line options to a remote
   NetIDMgr session for versions prior to 1.2. */
struct tag_khm_startup_options_v1 {
    BOOL seen;
    BOOL processing;

    BOOL init;
    BOOL import;
    BOOL renew;
    BOOL destroy;

    BOOL autoinit;
    BOOL exit;
    BOOL error_exit;

    BOOL no_main_window;
};

/* Used on NetIDMgr versions 1.2 and later */
struct tag_khm_startup_options_v2 {
    khm_int32 magic;
    DWORD cb_size;

    BOOL init;
    BOOL import;
    BOOL renew;
    BOOL destroy;

    BOOL autoinit;
    BOOL remote_exit;

    khm_int32 code;
} khm_startup_options_xfer;

#define STARTUP_OPTIONS_MAGIC 0x1f280e41

/* Used internally. */
typedef struct tag_khm_startup_options_int {
    BOOL seen;
    BOOL processing;
    BOOL remote;

    BOOL init;
    BOOL import;
    BOOL renew;
    BOOL destroy;

    BOOL autoinit;
    BOOL exit;
    BOOL remote_exit;

    BOOL error_exit;

    BOOL no_main_window;

    LONG pending_renewals;
} khm_startup_options;

extern khm_startup_options khm_startup;

/* Used to query a remote instance of NetIDMgr for the version. */
typedef struct tag_khm_query_app_version_v1 {
    khm_int32 magic;

    khm_int32 code;

    khm_version ver_caller;
    khm_version ver_remote;

    khm_boolean request_swap;
} khm_query_app_version;

#define KHM_QUERY_APP_VER_MAGIC 0x38f8c2eb

void khm_add_dialog(HWND dlg);
void khm_del_dialog(HWND dlg);
BOOL khm_is_dialog_active(void);

void khm_enter_modal(HWND hwnd);
void khm_leave_modal(void);

void khm_add_property_sheet(khui_property_sheet * s);
void khm_del_property_sheet(khui_property_sheet * s);

void khm_init_gui(void);
void khm_exit_gui(void);

void khm_parse_commandline();
void khm_register_window_classes(void);

HWND khm_html_help(HWND hwnd, wchar_t * suffix, UINT command, DWORD_PTR data);

WPARAM khm_message_loop_int(khm_boolean * p_exit);

int khm_compare_version(const khm_version * v1, const khm_version * v2);

#define MAX_RES_STRING 1024

#define ELLIPSIS L"..."

#endif
