// Microsoft Visual C++ generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// Japanese (Japan) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
#pragma code_page(932)

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE 
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE 
BEGIN
    "#include ""afxres.h""\r\n"
    "\0"
END

3 TEXTINCLUDE 
BEGIN
    "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
    "#define _AFX_NO_OLE_RESOURCES\r\n"
    "#define _AFX_NO_TRACKER_RESOURCES\r\n"
    "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
    "\r\n"
    "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
    "#ifdef _WIN32\r\n"
    "LANGUAGE 9, 1\r\n"
    "#pragma code_page(1252)\r\n"
    "#endif //_WIN32\r\n"
    "#include ""res\\Drvr35Res.rc2""  // non-Microsoft Visual C++ edited resources\r\n"
    "#include ""afxres.rc""         // Standard components\r\n"
    "#endif\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED

#endif    // Japanese (Japan) resources
/////////////////////////////////////////////////////////////////////////////


/////////////////////////////////////////////////////////////////////////////
// English (United States) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)

/////////////////////////////////////////////////////////////////////////////
//
// Version
//

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 2,3,0,0
 PRODUCTVERSION 2,3,0,0
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x2L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "CompanyName", "Apache Trafodion"
            VALUE "FileDescription", "TRAF ODBC Driver Resource DLL"
            VALUE "FileVersion", "2.3.0.0"
            VALUE "InternalName", "TRAF ODBC Driver Resource DLL"
            VALUE "LegalCopyright", "?Copyright 2015-2018 Apache Software Foundation"
            VALUE "OriginalFilename", "traf_ores0100.dll"
            VALUE "ProductName", "TRAF ODBC"
            VALUE "ProductVersion", "2.3.0.0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END


/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_CONNECT_DRIVER_KW_DIALOG DIALOGEX 0, 0, 328, 127
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION
CAPTION "TRAF ODBC Data Source"
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
    LTEXT           "Server &ID:",IDC_STATIC,17,13,46,8
    EDITTEXT        IDC_DKW_SERVER,69,10,178,15,ES_AUTOHSCROLL
    LTEXT           "&User Name :",IDC_STATIC,17,39,46,8,NOT WS_GROUP,WS_EX_RIGHT
    EDITTEXT        IDC_DKW_LOGIN_ID,69,36,178,15,ES_AUTOHSCROLL
    LTEXT           "&Password :",IDC_STATIC,17,64,46,8
    EDITTEXT        IDC_DKW_PASSWORD,69,61,178,15,ES_PASSWORD | ES_AUTOHSCROLL
    LTEXT           "&Schema :",IDC_STATIC,17,88,46,8
    EDITTEXT        IDC_DKW_SCHEMA,69,85,178,15,ES_AUTOHSCROLL
    DEFPUSHBUTTON   "&OK",IDOK,261,14,50,14
    PUSHBUTTON      "Ca&ncel",IDCANCEL,261,39,50,14
END

IDD_CONNECT_DIALOG DIALOGEX 0, 0, 328, 95
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION
CAPTION "TRAF ODBC Data Source"
FONT 8, "MS Sans Serif", 0, 0, 0x1
BEGIN
    LTEXT           "&User Name :",IDC_STATIC,17,13,46,8,SS_CENTERIMAGE | NOT WS_GROUP,WS_EX_RIGHT
    EDITTEXT        IDC_LOGIN_ID,69,10,178,15,ES_AUTOHSCROLL
    LTEXT           "&Password :",IDC_STATIC,17,39,46,8,SS_CENTERIMAGE
    EDITTEXT        IDC_PASSWORD,69,36,178,15,ES_PASSWORD | ES_AUTOHSCROLL
    LTEXT           "&Schema :",IDC_STATIC,17,64,46,8
    EDITTEXT        IDC_SCHEMA,69,61,178,15,ES_AUTOHSCROLL
    DEFPUSHBUTTON   "&OK",IDOK,261,14,50,14
    PUSHBUTTON      "Ca&ncel",IDCANCEL,261,39,50,14
END

IDD_CHANGE_PWD DIALOG 0, 0, 255, 138
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Change Password Dialog"
FONT 8, "MS Sans Serif"
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,71,111,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,137,111,50,14
    RTEXT           "&User Name:",IDC_STATIC,13,19,73,16
    RTEXT           "&Old Password:",IDC_STATIC,13,40,73,16
    RTEXT           "&New Password:",IDC_STATIC,13,60,73,16
    EDITTEXT        IDC_USERNAME,107,16,93,16,ES_AUTOHSCROLL | WS_DISABLED
    EDITTEXT        IDC_OLD_PWD,107,36,93,16,ES_PASSWORD | ES_AUTOHSCROLL
    EDITTEXT        IDC_NEW_PWD,107,56,93,16,ES_PASSWORD | ES_AUTOHSCROLL
    RTEXT           "Verify Password:",IDC_STATIC,13,81,73,18
    EDITTEXT        IDC_VERIFY_PWD,107,78,93,16,ES_PASSWORD | ES_AUTOHSCROLL
END


/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
    IDD_CONNECT_DRIVER_KW_DIALOG, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 321
        BOTTOMMARGIN, 120
    END

    IDD_CONNECT_DIALOG, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 318
        TOPMARGIN, 7
        BOTTOMMARGIN, 88
    END

    IDD_CHANGE_PWD, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 248
        TOPMARGIN, 7
        BOTTOMMARGIN, 131
    END
END
#endif    // APSTUDIO_INVOKED

#endif    // English (United States) resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE 9, 1
#pragma code_page(1252)
#endif //_WIN32
#include "res\Drvr35Res.rc2"  // non-Microsoft Visual C++ edited resources
#include "afxres.rc"         // Standard components
#endif

/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED

