
/*
 * Copyright (C) Igor Sysoev
 */


#include <ngx_config.h>
#include <ngx_core.h>


#define NGX_MAX_TEXT   2048


void ngx_cdecl ngx_message_box(char *title, ngx_uint_t type, ngx_err_t err,
    const char *fmt, ...)
{
    va_list  args;
    u_char   text[NGX_MAX_TEXT], *p, *last;

    last = text + NGX_MAX_TEXT;

    va_start(args, fmt);
    p = ngx_vsnprintf(text, NGX_MAX_TEXT, fmt, args);
    va_end(args);

    if (err) {

        if (p > last - 50) {

            /* leave a space for an error code */

            p = last - 50;
            *p++ = '.';
            *p++ = '.';
            *p++ = '.';
        }

        if ((unsigned) err >= 0x80000000) {
            p = ngx_snprintf(p, last - p, " (%Xd: ", err);

        } else {
            p = ngx_snprintf(p, last - p, " (%d: ", err);
        }

        p = ngx_strerror_r(err, p, last - p);

        if (p < last) {
            *p++ = ')';
        }
    }

    if (p == last) {
        p--;
    }

    *p = '\0';

    MessageBox(NULL, (char *) text, title, type);
}


ngx_int_t
ngx_system_tray_icon(HWND window, u_long action, HICON icon, u_char *tip)
{
    NOTIFYICONDATA  ni;

    ni.cbSize = sizeof(NOTIFYICONDATA);
    ni.hWnd = window;
    ni.uID = 0;
    ni.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
    ni.uCallbackMessage = NGX_WM_TRAY;
    ni.hIcon = icon;

    if (tip) {
        ngx_cpystrn((u_char *) ni.szTip, tip, 64);
    } else {
        ni.szTip[0] = '\0';
    }

    if (Shell_NotifyIcon(action, &ni) == 0) {
        return NGX_ERROR;
    }

    return NGX_OK;
}
