mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-26 10:43:03 +01:00
2393 lines
60 KiB
C++
2393 lines
60 KiB
C++
/*
|
|
* PROGRAM: Windows Interactive SQL utility
|
|
* MODULE: isql_win.cpp
|
|
* DESCRIPTION: Windows shell for ISQL
|
|
*
|
|
* The contents of this file are subject to the Interbase Public
|
|
* License Version 1.0 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy
|
|
* of the License at http://www.Inprise.com/IPL.html
|
|
*
|
|
* Software distributed under the License is distributed on an
|
|
* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express
|
|
* or implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
* The Original Code was created by Inprise Corporation
|
|
* and its predecessors. Portions created by Inprise Corporation are
|
|
* Copyright (C) Inprise Corporation.
|
|
*
|
|
* All Rights Reserved.
|
|
* Contributor(s): ______________________________________.
|
|
*/
|
|
|
|
#define STRICT
|
|
#include "firebird.h"
|
|
#include <windows.h>
|
|
#pragma hdrstop
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#if TIME_WITH_SYS_TIME
|
|
# include <sys/time.h>
|
|
# include <time.h>
|
|
#else
|
|
# if HAVE_SYS_TIME_H
|
|
# include <sys/time.h>
|
|
# else
|
|
# include <time.h>
|
|
# endif
|
|
#endif
|
|
#include <bios.h>
|
|
#include <ctype.h>
|
|
#include <io.h>
|
|
#include <dos.h>
|
|
#include <dir.h>
|
|
#include <windowsx.h>
|
|
|
|
#include "../jrd/common.h"
|
|
#include "../isql/isql.h"
|
|
#include "../isql/isql_win.h"
|
|
#include "../isql/isql_res.h"
|
|
#include "../jrd/y_ref.h"
|
|
#include "../jrd/ibase.h"
|
|
#include "../isql/isqlw_proto.h"
|
|
#include "../isql/isql_proto.h"
|
|
|
|
struct scrollkeys {
|
|
WORD wVirtkey;
|
|
int iMessage;
|
|
WORD wRequest;
|
|
};
|
|
|
|
scrollkeys key2scroll[] = {
|
|
{VK_HOME, WM_COMMAND, IDM_HOME},
|
|
{VK_END, WM_VSCROLL, SB_BOTTOM},
|
|
{VK_PRIOR, WM_VSCROLL, SB_PAGEUP},
|
|
{VK_NEXT, WM_VSCROLL, SB_PAGEDOWN},
|
|
{VK_UP, WM_VSCROLL, SB_LINEUP},
|
|
{VK_DOWN, WM_VSCROLL, SB_LINEDOWN},
|
|
{VK_LEFT, WM_HSCROLL, SB_PAGEUP},
|
|
{VK_RIGHT, WM_HSCROLL, SB_PAGEDOWN}
|
|
};
|
|
|
|
// data initialized by first instance
|
|
|
|
typedef struct tagSETUPDATA {
|
|
SCHAR appName[20];
|
|
SCHAR menuName[20];
|
|
SCHAR iconName[20];
|
|
SCHAR errorString[20];
|
|
} SETUPDATA;
|
|
|
|
// various temp file names
|
|
|
|
static SCHAR defInputFile[MAXPATHLEN]; // default input file name
|
|
static SCHAR defOutputFile[MAXPATHLEN]; // default output file name
|
|
static SCHAR defHistFile[MAXPATHLEN]; // command history file name
|
|
static SCHAR defSessionFile[MAXPATHLEN]; // SQL session file
|
|
static FILE *ipf; // input file
|
|
static FILE *opf; // output file
|
|
static FILE *chf; // command history
|
|
static FILE *sss; // SQL session
|
|
|
|
// global flags
|
|
|
|
static SSHORT gflags;
|
|
|
|
#define DBINITED 1 // database initilized flag
|
|
#define DEFINPUT 2 // default input file exists flag
|
|
#define DEFOUTPUT 4 // default output file exists flag
|
|
#define COMHIST 8 // command history file exists flag
|
|
#define OVERWRITE 16 // overwrite/append to window
|
|
#define SESSFILE 32 // SQL session file exists flag
|
|
|
|
SETUPDATA SetUpData;
|
|
|
|
/*
|
|
Data that can be referenced throughout the
|
|
program but not passed to other instances
|
|
*/
|
|
|
|
HINSTANCE hInst; // hInstance of application
|
|
HWND hWndMain; // hWnd of main window
|
|
|
|
int xChar, yChar, yCharnl; // character size
|
|
int xClient, yClient; // client window size
|
|
|
|
LOGFONT cursfont; // font structure
|
|
HFONT holdsfont; // handle of original font
|
|
HFONT hnewsfont; // handle of new fixed font
|
|
SCHAR tmpDialogParam[1024]; // used by dialog boxes
|
|
|
|
// window scroll/paint stuff
|
|
|
|
int nVscrollMax, nHscrollMax; // scroll ranges
|
|
int nVscrollPos, nHscrollPos; // current scroll positions
|
|
int numlines; // number of lines in file
|
|
int maxwidth; // width of display format
|
|
int nVscrollInc, nHscrollInc; // scroll increments
|
|
int nPageMaxLines; // max lines on screen
|
|
|
|
// arguments passed to ISQL
|
|
|
|
int ISQL_argc; // argument count
|
|
char *ISQL_argv[20]; // argument vector
|
|
char ISQL_args[1024]; // space for arguments
|
|
char *ISQL_cursor; // cursor into arguments
|
|
|
|
// database startup parameters
|
|
|
|
static SCHAR newDataBase[256];
|
|
static SCHAR newUserName[32];
|
|
static SCHAR newPassword[16];
|
|
|
|
// script parameters
|
|
static SCHAR scriptName[256];
|
|
static SCHAR scriptOutput[256];
|
|
|
|
// extract parameters
|
|
static SCHAR extractDbName[256];
|
|
static SCHAR extractOutput[256];
|
|
static SCHAR extractTarget[256];
|
|
|
|
static SSHORT allblobsflag;
|
|
static SSHORT allobjectsflag;
|
|
|
|
|
|
int PASCAL WinMain(
|
|
HINSTANCE hInstance,
|
|
HINSTANCE hPrevInstance, LPSTR pCmdLine, int cmdShow)
|
|
{
|
|
/**************************************************
|
|
*
|
|
* W i n M a i n
|
|
*
|
|
**************************************************
|
|
*
|
|
* Functional description:
|
|
* WinMain shell for the Windows ISQL function.
|
|
*
|
|
*
|
|
* paramaters:
|
|
* hInstance - The instance of this instance of this
|
|
* application.
|
|
* hPrevInstance - The instance of the previous instance
|
|
* of this application. This will be 0
|
|
* if this is the first instance.
|
|
* pCmdLine - A long pointer to the command line that
|
|
* started this application.
|
|
* cmdShow - Indicates how the window is to be shown
|
|
* initially. ie. SW_SHOWNORMAL, SW_HIDE,
|
|
* SW_MIMIMIZE.
|
|
*
|
|
* returns:
|
|
* wParam from last message.
|
|
*
|
|
********************************************************************/
|
|
|
|
if (pCmdLine && *pCmdLine)
|
|
return cmdline_isql(hInstance, pCmdLine);
|
|
else
|
|
return windows_isql(hInstance, hPrevInstance, cmdShow);
|
|
}
|
|
|
|
|
|
LRESULT CALLBACK _export ISQLWndProc(HWND hWnd,
|
|
UINT message,
|
|
WPARAM wParam, LPARAM lParam)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* I S Q L W n d P r o c
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* This handles all messages for the application's main window,
|
|
* including scrolling and menu picks.
|
|
*
|
|
* paramaters:
|
|
* hWnd - The window handle for this message
|
|
* message - The message number
|
|
* wParam - The WPARAM parameter for this message
|
|
* lParam - The LPARAM parameter for this message
|
|
*
|
|
* returns:
|
|
* depends on message.
|
|
*
|
|
********************************************************************/
|
|
DLGPROC lpproc; // pointer to thunk for dialog box
|
|
SCHAR buf[1024]; // temp buffer
|
|
SCHAR pwbuf[50];
|
|
SCHAR unbuf[50];
|
|
SSHORT i;
|
|
int ret;
|
|
|
|
switch (message) {
|
|
case WM_CREATE:
|
|
nVscrollPos = 0;
|
|
nHscrollPos = 0;
|
|
return (DefWindowProc(hWnd, message, wParam, lParam));
|
|
|
|
case WM_COMMAND:
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
case IDM_QUIT:
|
|
// User selected Quit on menu
|
|
PostMessage(hWnd, WM_CLOSE, 0, 0L);
|
|
break;
|
|
|
|
case IDM_HOME:
|
|
// Used to implement home to topleft from keyboard.
|
|
SendMessage(hWnd, WM_HSCROLL, GET_WM_HSCROLL_MPS(SB_TOP, 0, 0));
|
|
SendMessage(hWnd, WM_VSCROLL, GET_WM_VSCROLL_MPS(SB_TOP, 0, 0));
|
|
break;
|
|
|
|
case IDM_ABOUT:
|
|
// Display about box.
|
|
lpproc =
|
|
(DLGPROC) MakeProcInstance((FARPROC) aboutDlgProc, hInst);
|
|
DialogBox(hInst, MAKEINTRESOURCE(ABOUT), hWnd, lpproc);
|
|
FreeProcInstance((FARPROC) lpproc);
|
|
break;
|
|
|
|
case IDM_EXEC_SQL:
|
|
tmpDialogParam[0] = '\0';
|
|
lpproc = (DLGPROC) MakeProcInstance((FARPROC) execDlgProc, hInst);
|
|
ret = DialogBox(hInst, MAKEINTRESOURCE(EXEC_SQL), hWnd, lpproc);
|
|
FreeProcInstance((FARPROC) lpproc);
|
|
if (ret) {
|
|
fprintf(sss, "%s\n\r", tmpDialogParam);
|
|
fflush(sss);
|
|
test_overwrite();
|
|
ISQL_sql_statement(tmpDialogParam, ipf, opf, chf);
|
|
fprintf(opf, "\n\r\n\r");
|
|
display_page(hWnd);
|
|
}
|
|
break;
|
|
|
|
case IDM_CONNECT_DB:
|
|
newDataBase[0] = '\0';
|
|
newUserName[0] = '\0';
|
|
newPassword[0] = '\0';
|
|
lpproc =
|
|
(DLGPROC) MakeProcInstance((FARPROC) dbNameDlgProc, hInst);
|
|
ret = DialogBox(hInst, MAKEINTRESOURCE(CONNECT_DB), hWnd, lpproc);
|
|
FreeProcInstance((FARPROC) lpproc);
|
|
if (ret) {
|
|
ISQL_exit_db();
|
|
if (ISQL_init
|
|
(newDataBase, newUserName, newPassword, ipf,
|
|
opf)) gflags |= DBINITED;
|
|
}
|
|
break;
|
|
|
|
case IDM_CREATE_DB:
|
|
newDataBase[0] = '\0';
|
|
newUserName[0] = '\0';
|
|
newPassword[0] = '\0';
|
|
lpproc =
|
|
(DLGPROC) MakeProcInstance((FARPROC) createDbDlgProc, hInst);
|
|
ret = DialogBox(hInst, MAKEINTRESOURCE(CREATE_DB), hWnd, lpproc);
|
|
FreeProcInstance((FARPROC) lpproc);
|
|
if (ret) {
|
|
ISQL_exit_db();
|
|
if (newUserName[0])
|
|
sprintf(unbuf, " USER \"%s\" ", newUserName);
|
|
else
|
|
unbuf[0] = '\0';
|
|
if (newPassword[0])
|
|
sprintf(pwbuf, " PASSWORD \"%s\" ", newPassword);
|
|
else
|
|
pwbuf[0] = '\0';
|
|
sprintf(buf, "CREATE DATABASE \"%s\" %s %s",
|
|
newDataBase, unbuf, pwbuf);
|
|
ISQL_frontend_command(buf, ipf, opf, chf);
|
|
gflags |= DBINITED;
|
|
}
|
|
break;
|
|
|
|
case IDM_DROP_DB:
|
|
lpproc =
|
|
(DLGPROC) MakeProcInstance((FARPROC) dropDbDlgProc, hInst);
|
|
ret = DialogBox(hInst, MAKEINTRESOURCE(DROP_DB), hWnd, lpproc);
|
|
FreeProcInstance((FARPROC) lpproc);
|
|
if (ret) {
|
|
ISQL_frontend_command("DROP DATABASE", ipf, opf, chf);
|
|
gflags &= ~DBINITED;
|
|
}
|
|
break;
|
|
|
|
case IDM_SAVE_SESSION:
|
|
tmpDialogParam[0] = '\0';
|
|
lpproc =
|
|
(DLGPROC) MakeProcInstance((FARPROC) sessionDlgProc, hInst);
|
|
ret =
|
|
DialogBox(hInst, MAKEINTRESOURCE(SAVE_SESSION), hWnd, lpproc);
|
|
FreeProcInstance((FARPROC) lpproc);
|
|
if (ret) {
|
|
fflush(chf);
|
|
fclose(chf);
|
|
xfer_file(defHistFile, tmpDialogParam, false);
|
|
chf = fopen(defHistFile, "a");
|
|
}
|
|
break;
|
|
|
|
case IDM_SAVE_OUTPUT:
|
|
tmpDialogParam[0] = '\0';
|
|
lpproc =
|
|
(DLGPROC) MakeProcInstance((FARPROC) outputDlgProc, hInst);
|
|
ret =
|
|
DialogBox(hInst, MAKEINTRESOURCE(SAVE_OUTPUT), hWnd, lpproc);
|
|
FreeProcInstance((FARPROC) lpproc);
|
|
if (ret) {
|
|
fflush(opf);
|
|
fclose(opf);
|
|
xfer_file(defOutputFile, tmpDialogParam, false);
|
|
opf = fopen(defOutputFile, "a");
|
|
}
|
|
break;
|
|
|
|
case IDM_EXEC_SCRIPT:
|
|
scriptName[0] = '\0';
|
|
scriptOutput[0] = '\0';
|
|
lpproc =
|
|
(DLGPROC) MakeProcInstance((FARPROC) scriptDlgProc, hInst);
|
|
ret =
|
|
DialogBox(hInst, MAKEINTRESOURCE(EXEC_SCRIPT), hWnd, lpproc);
|
|
FreeProcInstance((FARPROC) lpproc);
|
|
if (ret) {
|
|
// generate an argc/argv
|
|
|
|
ISQL_cursor = ISQL_args;
|
|
ISQL_argc = 0;
|
|
pusharg("isql");
|
|
pusharg("-input");
|
|
pusharg(scriptName);
|
|
pusharg("-output");
|
|
|
|
// use specified output file, or default
|
|
|
|
if (scriptOutput[0])
|
|
pusharg(scriptOutput);
|
|
else
|
|
pusharg(defOutputFile);
|
|
fclose(opf);
|
|
fclose(ipf);
|
|
|
|
/* if database already open, exit and add database
|
|
name to arguments */
|
|
|
|
if (gflags & DBINITED) {
|
|
ISQL_exit_db();
|
|
pusharg(newDataBase);
|
|
}
|
|
|
|
/* if overwrite flag is set, make sure ISQL appends to
|
|
an empty file */
|
|
|
|
if (gflags & OVERWRITE) {
|
|
opf = fopen(defOutputFile, "w");
|
|
fclose(opf);
|
|
}
|
|
ISQL_main(ISQL_argc, ISQL_argv);
|
|
|
|
// reopen default files and database
|
|
|
|
ipf = fopen(defInputFile, "r");
|
|
opf = fopen(defOutputFile, "a");
|
|
if (gflags & DBINITED)
|
|
ISQL_init(newDataBase, newUserName, newPassword, ipf,
|
|
opf);
|
|
fprintf(opf, "\n\r\n\r");
|
|
display_page(hWnd);
|
|
}
|
|
break;
|
|
|
|
case IDM_EXTRACT_DB:
|
|
extractOutput[0] = '\0';
|
|
extractDbName[0] = '\0';
|
|
extractTarget[0] = '\0';
|
|
lpproc =
|
|
(DLGPROC) MakeProcInstance((FARPROC) extractDlgProc, hInst);
|
|
ret = DialogBox(hInst, MAKEINTRESOURCE(EXTRACT_DB), hWnd, lpproc);
|
|
FreeProcInstance((FARPROC) lpproc);
|
|
if (ret) {
|
|
// create an argument vector for ISQL
|
|
|
|
ISQL_cursor = ISQL_args;
|
|
ISQL_argc = 0;
|
|
pusharg("isql");
|
|
pusharg("-extract");
|
|
pusharg("-o");
|
|
if (extractOutput[0])
|
|
pusharg(extractOutput);
|
|
else
|
|
pusharg(defOutputFile);
|
|
pusharg(extractDbName);
|
|
if (extractTarget[0]) {
|
|
pusharg("-database");
|
|
pusharg(extractTarget);
|
|
}
|
|
fclose(opf);
|
|
fclose(ipf);
|
|
ISQL_exit_db();
|
|
ISQL_main(ISQL_argc, ISQL_argv);
|
|
ISQL_exit_db();
|
|
|
|
// reopen default files and database
|
|
|
|
ipf = fopen(defInputFile, "r");
|
|
opf = fopen(defOutputFile, "a");
|
|
if (gflags & DBINITED)
|
|
ISQL_init(newDataBase, newUserName, newPassword, ipf,
|
|
opf);
|
|
fprintf(opf, "\n\r\n\r");
|
|
display_page(hWnd);
|
|
}
|
|
break;
|
|
|
|
case IDM_HELP:
|
|
ISQL_win_err("not implemented yet");
|
|
break;
|
|
|
|
case IDM_APPEND:
|
|
if (gflags & OVERWRITE)
|
|
gflags &= ~OVERWRITE;
|
|
else
|
|
gflags |= OVERWRITE;
|
|
break;
|
|
|
|
// Send the proper frontend commands for these:
|
|
|
|
case IDM_BLOB_TYPE:
|
|
tmpDialogParam[0] = '\0';
|
|
allblobsflag = FALSE;
|
|
lpproc = (DLGPROC) MakeProcInstance((FARPROC) blobDlgProc, hInst);
|
|
ret = DialogBox(hInst, MAKEINTRESOURCE(BLOB_TYPE), hWnd, lpproc);
|
|
FreeProcInstance((FARPROC) lpproc);
|
|
if (ret) {
|
|
sprintf(buf, "SET BLOBDISPLAY %s", tmpDialogParam);
|
|
ISQL_frontend_command(buf, ipf, opf, chf);
|
|
}
|
|
break;
|
|
|
|
case IDM_STATISTICS:
|
|
ISQL_frontend_command("SET STATS", ipf, opf, chf);
|
|
break;
|
|
|
|
case IDM_COUNT:
|
|
ISQL_frontend_command("SET COUNT", ipf, opf, chf);
|
|
break;
|
|
|
|
case IDM_AUTOCOMMIT:
|
|
ISQL_frontend_command("SET AUTOCOMMIT", ipf, opf, chf);
|
|
break;
|
|
|
|
case IDM_LIST:
|
|
ISQL_frontend_command("SET LIST", ipf, opf, chf);
|
|
break;
|
|
|
|
case IDM_PLAN:
|
|
ISQL_frontend_command("SET PLAN", ipf, opf, chf);
|
|
break;
|
|
|
|
case IDM_TRANSACTION:
|
|
tmpDialogParam[0] = '\0';
|
|
lpproc =
|
|
(DLGPROC) MakeProcInstance((FARPROC) transDlgProc, hInst);
|
|
ret =
|
|
DialogBox(hInst, MAKEINTRESOURCE(TRANS_STRING), hWnd, lpproc);
|
|
FreeProcInstance((FARPROC) lpproc);
|
|
if (ret) {
|
|
sprintf(buf, "SET TRANSACTION %s", tmpDialogParam);
|
|
ISQL_frontend_command(buf, ipf, opf, chf);
|
|
}
|
|
break;
|
|
|
|
case IDM_AUTODDL:
|
|
ISQL_frontend_command("SET AUTO", ipf, opf, chf);
|
|
break;
|
|
|
|
case IDM_TERMINATOR:
|
|
tmpDialogParam[0] = '\0';
|
|
lpproc = (DLGPROC) MakeProcInstance((FARPROC) termDlgProc, hInst);
|
|
ret = DialogBox(hInst, MAKEINTRESOURCE(TERMINATOR), hWnd, lpproc);
|
|
FreeProcInstance((FARPROC) lpproc);
|
|
if (ret) {
|
|
sprintf(buf, "SET TERM %s", tmpDialogParam);
|
|
ISQL_frontend_command(buf, ipf, opf, chf);
|
|
}
|
|
break;
|
|
|
|
case IDM_CHAR_SET:
|
|
tmpDialogParam[0] = '\0';
|
|
lpproc =
|
|
(DLGPROC) MakeProcInstance((FARPROC) charSetDlgProc, hInst);
|
|
ret = DialogBox(hInst, MAKEINTRESOURCE(CHAR_SET), hWnd, lpproc);
|
|
FreeProcInstance((FARPROC) lpproc);
|
|
if (ret) {
|
|
sprintf(buf, "SET NAMES %s", tmpDialogParam);
|
|
ISQL_frontend_command(buf, ipf, opf, chf);
|
|
}
|
|
break;
|
|
|
|
// Send the proper show commands for these:
|
|
|
|
case IDM_SHOW_VERSION:
|
|
test_overwrite();
|
|
ISQL_frontend_command("SHOW VERSION", ipf, opf, chf);
|
|
fprintf(opf, "\n\r\n\r");
|
|
display_page(hWnd);
|
|
break;
|
|
|
|
case IDM_SHOW_SYSTEM:
|
|
test_overwrite();
|
|
ISQL_frontend_command("SHOW SYSTEM", ipf, opf, chf);
|
|
fprintf(opf, "\n\r\n\r");
|
|
display_page(hWnd);
|
|
break;
|
|
|
|
case IDM_SHOW_SETTINGS:
|
|
test_overwrite();
|
|
ISQL_frontend_command("SET", ipf, opf, chf);
|
|
fprintf(opf, "\n\r\n\r");
|
|
display_page(hWnd);
|
|
break;
|
|
|
|
case IDM_SHOW_DATABASE:
|
|
test_overwrite();
|
|
ISQL_frontend_command("SHOW DATABASE", ipf, opf, chf);
|
|
fprintf(opf, "\n\r\n\r");
|
|
display_page(hWnd);
|
|
break;
|
|
|
|
case IDM_SHOW_CHECK:
|
|
case IDM_SHOW_TRIGGER:
|
|
case IDM_SHOW_PROCEDURE:
|
|
case IDM_SHOW_GENERATOR:
|
|
case IDM_SHOW_GRANT:
|
|
case IDM_SHOW_FUNCTION:
|
|
case IDM_SHOW_FILTER:
|
|
case IDM_SHOW_EXCEPTS:
|
|
case IDM_SHOW_DOMAIN:
|
|
case IDM_SHOW_INDEX:
|
|
case IDM_SHOW_VIEW:
|
|
case IDM_SHOW_TABLE:
|
|
tmpDialogParam[0] = '\0';
|
|
lpproc =
|
|
(DLGPROC) MakeProcInstance((FARPROC) objectDlgProc, hInst);
|
|
ret = DialogBox(hInst, MAKEINTRESOURCE(DB_OBJECT), hWnd, lpproc);
|
|
FreeProcInstance((FARPROC) lpproc);
|
|
if (ret) {
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
case IDM_SHOW_CHECK:
|
|
sprintf(buf, "SHOW CHECK %s", tmpDialogParam);
|
|
break;
|
|
|
|
case IDM_SHOW_TRIGGER:
|
|
sprintf(buf, "SHOW TRIGGER %s", tmpDialogParam);
|
|
break;
|
|
|
|
case IDM_SHOW_PROCEDURE:
|
|
sprintf(buf, "SHOW PROCEDURE %s", tmpDialogParam);
|
|
break;
|
|
|
|
case IDM_SHOW_GENERATOR:
|
|
sprintf(buf, "SHOW GENERATOR %s", tmpDialogParam);
|
|
break;
|
|
|
|
case IDM_SHOW_GRANT:
|
|
sprintf(buf, "SHOW GRANT %s", tmpDialogParam);
|
|
break;
|
|
|
|
case IDM_SHOW_FUNCTION:
|
|
sprintf(buf, "SHOW FUNCTION %s", tmpDialogParam);
|
|
break;
|
|
|
|
case IDM_SHOW_FILTER:
|
|
sprintf(buf, "SHOW FILTER %s", tmpDialogParam);
|
|
break;
|
|
|
|
case IDM_SHOW_EXCEPTS:
|
|
sprintf(buf, "SHOW EXCEPTION %s", tmpDialogParam);
|
|
break;
|
|
|
|
case IDM_SHOW_DOMAIN:
|
|
sprintf(buf, "SHOW DOMAIN %s", tmpDialogParam);
|
|
break;
|
|
|
|
case IDM_SHOW_INDEX:
|
|
sprintf(buf, "SHOW INDEX %s", tmpDialogParam);
|
|
break;
|
|
|
|
case IDM_SHOW_VIEW:
|
|
if (allobjectsflag)
|
|
strcpy(buf, "SHOW VIEWS");
|
|
else
|
|
sprintf(buf, "SHOW VIEW %s", tmpDialogParam);
|
|
break;
|
|
|
|
case IDM_SHOW_TABLE:
|
|
if (allobjectsflag)
|
|
strcpy(buf, "SHOW TABLES");
|
|
else
|
|
sprintf(buf, "SHOW TABLE %s", tmpDialogParam);
|
|
break;
|
|
|
|
}
|
|
test_overwrite();
|
|
ISQL_frontend_command(buf, ipf, opf, chf);
|
|
fprintf(opf, "\n\r\n\r");
|
|
display_page(hWnd);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case WM_SIZE:
|
|
// Save size of window client area.
|
|
if (lParam) {
|
|
yClient = HIWORD(lParam);
|
|
xClient = LOWORD(lParam);
|
|
yClient = (yClient / yCharnl + 1) * yCharnl;
|
|
lParam = MAKELONG(xClient, yClient);
|
|
|
|
// Go setup scroll ranges and file display area based upon
|
|
// client area size.
|
|
|
|
setup_scroll(hWnd);
|
|
return DefWindowProc(hWnd, message, wParam, lParam);
|
|
}
|
|
break;
|
|
|
|
case WM_VSCROLL:
|
|
// React to the various vertical scroll related actions.
|
|
|
|
switch (GET_WM_VSCROLL_CODE(wParam, lParam)) {
|
|
case SB_TOP:
|
|
nVscrollInc = -nVscrollPos;
|
|
break;
|
|
case SB_BOTTOM:
|
|
nVscrollInc = nVscrollMax - nVscrollPos;
|
|
break;
|
|
case SB_LINEUP:
|
|
nVscrollInc = -1;
|
|
break;
|
|
case SB_LINEDOWN:
|
|
nVscrollInc = 1;
|
|
break;
|
|
case SB_PAGEUP:
|
|
nVscrollInc = -max(1, yClient / yChar);
|
|
break;
|
|
case SB_PAGEDOWN:
|
|
nVscrollInc = max(1, yClient / yChar);
|
|
break;
|
|
case SB_THUMBPOSITION:
|
|
nVscrollInc = GET_WM_VSCROLL_POS(wParam, lParam) - nVscrollPos;
|
|
break;
|
|
case SB_THUMBTRACK:
|
|
nVscrollInc = GET_WM_VSCROLL_POS(wParam, lParam) - nVscrollPos;
|
|
break;
|
|
default:
|
|
nVscrollInc = 0;
|
|
}
|
|
nVscrollInc = max(-nVscrollPos,
|
|
min(nVscrollInc, nVscrollMax - nVscrollPos));
|
|
if (nVscrollInc) {
|
|
nVscrollPos += nVscrollInc;
|
|
ScrollWindow(hWnd, 0, -yChar * nVscrollInc, NULL, NULL);
|
|
SetScrollPos(hWnd, SB_VERT, nVscrollPos, TRUE);
|
|
UpdateWindow(hWnd);
|
|
}
|
|
break;
|
|
|
|
case WM_HSCROLL:
|
|
// React to the various horizontal scroll related actions.
|
|
|
|
switch (GET_WM_HSCROLL_CODE(wParam, lParam)) {
|
|
case SB_LINEUP:
|
|
nHscrollInc = -1;
|
|
break;
|
|
case SB_LINEDOWN:
|
|
nHscrollInc = 1;
|
|
break;
|
|
case SB_PAGEUP:
|
|
nHscrollInc = -8;
|
|
break;
|
|
case SB_PAGEDOWN:
|
|
nHscrollInc = 8;
|
|
break;
|
|
case SB_THUMBPOSITION:
|
|
nHscrollInc = GET_WM_HSCROLL_POS(wParam, lParam) - nHscrollPos;
|
|
break;
|
|
case SB_THUMBTRACK:
|
|
nHscrollInc = GET_WM_HSCROLL_POS(wParam, lParam) - nHscrollPos;
|
|
break;
|
|
default:
|
|
nHscrollInc = 0;
|
|
}
|
|
nHscrollInc = max(-nHscrollPos,
|
|
min(nHscrollInc, nHscrollMax - nHscrollPos));
|
|
if (nHscrollInc) {
|
|
nHscrollPos += nHscrollInc;
|
|
ScrollWindow(hWnd, -xChar * nHscrollInc, 0, NULL, NULL);
|
|
SetScrollPos(hWnd, SB_HORZ, nHscrollPos, TRUE);
|
|
UpdateWindow(hWnd);
|
|
}
|
|
break;
|
|
|
|
case WM_KEYDOWN:
|
|
// Translate various keydown messages to appropriate horizontal
|
|
// and vertical scroll actions.
|
|
|
|
for (i = 0; i < FB_NELEM(key2scroll); i++) {
|
|
if (wParam == key2scroll[i].wVirtkey) {
|
|
SendMessage(hWnd, key2scroll[i].iMessage,
|
|
key2scroll[i].wRequest, 0L);
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case WM_PAINT:
|
|
// Go paint the client area of the window with the appropriate
|
|
// part of the selected file.
|
|
|
|
paint_isql(hWnd);
|
|
break;
|
|
|
|
case WM_DESTROY:
|
|
// This is the end if we were closed by a DestroyWindow call.
|
|
close_isql(); // take any necessary wrapup action.
|
|
PostQuitMessage(0); // this is the end...
|
|
break;
|
|
|
|
case WM_QUERYENDSESSION:
|
|
// If we return TRUE we are saying it's ok with us to end the
|
|
// windows session.
|
|
close_isql(); // take any necessary wrapup action.
|
|
return (long) TRUE; // we agree to end session.
|
|
|
|
case WM_CLOSE:
|
|
// Tell windows to destroy our window.
|
|
DestroyWindow(hWnd);
|
|
break;
|
|
|
|
default:
|
|
// Let windows handle all messages we choose to ignore.
|
|
return DefWindowProc(hWnd, message, wParam, lParam);
|
|
}
|
|
|
|
return 0L;
|
|
}
|
|
|
|
|
|
void ISQL_win_err(const char* string)
|
|
{
|
|
/***************************************************************
|
|
*
|
|
* I S Q L _ w i n _ e r r
|
|
*
|
|
***************************************************************
|
|
*
|
|
* Functional description:
|
|
* Output a Windows ISQL error in a message box.
|
|
*
|
|
***************************************************************/
|
|
|
|
if (Merge_stderr)
|
|
fprintf(Out, "%s\n", string);
|
|
else
|
|
MessageBox(NULL, string, SetUpData.errorString,
|
|
MB_ICONEXCLAMATION | MB_OK);
|
|
}
|
|
|
|
|
|
static void close_isql()
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* c l o s e _ i s q l
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* Shut down the database prior to exit.
|
|
*
|
|
********************************************************************/
|
|
|
|
ISQL_exit_db();
|
|
if (gflags & COMHIST)
|
|
fclose(chf);
|
|
unlink(defHistFile);
|
|
if (gflags & DEFINPUT)
|
|
fclose(ipf);
|
|
unlink(defInputFile);
|
|
if (gflags & DEFOUTPUT)
|
|
fclose(opf);
|
|
unlink(defOutputFile);
|
|
if (gflags & SESSFILE)
|
|
fclose(sss);
|
|
unlink(defSessionFile);
|
|
DeleteObject(hnewsfont);
|
|
}
|
|
|
|
|
|
static int cmdline_isql( HINSTANCE hInstance, LPSTR pCmdLine)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* c m d l i n e _ i s q l
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional Description:
|
|
* Take the command line and turn it into an argc/argv to feed
|
|
* to ISQL.
|
|
*
|
|
* paramaters:
|
|
* hInstance - Instance used for error messsages
|
|
* pCmdLine - A long pointer to the command line that
|
|
* started this application.
|
|
*
|
|
* returns:
|
|
* return from ISQL
|
|
*
|
|
********************************************************************/
|
|
FILE *inputfile; // input file
|
|
FILE *outputfile; // output file
|
|
SCHAR inputfilename[MAXPATHLEN]; // input file name
|
|
SCHAR outputfilename[MAXPATHLEN]; // output file name
|
|
SCHAR arg[MAXPATHLEN]; // current argument
|
|
SCHAR *cp; // command line cursor
|
|
SCHAR *ap; // current argument cursor
|
|
|
|
// create default input and output files
|
|
|
|
if (!open_temp_file
|
|
(hInstance, &inputfile, inputfilename, IDS_TEMP_IN_FILE)) return 0;
|
|
if (!open_temp_file
|
|
(hInstance, &outputfile, outputfilename, IDS_TEMP_OUT_FILE)) return 0;
|
|
|
|
// create failsafe input file
|
|
|
|
fprintf(inputfile, "QUIT;\n");
|
|
fclose(inputfile);
|
|
fclose(outputfile);
|
|
|
|
// create an argument vector, including the default files and command line args
|
|
|
|
ISQL_cursor = ISQL_args;
|
|
ISQL_argc = 0;
|
|
pusharg("isql");
|
|
pusharg("-input");
|
|
pusharg(inputfilename);
|
|
pusharg("-output");
|
|
pusharg(outputfilename);
|
|
ap = arg;
|
|
for (cp = (SCHAR *) pCmdLine; *cp; cp++) {
|
|
*ap = *cp++;
|
|
if (*ap == ' ') {
|
|
*ap = '\0';
|
|
pusharg(arg);
|
|
ap = arg;
|
|
}
|
|
else
|
|
ap++;
|
|
if (ISQL_argc == 20)
|
|
break;
|
|
}
|
|
ISQL_main(ISQL_argc, ISQL_argv);
|
|
unlink(inputfilename);
|
|
unlink(outputfilename);
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
static void display_page( HWND hWnd)
|
|
{
|
|
/***************************************************************
|
|
*
|
|
* d i s p l a y _ p a g e
|
|
*
|
|
***************************************************************
|
|
*
|
|
* Functional description:
|
|
* Throw the result up on the window.
|
|
*
|
|
***************************************************************/
|
|
FILE *fh;
|
|
|
|
// Determine file size and some display paramaters.
|
|
nVscrollPos = numlines;
|
|
numlines = 0;
|
|
maxwidth = 0;
|
|
fflush(opf);
|
|
fclose(opf);
|
|
fh = fopen(defOutputFile, "r+b");
|
|
if (fh) {
|
|
while (fgets(tmpDialogParam, sizeof(tmpDialogParam), fh)) {
|
|
numlines++;
|
|
if (strlen(tmpDialogParam) > maxwidth)
|
|
maxwidth = strlen(tmpDialogParam);
|
|
}
|
|
fclose(fh);
|
|
}
|
|
opf = fopen(defOutputFile, "a");
|
|
|
|
// Go setup scroll ranges for this file.
|
|
|
|
setup_scroll(hWnd);
|
|
|
|
// Show first part of file.
|
|
|
|
InvalidateRect(hWnd, NULL, TRUE);
|
|
UpdateWindow(hWnd);
|
|
}
|
|
|
|
|
|
static SSHORT init_isql(
|
|
HINSTANCE hInstance,
|
|
HINSTANCE hPrevInstance, int cmdShow)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* i n i t _ i s q l
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* Startup code for Windows. This builds the window and also
|
|
* presents the user with a dialog box to specify the database
|
|
* connection parameters.
|
|
*
|
|
* paramaters:
|
|
* hInstance - The instance of this instance of this
|
|
* application.
|
|
* hPrevInstance - The instance of the previous instance
|
|
* of this application. This will be 0
|
|
* if this is the first instance.
|
|
* cmdShow - Indicates how the window is to be shown
|
|
* initially. ie. SW_SHOWNORMAL, SW_HIDE,
|
|
* SW_MIMIMIZE.
|
|
*
|
|
*********************************************************************/
|
|
#pragma argsused
|
|
DLGPROC dlgProc;
|
|
int iReturn;
|
|
|
|
// perform instance dependant Windows initialization
|
|
|
|
if (!hPrevInstance)
|
|
init_isql_first(hInstance);
|
|
#if !defined(__WIN32__)
|
|
else
|
|
init_isql_added(hPrevInstance);
|
|
#endif
|
|
|
|
// perform common instance Windows initialization
|
|
|
|
init_isql_every(hInstance, cmdShow);
|
|
|
|
// open all the files
|
|
|
|
if (!open_temp_file(hInstance, &ipf, defInputFile, IDS_DEF_IN_FILE))
|
|
return FALSE;
|
|
fprintf(ipf, "QUIT;\n");
|
|
fclose(ipf);
|
|
ipf = fopen(defInputFile, "r");
|
|
gflags |= DEFINPUT;
|
|
if (!open_temp_file(hInstance, &opf, defOutputFile, IDS_DEF_OUT_FILE))
|
|
return FALSE;
|
|
gflags |= DEFOUTPUT;
|
|
if (!open_temp_file(hInstance, &chf, defHistFile, IDS_DEF_HIST_FILE))
|
|
return FALSE;
|
|
gflags |= COMHIST;
|
|
if (!open_temp_file(hInstance, &sss, defSessionFile, IDS_DEF_SESS_FILE))
|
|
return FALSE;
|
|
gflags |= SESSFILE;
|
|
newDataBase[0] = '\0';
|
|
newUserName[0] = '\0';
|
|
newPassword[0] = '\0';
|
|
dlgProc = (DLGPROC) MakeProcInstance((FARPROC) dbNameDlgProc, hInst);
|
|
iReturn =
|
|
DialogBox(hInst, MAKEINTRESOURCE(CONNECT_DB), hWndMain, dlgProc);
|
|
FreeProcInstance((FARPROC) dlgProc);
|
|
if (iReturn)
|
|
if (ISQL_init(newDataBase, newUserName, newPassword, ipf, opf))
|
|
gflags |= DBINITED;
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
#if !defined(__WIN32__)
|
|
static void init_isql_added( HINSTANCE hPrevInstance)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* i n i t _ i s q l _ a d d e d
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* This gets called for each added instance of the application.
|
|
*
|
|
* paramaters:
|
|
* hPrevInstance - The instance of the previous instance
|
|
* of this application.
|
|
*
|
|
*********************************************************************/
|
|
|
|
// get the results of the initialization of first instance
|
|
|
|
GetInstanceData(hPrevInstance, (BYTE *) & SetUpData, sizeof(SETUPDATA));
|
|
}
|
|
#endif
|
|
|
|
|
|
static void init_isql_every( HINSTANCE hInstance, int cmdShow)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* i n i t _ i s q l _ e v e r y
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* Perform initialization done for all instances.
|
|
*
|
|
* paramaters:
|
|
* hInstance - The instance of this instance of this
|
|
* application.
|
|
* cmdShow - Indicates how the window is to be shown
|
|
* initially. ie. SW_SHOWNORMAL, SW_HIDE,
|
|
* SW_MIMIMIZE.
|
|
*
|
|
********************************************************************/
|
|
TEXTMETRIC tm;
|
|
HDC hDC;
|
|
|
|
hInst = hInstance; // save for use by window procs
|
|
|
|
// Create applications main window.
|
|
|
|
hWndMain = CreateWindow(SetUpData.appName, // window class name
|
|
SetUpData.appName, // window title
|
|
WS_OVERLAPPEDWINDOW | // type of window
|
|
WS_HSCROLL | WS_VSCROLL, CW_USEDEFAULT, // x window location
|
|
CW_USEDEFAULT, // y
|
|
CW_USEDEFAULT, // cx and size
|
|
CW_USEDEFAULT, // cy
|
|
NULL, // no parent for this window
|
|
NULL, // use the class menu
|
|
hInstance, // who created this window
|
|
NULL // no parms to pass on
|
|
);
|
|
|
|
// Get the display context.
|
|
|
|
hDC = GetDC(hWndMain);
|
|
|
|
// Build fixed screen font.
|
|
|
|
cursfont.lfHeight = 14;
|
|
cursfont.lfWidth = 9;
|
|
cursfont.lfEscapement = 0;
|
|
cursfont.lfOrientation = 0;
|
|
cursfont.lfWeight = FW_NORMAL;
|
|
cursfont.lfItalic = FALSE;
|
|
cursfont.lfUnderline = FALSE;
|
|
cursfont.lfStrikeOut = FALSE;
|
|
cursfont.lfCharSet = ANSI_CHARSET;
|
|
cursfont.lfOutPrecision = OUT_DEFAULT_PRECIS;
|
|
cursfont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
|
|
cursfont.lfQuality = DEFAULT_QUALITY;
|
|
cursfont.lfPitchAndFamily = FIXED_PITCH | FF_DONTCARE;
|
|
strcpy((char *) cursfont.lfFaceName, "System");
|
|
|
|
hnewsfont = CreateFontIndirect((LPLOGFONT) & cursfont);
|
|
|
|
// Install the font in the current display context.
|
|
|
|
holdsfont = SelectObject(hDC, hnewsfont);
|
|
|
|
// get text metrics for paint
|
|
|
|
GetTextMetrics(hDC, &tm);
|
|
xChar = tm.tmAveCharWidth;
|
|
yChar = tm.tmHeight + tm.tmExternalLeading;
|
|
yCharnl = tm.tmHeight;
|
|
numlines = 0;
|
|
|
|
// Release the display context.
|
|
|
|
ReleaseDC(hWndMain, hDC);
|
|
|
|
// Update display of main window.
|
|
|
|
ShowWindow(hWndMain, cmdShow);
|
|
UpdateWindow(hWndMain);
|
|
}
|
|
|
|
|
|
static void init_isql_first( HINSTANCE hInstance)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* i n i t _ i s q l _ f i r s t
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functions description:
|
|
* Initialization for first instance of application.
|
|
*
|
|
* paramaters:
|
|
* hInstance - The instance of this instance of this
|
|
* application.
|
|
*
|
|
********************************************************************/
|
|
WNDCLASS wcISQLClass;
|
|
|
|
// Get string from resource with application name.
|
|
|
|
LoadString(hInstance, IDS_NAME, (LPSTR) SetUpData.appName, 20);
|
|
LoadString(hInstance, IDS_MENUNAME, (LPSTR) SetUpData.menuName, 20);
|
|
LoadString(hInstance, IDS_ICONNAME, (LPSTR) SetUpData.iconName, 20);
|
|
LoadString(hInstance, IDS_ERROR, (LPSTR) SetUpData.errorString, 20);
|
|
|
|
// Define the window class for this application.
|
|
|
|
wcISQLClass.lpszClassName = SetUpData.appName;
|
|
wcISQLClass.hInstance = hInstance;
|
|
wcISQLClass.lpfnWndProc = isqlWndProc;
|
|
wcISQLClass.hCursor = LoadCursor(hInstance, MAKEINTRESOURCE(ISQLCURSOR));
|
|
wcISQLClass.hIcon = LoadIcon(hInstance, SetUpData.iconName);
|
|
wcISQLClass.lpszMenuName = (LPSTR) SetUpData.menuName;
|
|
wcISQLClass.hbrBackground = GetStockObject(WHITE_BRUSH);
|
|
wcISQLClass.style = CS_HREDRAW | CS_VREDRAW;
|
|
wcISQLClass.cbClsExtra = 0;
|
|
wcISQLClass.cbWndExtra = 0;
|
|
|
|
// Register the class
|
|
|
|
RegisterClass(&wcISQLClass);
|
|
}
|
|
|
|
|
|
static SSHORT open_temp_file(
|
|
HINSTANCE hInstance,
|
|
FILE** file,
|
|
SCHAR* fileName, SSHORT errStrNum)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* o p e n _ t e m p _ f i l e
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functions description:
|
|
* Create a temp file, get its name, and print the proper
|
|
* error on failure.
|
|
*
|
|
********************************************************************/
|
|
SCHAR errorString[100];
|
|
SCHAR message[100];
|
|
|
|
*file = (FILE *) gds__temp_file(TRUE, "isql_", fileName);
|
|
if (*file == (FILE *) - 1) {
|
|
LoadString(hInstance, errStrNum, errorString, 100);
|
|
sprintf(message, errorString, fileName);
|
|
ISQL_win_err(message);
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
static int windows_isql(
|
|
HINSTANCE hInstance,
|
|
HINSTANCE hPrevInstance, int cmdShow)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* w i n d o w s _ i s q l
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* Process ISQL for Windows (no command line was passed).
|
|
*
|
|
* paramaters:
|
|
* hInstance - The instance of this instance of this
|
|
* application.
|
|
* hPrevInstance - The instance of the previous instance
|
|
* of this application. This will be 0
|
|
* if this is the first instance.
|
|
* cmdShow - Indicates how the window is to be shown
|
|
* initially. ie. SW_SHOWNORMAL, SW_HIDE,
|
|
* SW_MIMIMIZE.
|
|
*
|
|
* returns:
|
|
* wParam from last message.
|
|
*
|
|
********************************************************************/ \
|
|
MSG msg;
|
|
|
|
// Go init this application.
|
|
|
|
if (!init_isql(hInstance, hPrevInstance, cmdShow))
|
|
return 0;
|
|
|
|
// Get and dispatch messages for this applicaton.
|
|
|
|
while (GetMessage(&msg, NULL, NULL, NULL)) {
|
|
TranslateMessage(&msg);
|
|
DispatchMessage(&msg);
|
|
}
|
|
|
|
return msg.wParam;
|
|
}
|
|
|
|
|
|
static void paint_isql( HWND hWnd)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* p a i n t _ i s q l
|
|
*
|
|
********************************************************************
|
|
* Functional description:
|
|
* If a file has been selected, as indicated by numlines being
|
|
* greater than 0, this module will read and display a portion
|
|
* of the file as determined by the current size and scroll
|
|
* position of the window.
|
|
*
|
|
* paramaters:
|
|
* hWnd - The callers window handle
|
|
*
|
|
********************************************************************/
|
|
PAINTSTRUCT ps;
|
|
HDC hDC;
|
|
SSHORT e;
|
|
SCHAR buf[1024];
|
|
SSHORT i;
|
|
FILE *hfile;
|
|
|
|
BeginPaint(hWnd, (LPPAINTSTRUCT) & ps);
|
|
hDC = ps.hdc;
|
|
|
|
// Establish fixed font in display context.
|
|
|
|
SelectObject(hDC, hnewsfont);
|
|
|
|
if (numlines) {
|
|
// Open the file to display
|
|
// (files should not stay open over multiple windows messages)
|
|
|
|
hfile = fopen(defOutputFile, "r");
|
|
if (hfile) {
|
|
// Skip lines outside window limits
|
|
|
|
for (i = 0; i < nVscrollPos; i++)
|
|
fgets(buf, sizeof(buf), hfile);
|
|
|
|
// Read visible lines
|
|
|
|
for (i = 0; i < nPageMaxLines; i++) {
|
|
if (!fgets(buf, sizeof(buf), hfile))
|
|
break;
|
|
|
|
// figure out shortest text to put
|
|
|
|
for (e = strlen(buf); e >= 0; e--)
|
|
if (buf[e] > ' ' && buf[e] <= '~')
|
|
break;
|
|
if (e == -1)
|
|
buf[++e] = ' ';
|
|
buf[++e] = '\0';
|
|
TextOut(hDC, xChar * (-nHscrollPos + 0), yChar * i, buf, e);
|
|
}
|
|
fclose(hfile);
|
|
}
|
|
}
|
|
|
|
EndPaint(hWnd, (LPPAINTSTRUCT) & ps);
|
|
}
|
|
|
|
|
|
static void pusharg(const char* argument)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* p u s h a r g
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* Used to push arguments onto an argv to be sent to ISQL.
|
|
*
|
|
********************************************************************/
|
|
|
|
ISQL_argv[ISQL_argc++] = ISQL_cursor;
|
|
strcpy(ISQL_cursor, argument);
|
|
ISQL_cursor += strlen(argument);
|
|
*ISQL_cursor++ = '\0';
|
|
}
|
|
|
|
|
|
static void setup_scroll( HWND hWnd)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* s e t u p _ s c r o l l
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* Set up the vertical and horizontal scroll ranges and positions
|
|
* of the applicatons main window based on:
|
|
*
|
|
* numlines - The maximum number of lines to display.
|
|
* maxwidth - The width of each line to display.
|
|
*
|
|
* The resulting variables, nVscrollPos and nPageMaxLines, are used
|
|
* by the function paint_isql to determine what to display in the window.
|
|
*
|
|
* paramaters:
|
|
* hWnd - The callers window handle
|
|
*
|
|
*********************************************************************/
|
|
|
|
// numlines established during open
|
|
|
|
nVscrollMax = max(0, numlines - yClient / yChar);
|
|
nVscrollPos = min(nVscrollPos, nVscrollMax);
|
|
|
|
nHscrollMax = max(0, maxwidth - xClient / xChar);
|
|
nHscrollPos = min(nHscrollPos, nHscrollMax);
|
|
|
|
SetScrollRange(hWnd, SB_VERT, 0, nVscrollMax, FALSE);
|
|
SetScrollPos(hWnd, SB_VERT, nVscrollPos, TRUE);
|
|
|
|
SetScrollRange(hWnd, SB_HORZ, 0, nHscrollMax, FALSE);
|
|
SetScrollPos(hWnd, SB_HORZ, nHscrollPos, TRUE);
|
|
|
|
nPageMaxLines = min(numlines, yClient / yChar);
|
|
}
|
|
|
|
|
|
static void test_overwrite()
|
|
{
|
|
/***************************************************************
|
|
*
|
|
* t e s t _ o v e r w r i t e
|
|
*
|
|
***************************************************************
|
|
*
|
|
* Functional description:
|
|
* If the overwrite flag is set, clear the file and reset
|
|
* the scroll positions.
|
|
*
|
|
***************************************************************/
|
|
|
|
if (gflags & OVERWRITE) {
|
|
fclose(opf);
|
|
opf = fopen(defOutputFile, "w");
|
|
nVscrollPos = 0;
|
|
nHscrollPos = 0;
|
|
}
|
|
}
|
|
|
|
|
|
static void xfer_file(
|
|
const char* inFileName,
|
|
const char* outFileName, bool appendFlag)
|
|
{
|
|
/***************************************************************
|
|
*
|
|
* x f e r _ f i l e
|
|
*
|
|
***************************************************************
|
|
*
|
|
* Functional description:
|
|
* Copy current file to a save file.
|
|
*
|
|
***************************************************************/
|
|
SCHAR xferbuff[1024];
|
|
|
|
FILE* xferin = fopen(inFileName, "r");
|
|
if (xferin) {
|
|
FILE* xferout;
|
|
if (appendFlag)
|
|
xferout = fopen(outFileName, "a");
|
|
else
|
|
xferout = fopen(outFileName, "w");
|
|
if (xferout) {
|
|
while (fgets(xferbuff, sizeof(xferbuff), xferin)) {
|
|
fprintf(xferout, "%s", xferbuff);
|
|
}
|
|
fclose(xferout);
|
|
}
|
|
fclose(xferin);
|
|
}
|
|
}
|
|
|
|
|
|
BOOL CALLBACK _export aboutDlgProc(HWND hDlg,
|
|
UINT message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* a b o u t D l g P r o c
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* Put up a little dislog box saying what this is.
|
|
*
|
|
* paramaters:
|
|
* hDlg - The window handle for this message
|
|
* message - The message number
|
|
* wParam - The WPARAM parameter for this message
|
|
* lParam - The LPARAM parameter for this message
|
|
*
|
|
********************************************************************/
|
|
#pragma argsused
|
|
|
|
if (message == WM_INITDIALOG)
|
|
return TRUE;
|
|
else if (message == WM_COMMAND) {
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
case IDOK:
|
|
EndDialog(hDlg, TRUE);
|
|
return TRUE;
|
|
default:
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
BOOL CALLBACK _export blobDlgProc(HWND hDlg,
|
|
UINT iMessage, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* b l o b D l g P r o c
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* Get blob display type, or "ALL" by managing the BLOB_TYPE
|
|
* dialog box.
|
|
*
|
|
* paramaters:
|
|
* hDlg - The window handle of this dialog box
|
|
* message - The message number
|
|
* wParam - The WPARAM parameter for this message
|
|
* lParam - The LPARAM parameter for this message
|
|
*
|
|
* returns:
|
|
* depends on message.
|
|
*
|
|
/********************************************************************/
|
|
|
|
switch (iMessage) {
|
|
case WM_INITDIALOG:
|
|
SendDlgItemMessage(hDlg, IDD_BLOB_TYPE, EM_LIMITTEXT, 10, 0L);
|
|
return (TRUE);
|
|
|
|
case WM_COMMAND:
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
case IDD_ALL_BLOBS:
|
|
allblobsflag = TRUE;
|
|
tmpDialogParam[0] = '\0';
|
|
EndDialog(hDlg, TRUE);
|
|
break;
|
|
|
|
case IDD_BLOB_TYPE:
|
|
allblobsflag = FALSE;
|
|
if (GET_WM_COMMAND_CMD(wParam, lParam) == EN_CHANGE)
|
|
EnableWindow(GetDlgItem(hDlg, IDOK),
|
|
(BOOL) SendMessage((HWND) lParam,
|
|
WM_GETTEXTLENGTH, 0, 0L));
|
|
break;
|
|
|
|
case IDOK:
|
|
GetDlgItemText(hDlg, IDD_BLOB_TYPE, tmpDialogParam, 10);
|
|
EndDialog(hDlg, TRUE);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
strcpy(tmpDialogParam, "0");
|
|
EndDialog(hDlg, FALSE);
|
|
break;
|
|
|
|
case IDD_HELP_BUTTON:
|
|
ISQL_win_err("Not implemented yet");
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL CALLBACK _export charSetDlgProc(HWND hDlg,
|
|
UINT iMessage,
|
|
WPARAM wParam, LPARAM lParam)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* c h a r S e t D l g P r o c
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* Get characetr set name by managing the NAMES dialog box.
|
|
*
|
|
* paramaters:
|
|
* hDlg - The window handle of this dialog box
|
|
* message - The message number
|
|
* wParam - The WPARAM parameter for this message
|
|
* lParam - The LPARAM parameter for this message
|
|
*
|
|
* returns:
|
|
* depends on message.
|
|
*
|
|
/********************************************************************/
|
|
|
|
switch (iMessage) {
|
|
case WM_INITDIALOG:
|
|
SendDlgItemMessage(hDlg, IDD_CHAR_SET, EM_LIMITTEXT, 100, 0L);
|
|
return (TRUE);
|
|
|
|
case WM_COMMAND:
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
case IDD_CHAR_SET:
|
|
if (GET_WM_COMMAND_CMD(wParam, lParam) == EN_CHANGE)
|
|
EnableWindow(GetDlgItem(hDlg, IDOK),
|
|
(BOOL) SendMessage((HWND) lParam,
|
|
WM_GETTEXTLENGTH, 0, 0L));
|
|
break;
|
|
|
|
case IDOK:
|
|
GetDlgItemText(hDlg, IDD_CHAR_SET, tmpDialogParam, 100);
|
|
EndDialog(hDlg, TRUE);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
tmpDialogParam[0] = '\0';
|
|
EndDialog(hDlg, FALSE);
|
|
break;
|
|
|
|
case IDD_HELP_BUTTON:
|
|
ISQL_win_err("Not implemented yet");
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL CALLBACK _export createDbDlgProc(HWND hDlg,
|
|
UINT iMessage,
|
|
WPARAM wParam, LPARAM lParam)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* c r e a t e D b D l g P r o c
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* Get database name, user name and password for a newly created
|
|
* database by managing the CREATE_DB dialog box.
|
|
*
|
|
* paramaters:
|
|
* hDlg - The window handle of this dialog box
|
|
* message - The message number
|
|
* wParam - The WPARAM parameter for this message
|
|
* lParam - The LPARAM parameter for this message
|
|
*
|
|
* returns:
|
|
* depends on message.
|
|
*
|
|
/********************************************************************/
|
|
|
|
switch (iMessage) {
|
|
case WM_INITDIALOG:
|
|
SendDlgItemMessage(hDlg, IDD_DB_DBNAME, EM_LIMITTEXT, 256, 0L);
|
|
SendDlgItemMessage(hDlg, IDD_DB_USERNAME, EM_LIMITTEXT, 32, 0L);
|
|
SendDlgItemMessage(hDlg, IDD_DB_PASSWORD, EM_LIMITTEXT, 16, 0L);
|
|
return (TRUE);
|
|
|
|
case WM_COMMAND:
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
case IDD_CREATE_DBNAME:
|
|
if (GET_WM_COMMAND_CMD(wParam, lParam) == EN_CHANGE)
|
|
EnableWindow(GetDlgItem(hDlg, IDOK),
|
|
(BOOL) SendMessage((HWND) lParam,
|
|
WM_GETTEXTLENGTH, 0, 0L));
|
|
break;
|
|
|
|
case IDD_CREATE_USERNAME:
|
|
case IDD_CREATE_PASSWORD:
|
|
break;
|
|
|
|
case IDOK:
|
|
GetDlgItemText(hDlg, IDD_DB_DBNAME, newDataBase, 256);
|
|
GetDlgItemText(hDlg, IDD_DB_USERNAME, newUserName, 32);
|
|
GetDlgItemText(hDlg, IDD_DB_PASSWORD, newPassword, 16);
|
|
EndDialog(hDlg, TRUE);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
// Terminate this dialog box.
|
|
EndDialog(hDlg, FALSE);
|
|
break;
|
|
|
|
case IDD_HELP_BUTTON:
|
|
ISQL_win_err("Not implemented yet");
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL CALLBACK _export dbNameDlgProc(HWND hDlg,
|
|
UINT iMessage,
|
|
WPARAM wParam, LPARAM lParam)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* d b N a m e D l g P r o c
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* Get database name, user name and password by managing the
|
|
* DB_NAME dialog box.
|
|
*
|
|
* paramaters:
|
|
* hDlg - The window handle of this dialog box
|
|
* message - The message number
|
|
* wParam - The WPARAM parameter for this message
|
|
* lParam - The LPARAM parameter for this message
|
|
*
|
|
* returns:
|
|
* depends on message.
|
|
*
|
|
/********************************************************************/
|
|
|
|
switch (iMessage) {
|
|
case WM_INITDIALOG:
|
|
SendDlgItemMessage(hDlg, IDD_DB_DBNAME, EM_LIMITTEXT, 256, 0L);
|
|
SendDlgItemMessage(hDlg, IDD_DB_USERNAME, EM_LIMITTEXT, 32, 0L);
|
|
SendDlgItemMessage(hDlg, IDD_DB_PASSWORD, EM_LIMITTEXT, 16, 0L);
|
|
return (TRUE);
|
|
|
|
case WM_COMMAND:
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
case IDD_DB_DBNAME:
|
|
if (GET_WM_COMMAND_CMD(wParam, lParam) == EN_CHANGE)
|
|
EnableWindow(GetDlgItem(hDlg, IDOK),
|
|
(BOOL) SendMessage((HWND) lParam,
|
|
WM_GETTEXTLENGTH, 0, 0L));
|
|
break;
|
|
|
|
case IDD_DB_USERNAME:
|
|
case IDD_DB_PASSWORD:
|
|
break;
|
|
|
|
case IDOK:
|
|
GetDlgItemText(hDlg, IDD_DB_DBNAME, newDataBase, 256);
|
|
GetDlgItemText(hDlg, IDD_DB_USERNAME, newUserName, 32);
|
|
GetDlgItemText(hDlg, IDD_DB_PASSWORD, newPassword, 16);
|
|
EndDialog(hDlg, TRUE);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
// Terminate this dialog box.
|
|
EndDialog(hDlg, FALSE);
|
|
break;
|
|
|
|
case IDD_HELP_BUTTON:
|
|
ISQL_win_err("Not implemented yet");
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL CALLBACK _export dropDbDlgProc(HWND hDlg,
|
|
UINT iMessage,
|
|
WPARAM wParam, LPARAM lParam)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* d r o p D b D l g P r o c
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* Drop the database by managing the DROP_DB dialog box.
|
|
*
|
|
* paramaters:
|
|
* hDlg - The window handle of this dialog box
|
|
* message - The message number
|
|
* wParam - The WPARAM parameter for this message
|
|
* lParam - The LPARAM parameter for this message
|
|
*
|
|
* returns:
|
|
* depends on message.
|
|
*
|
|
/********************************************************************/
|
|
|
|
switch (iMessage) {
|
|
case WM_INITDIALOG:
|
|
return (TRUE);
|
|
|
|
case WM_COMMAND:
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
case IDOK:
|
|
EndDialog(hDlg, TRUE);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
// Terminate this dialog box.
|
|
EndDialog(hDlg, FALSE);
|
|
break;
|
|
|
|
case IDD_HELP_BUTTON:
|
|
ISQL_win_err("Not implemented yet");
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL CALLBACK _export execDlgProc(HWND hDlg,
|
|
UINT iMessage, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* e x e c D l g P r o c
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* Get a SQL command by managing the EXEC dialog box.
|
|
*
|
|
* paramaters:
|
|
* hDlg - The window handle of this dialog box
|
|
* message - The message number
|
|
* wParam - The WPARAM parameter for this message
|
|
* lParam - The LPARAM parameter for this message
|
|
*
|
|
* returns:
|
|
* depends on message.
|
|
*
|
|
/********************************************************************/
|
|
FILE *fh;
|
|
SCHAR buf[256];
|
|
SSHORT i;
|
|
|
|
switch (iMessage) {
|
|
case WM_INITDIALOG:
|
|
SendDlgItemMessage(hDlg, IDD_SQL_COMMAND, EM_LIMITTEXT, 1024, 0L);
|
|
fflush(sss);
|
|
fclose(sss);
|
|
fh = fopen(defSessionFile, "r");
|
|
if (fh) {
|
|
while (fgets(buf, sizeof(buf), fh)) {
|
|
for (i = strlen(buf); i; i--)
|
|
if (buf[i] >= ' ' && buf[i] <= '~')
|
|
break;
|
|
if (!i)
|
|
break;
|
|
buf[i + 1] = '\0';
|
|
SendMessage(GetDlgItem(hDlg, IDD_SQL_HISTORY),
|
|
LB_ADDSTRING, 0, (SLONG) buf);
|
|
}
|
|
fclose(fh);
|
|
}
|
|
sss = fopen(defSessionFile, "a");
|
|
return (TRUE);
|
|
|
|
case WM_COMMAND:
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
case IDD_SQL_COMMAND:
|
|
if (GET_WM_COMMAND_CMD(wParam, lParam) == EN_CHANGE) {
|
|
EnableWindow(GetDlgItem(hDlg, IDOK),
|
|
(BOOL) SendMessage((HWND) lParam,
|
|
WM_GETTEXTLENGTH, 0, 0L));
|
|
}
|
|
break;
|
|
|
|
case IDD_SQL_HISTORY:
|
|
if (GET_WM_COMMAND_CMD(wParam, lParam) == LBN_DBLCLK) {
|
|
i = (SSHORT) SendMessage(GetDlgItem(hDlg, IDD_SQL_HISTORY),
|
|
LB_GETCURSEL, 0, 0);
|
|
SendMessage(GetDlgItem(hDlg, IDD_SQL_HISTORY),
|
|
LB_GETTEXT, i, (SLONG) buf);
|
|
SetDlgItemText(hDlg, IDD_SQL_COMMAND, buf);
|
|
}
|
|
break;
|
|
|
|
case IDOK:
|
|
GetDlgItemText(hDlg, IDD_SQL_COMMAND, tmpDialogParam, 1024);
|
|
EndDialog(hDlg, TRUE);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
EndDialog(hDlg, FALSE);
|
|
break;
|
|
|
|
case IDD_HELP_BUTTON:
|
|
ISQL_win_err("Not implemented yet");
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL CALLBACK _export extractDlgProc(HWND hDlg,
|
|
UINT iMessage,
|
|
WPARAM wParam, LPARAM lParam)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* e x t r a c t D l g P r o c
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* Get extract database name plus optional target database and
|
|
* output file by managing the EXTRACT_DB dialog box.
|
|
*
|
|
* paramaters:
|
|
* hDlg - The window handle of this dialog box
|
|
* message - The message number
|
|
* wParam - The WPARAM parameter for this message
|
|
* lParam - The LPARAM parameter for this message
|
|
*
|
|
* returns:
|
|
* depends on message.
|
|
*
|
|
/********************************************************************/
|
|
|
|
switch (iMessage) {
|
|
case WM_INITDIALOG:
|
|
SendDlgItemMessage(hDlg, IDD_EXTRACT_DBNAME, EM_LIMITTEXT, 256, 0L);
|
|
SendDlgItemMessage(hDlg, IDD_EXTRACT_OUTPUT, EM_LIMITTEXT, 256, 0L);
|
|
SendDlgItemMessage(hDlg, IDD_EXTRACT_TARGET, EM_LIMITTEXT, 256, 0L);
|
|
return (TRUE);
|
|
|
|
case WM_COMMAND:
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
case IDD_EXTRACT_DBNAME:
|
|
if (GET_WM_COMMAND_CMD(wParam, lParam) == EN_CHANGE)
|
|
EnableWindow(GetDlgItem(hDlg, IDOK),
|
|
(BOOL) SendMessage((HWND) lParam,
|
|
WM_GETTEXTLENGTH, 0, 0L));
|
|
break;
|
|
|
|
case IDD_EXTRACT_TARGET:
|
|
case IDD_EXTRACT_OUTPUT:
|
|
break;
|
|
|
|
case IDOK:
|
|
GetDlgItemText(hDlg, IDD_EXTRACT_DBNAME, extractDbName, 256);
|
|
GetDlgItemText(hDlg, IDD_EXTRACT_TARGET, extractTarget, 256);
|
|
GetDlgItemText(hDlg, IDD_EXTRACT_OUTPUT, extractOutput, 256);
|
|
EndDialog(hDlg, TRUE);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
// Terminate this dialog box.
|
|
EndDialog(hDlg, FALSE);
|
|
break;
|
|
|
|
case IDD_HELP_BUTTON:
|
|
ISQL_win_err("Not implemented yet");
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL CALLBACK _export objectDlgProc(HWND hDlg,
|
|
UINT iMessage,
|
|
WPARAM wParam, LPARAM lParam)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* o b j e c t D l g P r o c
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* Get database object name or "ALL" by managing the
|
|
* DB_OBJECT dialog box.
|
|
*
|
|
* paramaters:
|
|
* hDlg - The window handle of this dialog box
|
|
* message - The message number
|
|
* wParam - The WPARAM parameter for this message
|
|
* lParam - The LPARAM parameter for this message
|
|
*
|
|
* returns:
|
|
* depends on message.
|
|
*
|
|
/********************************************************************/
|
|
|
|
switch (iMessage) {
|
|
case WM_INITDIALOG:
|
|
SendDlgItemMessage(hDlg, IDD_OBJECT, EM_LIMITTEXT, 256, 0L);
|
|
return (TRUE);
|
|
|
|
case WM_COMMAND:
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
case IDD_ALL_OBJECTS:
|
|
allobjectsflag = TRUE;
|
|
tmpDialogParam[0] = '\0';
|
|
EndDialog(hDlg, TRUE);
|
|
break;
|
|
|
|
case IDD_OBJECT:
|
|
allobjectsflag = FALSE;
|
|
if (GET_WM_COMMAND_CMD(wParam, lParam) == EN_CHANGE)
|
|
EnableWindow(GetDlgItem(hDlg, IDOK),
|
|
(BOOL) SendMessage((HWND) lParam,
|
|
WM_GETTEXTLENGTH, 0, 0L));
|
|
break;
|
|
|
|
case IDOK:
|
|
GetDlgItemText(hDlg, IDD_OBJECT, tmpDialogParam, 256);
|
|
EndDialog(hDlg, TRUE);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
tmpDialogParam[0] = '\0';
|
|
EndDialog(hDlg, FALSE);
|
|
break;
|
|
|
|
case IDD_HELP_BUTTON:
|
|
ISQL_win_err("Not implemented yet");
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL CALLBACK _export outputDlgProc(HWND hDlg,
|
|
UINT iMessage,
|
|
WPARAM wParam, LPARAM lParam)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* o u t p u t D l g P r o c
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* Get name of file to dump current window to, using
|
|
* SAVE_OUTPUT dialog box.
|
|
*
|
|
* paramaters:
|
|
* hDlg - The window handle of this dialog box
|
|
* message - The message number
|
|
* wParam - The WPARAM parameter for this message
|
|
* lParam - The LPARAM parameter for this message
|
|
*
|
|
* returns:
|
|
* depends on message.
|
|
*
|
|
/********************************************************************/
|
|
|
|
switch (iMessage) {
|
|
case WM_INITDIALOG:
|
|
SendDlgItemMessage(hDlg, IDD_SAVE_OUTPUT_FILE, EM_LIMITTEXT, 256, 0L);
|
|
return (TRUE);
|
|
|
|
case WM_COMMAND:
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
case IDD_SAVE_OUTPUT_FILE:
|
|
if (GET_WM_COMMAND_CMD(wParam, lParam) == EN_CHANGE)
|
|
EnableWindow(GetDlgItem(hDlg, IDOK),
|
|
(BOOL) SendMessage((HWND) lParam,
|
|
WM_GETTEXTLENGTH, 0, 0L));
|
|
break;
|
|
|
|
case IDOK:
|
|
GetDlgItemText(hDlg, IDD_SAVE_OUTPUT_FILE, tmpDialogParam, 256);
|
|
EndDialog(hDlg, TRUE);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
tmpDialogParam[0] = '\0';
|
|
EndDialog(hDlg, FALSE);
|
|
break;
|
|
|
|
case IDD_HELP_BUTTON:
|
|
ISQL_win_err("Not implemented yet");
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL CALLBACK _export scriptDlgProc(HWND hDlg,
|
|
UINT iMessage,
|
|
WPARAM wParam, LPARAM lParam)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* s c r i p t D l g P r o c
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* Get script name and optional output file name by managing the
|
|
* SCRIPT dialog box.
|
|
*
|
|
* paramaters:
|
|
* hDlg - The window handle of this dialog box
|
|
* message - The message number
|
|
* wParam - The WPARAM parameter for this message
|
|
* lParam - The LPARAM parameter for this message
|
|
*
|
|
* returns:
|
|
* depends on message.
|
|
*
|
|
/********************************************************************/
|
|
|
|
switch (iMessage) {
|
|
case WM_INITDIALOG:
|
|
SendDlgItemMessage(hDlg, IDD_SCRIPT_INPUT, EM_LIMITTEXT, 256, 0L);
|
|
SendDlgItemMessage(hDlg, IDD_SCRIPT_OUTPUT, EM_LIMITTEXT, 256, 0L);
|
|
return (TRUE);
|
|
|
|
case WM_COMMAND:
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
case IDD_SCRIPT_INPUT:
|
|
if (GET_WM_COMMAND_CMD(wParam, lParam) == EN_CHANGE)
|
|
EnableWindow(GetDlgItem(hDlg, IDOK),
|
|
(BOOL) SendMessage((HWND) lParam,
|
|
WM_GETTEXTLENGTH, 0, 0L));
|
|
break;
|
|
|
|
case IDD_SCRIPT_OUTPUT:
|
|
break;
|
|
|
|
case IDOK:
|
|
GetDlgItemText(hDlg, IDD_SCRIPT_INPUT, scriptName, 256);
|
|
GetDlgItemText(hDlg, IDD_SCRIPT_OUTPUT, scriptOutput, 256);
|
|
EndDialog(hDlg, TRUE);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
// Terminate this dialog box.
|
|
EndDialog(hDlg, FALSE);
|
|
break;
|
|
|
|
case IDD_HELP_BUTTON:
|
|
ISQL_win_err("Not implemented yet");
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL CALLBACK _export sessionDlgProc(HWND hDlg,
|
|
UINT iMessage,
|
|
WPARAM wParam, LPARAM lParam)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* s e s s i o n D l g P r o c
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* Get name of file to dump current session's commands to, using
|
|
* SAVE_SESSION dialog box.
|
|
*
|
|
* paramaters:
|
|
* hDlg - The window handle of this dialog box
|
|
* message - The message number
|
|
* wParam - The WPARAM parameter for this message
|
|
* lParam - The LPARAM parameter for this message
|
|
*
|
|
* returns:
|
|
* depends on message.
|
|
*
|
|
/********************************************************************/
|
|
|
|
switch (iMessage) {
|
|
case WM_INITDIALOG:
|
|
SendDlgItemMessage(hDlg, IDD_SAVE_SESSION_FILE, EM_LIMITTEXT, 256,
|
|
0L);
|
|
return (TRUE);
|
|
|
|
case WM_COMMAND:
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
case IDD_SAVE_SESSION_FILE:
|
|
if (GET_WM_COMMAND_CMD(wParam, lParam) == EN_CHANGE)
|
|
EnableWindow(GetDlgItem(hDlg, IDOK),
|
|
(BOOL) SendMessage((HWND) lParam,
|
|
WM_GETTEXTLENGTH, 0, 0L));
|
|
break;
|
|
|
|
case IDOK:
|
|
GetDlgItemText(hDlg, IDD_SAVE_SESSION_FILE, tmpDialogParam, 256);
|
|
EndDialog(hDlg, TRUE);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
tmpDialogParam[0] = '\0';
|
|
EndDialog(hDlg, FALSE);
|
|
break;
|
|
|
|
case IDD_HELP_BUTTON:
|
|
ISQL_win_err("Not implemented yet");
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL CALLBACK _export termDlgProc(HWND hDlg,
|
|
UINT iMessage, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* t e r m D l g P r o c
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* Get SQL statement terminator by managing the TERMINATOR dialog box.
|
|
*
|
|
* paramaters:
|
|
* hDlg - The window handle of this dialog box
|
|
* message - The message number
|
|
* wParam - The WPARAM parameter for this message
|
|
* lParam - The LPARAM parameter for this message
|
|
*
|
|
* returns:
|
|
* depends on message.
|
|
*
|
|
/********************************************************************/
|
|
|
|
switch (iMessage) {
|
|
case WM_INITDIALOG:
|
|
SendDlgItemMessage(hDlg, IDD_TERMINATOR, EM_LIMITTEXT, 10, 0L);
|
|
return (TRUE);
|
|
|
|
case WM_COMMAND:
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
case IDD_TERMINATOR:
|
|
if (GET_WM_COMMAND_CMD(wParam, lParam) == EN_CHANGE)
|
|
EnableWindow(GetDlgItem(hDlg, IDOK),
|
|
(BOOL) SendMessage((HWND) lParam,
|
|
WM_GETTEXTLENGTH, 0, 0L));
|
|
break;
|
|
|
|
case IDOK:
|
|
GetDlgItemText(hDlg, IDD_TERMINATOR, tmpDialogParam, 10);
|
|
EndDialog(hDlg, TRUE);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
strcpy(tmpDialogParam, ";");
|
|
EndDialog(hDlg, FALSE);
|
|
break;
|
|
|
|
case IDD_HELP_BUTTON:
|
|
ISQL_win_err("Not implemented yet");
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL CALLBACK _export transDlgProc(HWND hDlg,
|
|
UINT iMessage,
|
|
WPARAM wParam, LPARAM lParam)
|
|
{
|
|
/********************************************************************
|
|
*
|
|
* t r a n s D l g P r o c
|
|
*
|
|
********************************************************************
|
|
*
|
|
* Functional description:
|
|
* Get transaction definition string by managing the TRANS dialog box.
|
|
*
|
|
* paramaters:
|
|
* hDlg - The window handle of this dialog box
|
|
* message - The message number
|
|
* wParam - The WPARAM parameter for this message
|
|
* lParam - The LPARAM parameter for this message
|
|
*
|
|
* returns:
|
|
* depends on message.
|
|
*
|
|
/********************************************************************/
|
|
|
|
switch (iMessage) {
|
|
case WM_INITDIALOG:
|
|
SendDlgItemMessage(hDlg, IDD_TRANS_STRING, EM_LIMITTEXT, 256, 0L);
|
|
return (TRUE);
|
|
|
|
case WM_COMMAND:
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
case IDD_TRANS_STRING:
|
|
if (GET_WM_COMMAND_CMD(wParam, lParam) == EN_CHANGE)
|
|
EnableWindow(GetDlgItem(hDlg, IDOK),
|
|
(BOOL) SendMessage((HWND) lParam,
|
|
WM_GETTEXTLENGTH, 0, 0L));
|
|
break;
|
|
|
|
case IDOK:
|
|
GetDlgItemText(hDlg, IDD_TRANS_STRING, tmpDialogParam, 256);
|
|
EndDialog(hDlg, TRUE);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
tmpDialogParam[0] = '\0';
|
|
EndDialog(hDlg, FALSE);
|
|
break;
|
|
|
|
case IDD_HELP_BUTTON:
|
|
ISQL_win_err("Not implemented yet");
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|