You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
334 lines
8.0 KiB
334 lines
8.0 KiB
/* File: C:\WACKER\TDLL\CPF_DLG.C (Created: 12-Jan-94)
|
|
*
|
|
* Copyright 1990,1993,1994 by Hilgraeve Inc. -- Monroe, MI
|
|
* All rights reserved
|
|
*
|
|
* $Revision: 9 $
|
|
* $Date: 3/26/02 8:48a $
|
|
*/
|
|
#include <windows.h>
|
|
#pragma hdrstop
|
|
|
|
#define DO_RAW_MODE 1
|
|
|
|
#include "stdtyp.h"
|
|
#include "mc.h"
|
|
|
|
#include <term\res.h>
|
|
#include "tdll.h"
|
|
#include "misc.h"
|
|
#include "assert.h"
|
|
#include "globals.h"
|
|
#include "session.h"
|
|
#include "capture.h"
|
|
#include "load_res.h"
|
|
#include "open_msc.h"
|
|
#include "errorbox.h"
|
|
#include "hlptable.h"
|
|
#include "htchar.h"
|
|
#include "file_msc.h"
|
|
|
|
#if !defined(DlgParseCmd)
|
|
#define DlgParseCmd(i,n,c,w,l) i=LOWORD(w);n=HIWORD(w);c=(HWND)l;
|
|
#endif
|
|
|
|
struct stSaveDlgStuff
|
|
{
|
|
/*
|
|
* Put in whatever else you might need to access later
|
|
*/
|
|
HSESSION hSession;
|
|
};
|
|
|
|
typedef struct stSaveDlgStuff SDS;
|
|
|
|
#define IDC_TF_FILE 100
|
|
#define FNAME_EDIT 105
|
|
#define IDC_TF_DIR 106
|
|
#define DIRECTORY_TEXT 107
|
|
#define BROWSE_BTN 123
|
|
#define IDC_PB_START 124
|
|
|
|
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
|
* FUNCTION:
|
|
* CaptureFileDlg
|
|
*
|
|
* DESCRIPTION:
|
|
* This is the dialog proc for the capture to file dialog. No suprises
|
|
* here.
|
|
*
|
|
* ARGUMENTS: Standard Windows dialog manager
|
|
*
|
|
* RETURNS: Standard Windows dialog manager
|
|
*
|
|
*/
|
|
INT_PTR CALLBACK CaptureFileDlg(HWND hDlg, UINT wMsg, WPARAM wPar, LPARAM lPar)
|
|
{
|
|
BOOL fRc;
|
|
DWORD dwMaxComponentLength;
|
|
DWORD dwFileSystemFlags;
|
|
HWND hwndChild;
|
|
INT nId;
|
|
INT nNtfy;
|
|
SDS *pS;
|
|
HSESSION hSession;
|
|
LPTSTR pszStr;
|
|
TCHAR acBuffer[MAX_PATH];
|
|
static DWORD aHlpTable[] = {FNAME_EDIT, IDH_TERM_CAPT_FILENAME,
|
|
IDC_TF_FILE, IDH_TERM_CAPT_FILENAME,
|
|
BROWSE_BTN, IDH_BROWSE,
|
|
IDC_TF_DIR, IDH_TERM_CAPT_DIRECTORY,
|
|
DIRECTORY_TEXT, IDH_TERM_CAPT_DIRECTORY,
|
|
IDC_PB_START, IDH_TERM_CAPT_START,
|
|
IDCANCEL, IDH_CANCEL,
|
|
IDOK, IDH_OK,
|
|
0, 0};
|
|
|
|
switch (wMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
{
|
|
DWORD dwStyle = SS_WORDELLIPSIS;
|
|
|
|
pS = (SDS *)malloc(sizeof(SDS));
|
|
if (pS == (SDS *)0)
|
|
{
|
|
/* TODO: decide if we need to display an error here */
|
|
EndDialog(hDlg, FALSE);
|
|
break;
|
|
}
|
|
|
|
pS->hSession = (HSESSION)lPar;
|
|
|
|
SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)pS);
|
|
|
|
hSession = pS->hSession;
|
|
|
|
mscCenterWindowOnWindow(hDlg, GetParent(hDlg));
|
|
|
|
// Determine whether long filenames are supported. JRJ 12/94
|
|
fRc = GetVolumeInformation(NULL, // pointer to root dir path buffer
|
|
NULL, // pointer to volume name buffer
|
|
0, // length of volume name buffer
|
|
NULL, // pointer to volume serial number buffer
|
|
&dwMaxComponentLength, // the prize - what I'm after
|
|
&dwFileSystemFlags, // ptr to file system flag DWORD
|
|
NULL, // pointer to file system name buffer
|
|
0); // length of file system name buffer
|
|
|
|
if(dwMaxComponentLength == 255)
|
|
{
|
|
// There is support for long file names.
|
|
SendDlgItemMessage(hDlg, FNAME_EDIT, EM_SETLIMITTEXT, FNAME_LEN, 0);
|
|
}
|
|
else
|
|
{
|
|
// There IS NOT support for long file names. Limit to twelve.
|
|
SendDlgItemMessage(hDlg, FNAME_EDIT, EM_SETLIMITTEXT, 12, 0);
|
|
}
|
|
|
|
/* Get the file name first */
|
|
TCHAR_Fill(acBuffer, TEXT('\0'), MAX_PATH);
|
|
|
|
cpfGetCaptureFilename(sessQueryCaptureFileHdl(hSession),
|
|
acBuffer, MAX_PATH);
|
|
|
|
SetDlgItemText(hDlg, FNAME_EDIT, acBuffer);
|
|
|
|
mscStripName(acBuffer);
|
|
|
|
pszStr = StrCharLast(acBuffer);
|
|
|
|
// Remove the trailing backslash from the name
|
|
// returned from mscStripName. Leave it on
|
|
// in the case of a root directory specification.
|
|
//
|
|
if (pszStr > acBuffer + (3 * sizeof(TCHAR)) )
|
|
{
|
|
if (pszStr && ( *pszStr == TEXT('\\') || *pszStr == TEXT('/')))
|
|
{
|
|
*pszStr = TEXT('\0');
|
|
}
|
|
}
|
|
|
|
if (GetWindowsMajorVersion() > 4)
|
|
{
|
|
dwStyle = SS_PATHELLIPSIS;
|
|
}
|
|
|
|
mscModifyToFit(GetDlgItem(hDlg, DIRECTORY_TEXT), acBuffer, dwStyle);
|
|
SetDlgItemText(hDlg, DIRECTORY_TEXT, acBuffer);
|
|
|
|
}
|
|
break;
|
|
|
|
case WM_DESTROY:
|
|
break;
|
|
|
|
case WM_CONTEXTMENU:
|
|
doContextHelp(aHlpTable, wPar, lPar, TRUE, TRUE);
|
|
break;
|
|
|
|
case WM_HELP:
|
|
doContextHelp(aHlpTable, wPar, lPar, FALSE, FALSE);
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
|
|
/*
|
|
* Did we plan to put a macro in here to do the parsing ?
|
|
*/
|
|
DlgParseCmd(nId, nNtfy, hwndChild, wPar, lPar);
|
|
|
|
switch (nId)
|
|
{
|
|
case IDC_PB_START:
|
|
{
|
|
int nDef;
|
|
|
|
pS = (SDS *)GetWindowLongPtr(hDlg, DWLP_USER);
|
|
assert(pS);
|
|
|
|
hSession = pS->hSession;
|
|
|
|
/*
|
|
* Do whatever saving is necessary
|
|
*/
|
|
nDef = TRUE;
|
|
|
|
TCHAR_Fill(acBuffer, TEXT('\0'), MAX_PATH);
|
|
GetDlgItemText(hDlg, FNAME_EDIT, acBuffer, MAX_PATH);
|
|
|
|
// Error check the user-supplied name.
|
|
if(ValidateFileName(acBuffer) == 1)
|
|
{
|
|
cpfSetCaptureFilename(sessQueryCaptureFileHdl(hSession),
|
|
acBuffer, nDef);
|
|
|
|
|
|
#if defined(DO_RAW_MODE)
|
|
cpfSetCaptureMode(sessQueryCaptureFileHdl(hSession),
|
|
CPF_MODE_RAW,
|
|
FALSE);
|
|
#endif
|
|
|
|
/*
|
|
* TODO: actually start the capture to file
|
|
*/
|
|
cpfSetCaptureState(sessQueryCaptureFileHdl(hSession),
|
|
CPF_CAPTURE_ON);
|
|
|
|
/* Free the storage */
|
|
free(pS);
|
|
pS = (SDS *)0;
|
|
EndDialog(hDlg, TRUE);
|
|
}
|
|
else
|
|
{
|
|
// There were problems.
|
|
// e.g. The user specified a bad capture file name, or
|
|
// for some other reason the file couldn't be created.
|
|
mscMessageBeep(MB_ICONHAND);
|
|
|
|
// For now, I'm going to assume that whatever the problem is,
|
|
// the only thing the user can do to try again is to specify
|
|
// a different filename. So, I'm setting the focus back to
|
|
// the filename edit control.
|
|
SetFocus(GetDlgItem(hDlg,FNAME_EDIT));
|
|
}
|
|
}
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
pS = (SDS *)GetWindowLongPtr(hDlg, DWLP_USER);
|
|
/* Free the storeage */
|
|
free(pS);
|
|
pS = (SDS *)0;
|
|
EndDialog(hDlg, FALSE);
|
|
break;
|
|
|
|
case BROWSE_BTN:
|
|
{
|
|
DWORD dwStyle = SS_WORDELLIPSIS;
|
|
|
|
pS = (SDS *)GetWindowLongPtr(hDlg, DWLP_USER);
|
|
if (pS)
|
|
{
|
|
LPTSTR pszRet;
|
|
TCHAR acTitle[64];
|
|
TCHAR acList[64];
|
|
|
|
hSession = pS->hSession;
|
|
|
|
pszRet = NULL;
|
|
TCHAR_Fill(acBuffer, TEXT('\0'), MAX_PATH);
|
|
|
|
GetDlgItemText(hDlg, DIRECTORY_TEXT, acBuffer, MAX_PATH - 1);
|
|
|
|
LoadString(glblQueryDllHinst(),
|
|
IDS_CPF_DLG_FILE,
|
|
acTitle,
|
|
sizeof(acTitle) / sizeof(TCHAR));
|
|
|
|
resLoadFileMask(glblQueryDllHinst(),
|
|
IDS_CPF_FILES1,
|
|
2,
|
|
acList,
|
|
sizeof(acList) / sizeof(TCHAR));
|
|
|
|
//jmh 3/24/97 This was gnrcFindFileDialog, but this lets you
|
|
// enter a non-existent file name, which is what we really want
|
|
pszRet = gnrcSaveFileDialog(hDlg,
|
|
acTitle,
|
|
acBuffer,
|
|
acList,
|
|
"");
|
|
|
|
if (pszRet != NULL)
|
|
{
|
|
StrCharCopyN(acBuffer, pszRet, MAX_PATH);
|
|
acBuffer[MAX_PATH - 1] = TEXT('\0');
|
|
SetDlgItemText(hDlg, FNAME_EDIT, pszRet);
|
|
|
|
free(pszRet);
|
|
pszRet = NULL;
|
|
|
|
mscStripName(acBuffer);
|
|
|
|
pszStr = StrCharLast(acBuffer);
|
|
|
|
// Remove the trailing backslash from the name
|
|
// returned from mscStripName. Leave it on
|
|
// in the case of a root directory specification.
|
|
//
|
|
if (pszStr > acBuffer + (3 * sizeof(TCHAR)) )
|
|
{
|
|
if (pszStr && ( *pszStr == TEXT('\\') || *pszStr == TEXT('/')))
|
|
{
|
|
*pszStr = TEXT('\0');
|
|
}
|
|
}
|
|
|
|
if (GetWindowsMajorVersion() > 4)
|
|
{
|
|
dwStyle = SS_PATHELLIPSIS;
|
|
}
|
|
|
|
mscModifyToFit(GetDlgItem(hDlg, DIRECTORY_TEXT), acBuffer, dwStyle);
|
|
SetDlgItemText(hDlg, DIRECTORY_TEXT, acBuffer);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|