//
// JAPI A[gʕAPI(JmssReportEvent֐) TvvO
//  (C)NEC Corporation/NEC Soft, Ltd. 1995,2003
//
//    2003.7.26 Create by NEC Soft, Ltd.
//

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>

#include "JMSS.H"

//////////////////////////////////////////////////////////////
//  萔錾
//////////////////////////////////////////////////////////////
#define JMSS_JALT_ERROR_SUCCESS 0   // I
#define JMSS_JALT_ERROR_PARAM   1   // p[^G[
#define JMSS_JALT_ERROR_EVENT   2   // ʒmɎs

//////////////////////////////////////////////////////////////
//  vg^Cv錾
//////////////////////////////////////////////////////////////

void PutStdOut(LPCSTR);

//
//  R}hFJREPEVNT
//  @\FCxgOESM}l[W^y[WɃA[gʕ񂵂܂B
//        APIŃG[ꍇɂ́AG[R[h
//        \܂B
//  FJREPEVNT [IvV] bZ[W
//    EIvV ()͊l
//      /M           }l[Wɒʕ񂵂܂Bȗ̓CxgO
//                   o݂͂̂łB
//      /P           y[Wɒʕ񂵂܂Bȗ̓CxgO
//                   o݂͂̂łB
//      /I,W,E       A[g̎ނݒ肵܂B
//                   I:AW:xAE:G[
//      bZ[W   o̓bZ[Ww肵܂B
//      /?           ȈՃwv\܂B
//
//   IlF 0     I
//            0ȊO ُI
//
int main(int argc, char **argv)
{
    int     i;
    BOOL    fErr  = FALSE;
    BOOL    fHelp = FALSE;
    BOOL    fMsg  = FALSE;
    DWORD   dwRet;
    DWORD   dwMode = 0;
    LPSTR   pszMsg = NULL;
    DWORD   dwUserMsgNo = 0;
    DWORD   dwType = (DWORD)-1;
    char    szErrMsg[100];

    // ߼݉
    for (i = 1; i < argc && !fErr && !fHelp; i++){
        if (argv[i][0] == '/' || argv[i][0] == '-'){
            switch(argv[i][1]){
                case 'M':   // /MANAGER
                case 'm':
                    dwMode |= JMSS_JALT_MODE_MANAGER;
                    break;

                case 'P':   // /PAGER
                case 'p':
                    dwMode |= JMSS_JALT_MODE_PAGER;
                    break;

                case 'I':   // INFORMATION
                case 'i':
                    dwType = JMSS_JALT_TYPE_INFORMATION;
                    break;

                case 'W':   // WARNING
                case 'w':
                    dwType = JMSS_JALT_TYPE_WARNING;
                    break;

                case 'E':   // ERROR
                case 'e':
                    dwType = JMSS_JALT_TYPE_ERROR;
                    break;

                case '?':   // /?
                    fHelp = TRUE;
                    break;

                default:    // װ
                    fErr = TRUE;
            }

        // ү
        } else if (pszMsg == NULL){
            pszMsg = argv[i];
            fMsg = TRUE;

        } else
            fErr = TRUE;
    }

    // ߕ\
    if (fHelp){
        PutStdOut("Usage: JREPEVENT [/M] [/P] [/I|/W]|/E] \"bZ[W\"\r\n"
                   "Options:\r\n"
                   "    /M  }l[Wɒʕ񂵂܂Bȗ̓CxgOɏo݂͂̂łB\r\n"
                   "    /P  y[Wɒʕ񂵂܂Bȗ̓CxgOɏo݂͂̂łB\r\n"
                   "    /I  A[g̎ʂ\"\"Ƃďo͂܂B\r\n"
                   "    /W  A[g̎ʂ\"x\"Ƃďo͂܂B\r\n"
                   "    /E  A[g̎ʂ\"G[\"Ƃďo͂܂B\r\n"
                   "    /?  ̃wv\܂B\r\n");
        ExitProcess(JMSS_JALT_ERROR_SUCCESS);
    }

    // װ\
    if (fErr || !fMsg){
        PutStdOut("IvVsł\r\n");
        ExitProcess(JMSS_JALT_ERROR_PARAM);
    }

    // Ұ̍\
    if (dwType == (DWORD)-1)
        dwType = JMSS_JALT_TYPE_INFORMATION;

    // ۸ޏo
    dwRet = JmssReportEvent(dwMode, dwType, pszMsg);
    if (dwRet != ERROR_SUCCESS){
        wsprintf(szErrMsg, "CxgOo͂Ɏs܂B\r\nG[R[hF%08lx", dwRet);
        PutStdOut(szErrMsg);
        ExitProcess(dwRet);
    }

    return JMSS_JALT_ERROR_SUCCESS;
}

void PutStdOut(LPCSTR pszMsg)
{
    DWORD   dwReal;
    HANDLE  hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

    if (hStdOut != INVALID_HANDLE_VALUE){
        WriteFile(hStdOut, pszMsg, strlen(pszMsg), &dwReal, NULL);
        CloseHandle(hStdOut);
    }
}
