mirror of https://github.com/lianthony/NT4.0
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.
378 lines
10 KiB
378 lines
10 KiB
#include "windows.h"
|
|
#include <port1632.h>
|
|
#include "dos.h"
|
|
#include "global.h"
|
|
#include "parse.h"
|
|
#include "stdio.h"
|
|
#include "fcntl.h"
|
|
#include "sys\types.h"
|
|
#include "sys\stat.h"
|
|
#include "direct.h"
|
|
#include "string.h"
|
|
#include "io.h"
|
|
#include "errno.h"
|
|
//int errno;
|
|
|
|
CHAR FileName[LEN_EDITBOX];
|
|
CHAR PathName[LEN_EDITBOX];
|
|
CHAR EditStr[LEN_EDITBOX];
|
|
CHAR str[255];
|
|
CHAR OpenErr[20] = "Cannot open ";
|
|
|
|
#ifdef WIN32
|
|
WIN32_FIND_DATA FindData;
|
|
HANDLE hFind;
|
|
#else
|
|
struct find_t c_file;
|
|
#endif
|
|
|
|
VOID SeparateFile(HWND, LPSTR, LPSTR, LPSTR);
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
FUNCTION: SeparateFile(HWND, int, LPSTR, LPSTR)
|
|
|
|
PURPOSE: determine if filename and path spec point to valid file
|
|
|
|
****************************************************************************/
|
|
|
|
INT APIENTRY ParseFileName(hDlg,FLNAME,lpCurPath,lpCurSpec)
|
|
|
|
HWND hDlg;
|
|
INT FLNAME;
|
|
LPSTR lpCurPath,lpCurSpec;
|
|
|
|
{
|
|
HFILE hndl;
|
|
INT length;
|
|
INT location;
|
|
|
|
OFSTRUCT OpenBuf;
|
|
|
|
GetDlgItemText(hDlg, FLNAME, EditStr, LEN_EDITBOX);
|
|
|
|
SeparateFile(hDlg, (LPSTR)PathName, (LPSTR)FileName, (LPSTR)EditStr);
|
|
|
|
/*****************************************************
|
|
Filename is Not Null and does not contain wildcards
|
|
possibilities : - a subdirectory was entered (doesn't end in \)
|
|
- a filename only was entered
|
|
- a combination of path and filename was entered
|
|
In each of these cases the EditStr is validated and then either
|
|
the listboxes are updated or the file is opened.
|
|
******************************************************/
|
|
|
|
|
|
if ((FileName[0]) && !(strchr(FileName, '*') || strchr(FileName, '?'))) {
|
|
#ifdef WIN32
|
|
if ((hFind = FindFirstFile (EditStr, &FindData)) == (HANDLE) -1)
|
|
#else
|
|
if (_dos_findfirst(EditStr,_A_NORMAL | _A_SUBDIR, &c_file) != 0)
|
|
#endif
|
|
{
|
|
|
|
// special case EditStr ending in ".." or "."
|
|
if ((lstrcmp(FileName,"..") == 0) || (lstrcmp(FileName,".") == 0))
|
|
{
|
|
lstrcpy(FileName,EditStr);
|
|
lstrcat(FileName,"\\*.*");
|
|
#ifdef WIN32
|
|
if ((hFind = FindFirstFile (EditStr, &FindData)) != (HANDLE) -1)
|
|
#else
|
|
if (_dos_findfirst(FileName,_A_NORMAL | _A_SUBDIR, &c_file) == 0)
|
|
#endif
|
|
{
|
|
DlgDirList(hDlg,EditStr,0,0,0x0000);
|
|
#ifdef WIN32
|
|
GetCurrentDirectory (LEN_EDITBOX, lpCurPath);
|
|
FindClose (hFind);
|
|
#else
|
|
_getcwd(lpCurPath, LEN_EDITBOX);
|
|
#endif
|
|
return (VALID_FILESPEC);
|
|
}
|
|
else
|
|
{
|
|
return (INVALID_FILESPEC);
|
|
}
|
|
}
|
|
|
|
|
|
// Added this code to append extension if there wasn't one [NB]
|
|
// Added ability to return invalid filename if
|
|
// FileName > 12 or extension > 4 characters
|
|
if (instr(FileName,".") == NULL)
|
|
{
|
|
if (lstrlen(FileName) < 9)
|
|
{
|
|
lstrcat(FileName,DEFAULT_EXT);
|
|
lstrcpy(lpCurSpec,FileName);
|
|
}
|
|
else
|
|
{
|
|
return (INVALID_FILESPEC);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (lstrlen(FileName) > 12)
|
|
{
|
|
return (INVALID_FILESPEC);
|
|
}
|
|
length = lstrlen(FileName);
|
|
location = strcspn(FileName,".");
|
|
if ((lstrlen(FileName) - strcspn(FileName,".")) > 4)
|
|
{
|
|
return (INVALID_FILESPEC);
|
|
}
|
|
lstrcpy(lpCurSpec,FileName);
|
|
}
|
|
if (hndl = OpenFile (EditStr, &OpenBuf, OF_CREATE) == -1)
|
|
{
|
|
#ifdef WIN32
|
|
GetCurrentDirectory (LEN_EDITBOX, lpCurPath);
|
|
#else
|
|
_getcwd (lpCurPath, LEN_EDITBOX);
|
|
#endif
|
|
return (INVALID_FILESPEC);
|
|
}
|
|
else
|
|
{
|
|
_lclose (hndl);
|
|
MDeleteFile(EditStr);
|
|
|
|
if (PathName[0] != 0)
|
|
{
|
|
DlgDirList(hDlg,PathName,0,0,0x0000);
|
|
// getcwd(lpCurPath,LEN_EDITBOX);
|
|
}
|
|
#ifdef WIN32
|
|
GetCurrentDirectory (LEN_EDITBOX, lpCurPath);
|
|
#else
|
|
_getcwd(lpCurPath,LEN_EDITBOX);
|
|
#endif
|
|
return (VALID_FILENAME);
|
|
}
|
|
}
|
|
else // found the file
|
|
{
|
|
#ifdef WIN32
|
|
if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
|
{
|
|
DlgDirList(hDlg,EditStr,0,0,0x0000);
|
|
GetCurrentDirectory (LEN_EDITBOX, lpCurPath);
|
|
FindClose (hFind);
|
|
return (VALID_FILESPEC);
|
|
}
|
|
#else
|
|
if (c_file.attrib & _A_SUBDIR)
|
|
{
|
|
DlgDirList(hDlg,EditStr,NULL,NULL,0x0000);
|
|
_getcwd(lpCurPath,LEN_EDITBOX);
|
|
return (VALID_FILESPEC);
|
|
}
|
|
#endif
|
|
else // not a directory
|
|
{
|
|
// Added this code to append extension if there wasn't one [NB]
|
|
// Added ability to return invalid filename if
|
|
// FileName > 12 or extension > 4 characters
|
|
if (instr(FileName,".") == NULL)
|
|
{
|
|
if (lstrlen(FileName) < 9)
|
|
{
|
|
lstrcat(FileName,DEFAULT_EXT);
|
|
lstrcpy(lpCurSpec,FileName);
|
|
}
|
|
else
|
|
{
|
|
return (INVALID_FILESPEC);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (lstrlen(FileName) > 12)
|
|
{
|
|
return (INVALID_FILESPEC);
|
|
}
|
|
length = lstrlen(FileName);
|
|
location = strcspn(FileName,".");
|
|
if ((lstrlen(FileName) - strcspn(FileName,".")) > 4)
|
|
{
|
|
return (INVALID_FILESPEC);
|
|
}
|
|
lstrcpy(lpCurSpec,FileName);
|
|
}
|
|
|
|
#ifdef WIN32
|
|
GetCurrentDirectory (LEN_EDITBOX, lpCurPath);
|
|
#else
|
|
_getcwd(lpCurPath,LEN_EDITBOX);
|
|
#endif
|
|
return (EXIST_FILESPEC);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/*****************************************************
|
|
Filename is either Null or contains wildcards
|
|
possibilities : - only a \ was entered (no filespec)
|
|
- only a filespec w/* or ? was entered
|
|
- a combination of path and filename was
|
|
entered with wildcards
|
|
In each of these cases the path is validated and the
|
|
current filespec is updated to represent the wildcards.
|
|
The listboxes are then updated.
|
|
******************************************************/
|
|
|
|
if (strcmp(PathName,"\\") == 0)
|
|
{
|
|
DlgDirList(hDlg,PathName,0,0,0x0000);
|
|
_getcwd(lpCurPath,LEN_EDITBOX);
|
|
if (FileName[0] != 0)
|
|
lstrcpy(lpCurSpec,FileName);
|
|
return (VALID_FILESPEC);
|
|
}
|
|
|
|
if ((PathName[0] == 0) && (FileName[0] != 0))
|
|
{
|
|
_getcwd(lpCurPath,LEN_EDITBOX);
|
|
lstrcpy(lpCurSpec,FileName);
|
|
return (VALID_FILESPEC);
|
|
}
|
|
|
|
if (PathName[0] != 0)
|
|
{
|
|
lstrcpy(str,PathName);
|
|
lstrcat(str,"*.*");
|
|
|
|
#ifdef WIN32
|
|
if ((hFind = FindFirstFile (str, &FindData)) == (HANDLE) -1)
|
|
#else
|
|
if (_dos_findfirst(str, _A_NORMAL | _A_SUBDIR, &c_file) != 0)
|
|
#endif
|
|
|
|
{
|
|
return (INVALID_FILESPEC);
|
|
}
|
|
else
|
|
{
|
|
DlgDirList(hDlg,PathName,0,0,0x0000);
|
|
|
|
#ifdef WIN32
|
|
GetCurrentDirectory (LEN_EDITBOX, lpCurPath);
|
|
FindClose (hFind);
|
|
#else
|
|
_getcwd(lpCurPath, LEN_EDITBOX);
|
|
#endif
|
|
if (FileName[0] != 0)
|
|
lstrcpy(lpCurSpec,FileName);
|
|
return (VALID_FILESPEC);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
FUNCTION: SeparateFile(HWND, LPSTR, LPSTR, LPSTR)
|
|
|
|
PURPOSE: Separate filename and pathname
|
|
|
|
****************************************************************************/
|
|
|
|
VOID SeparateFile(hDlg, lpDestPath, lpDestFileName, lpSrcFileName)
|
|
HWND hDlg;
|
|
LPSTR lpDestPath, lpDestFileName, lpSrcFileName;
|
|
{
|
|
LPSTR lpTmp;
|
|
CHAR cTmp;
|
|
|
|
lpTmp = lpSrcFileName + (LONG) lstrlen(lpSrcFileName);
|
|
while (*lpTmp != ':' && *lpTmp != '\\' && lpTmp > lpSrcFileName)
|
|
lpTmp = AnsiPrev(lpSrcFileName, lpTmp);
|
|
if (*lpTmp != ':' && *lpTmp != '\\')
|
|
{
|
|
lstrcpy(lpDestFileName, lpSrcFileName);
|
|
lpDestPath[0] = 0;
|
|
return;
|
|
}
|
|
lstrcpy(lpDestFileName, lpTmp + 1);
|
|
cTmp = *(lpTmp + 1);
|
|
lstrcpy(lpDestPath, lpSrcFileName);
|
|
*(lpTmp + 1) = cTmp;
|
|
lpDestPath[(lpTmp - lpSrcFileName) + 1] = 0;
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
FUNCTION: UpdateListBoxes(HWND, int, int, int, int, LPSTR, LPSTR)
|
|
|
|
PURPOSE: Update dialog list boxes using new path as file spec.
|
|
|
|
****************************************************************************/
|
|
|
|
|
|
VOID APIENTRY UpdateListBoxes(hDlg,FILELB,DIRLB,DIRNAME,FLNAME,
|
|
lpPathSpec, lpCurSpec)
|
|
|
|
HWND hDlg;
|
|
INT FILELB, DIRLB, DIRNAME, FLNAME;
|
|
LPSTR lpPathSpec,lpCurSpec;
|
|
|
|
{
|
|
CHAR tempSpec[150];
|
|
|
|
lstrcpy(tempSpec,lpCurSpec);
|
|
|
|
if ((strchr(tempSpec, '*') == 0) && (strchr(tempSpec, '?') == 0))
|
|
{
|
|
/*NAMECHANGE*/
|
|
lstrcpy(tempSpec,"*.SCN");
|
|
}
|
|
else
|
|
{
|
|
// use lpCurSpec
|
|
}
|
|
|
|
if (DlgDirList(hDlg,lpPathSpec,DIRLB,DIRNAME,0x4000 | 0x0010 | 0x8000) != 0)
|
|
{
|
|
DlgDirList(hDlg,(LPSTR)tempSpec,FILELB,0,0x0000);
|
|
SetDlgItemText(hDlg,FLNAME,lpCurSpec);
|
|
SendDlgItemMessage(hDlg,
|
|
FLNAME,
|
|
EM_SETSEL,
|
|
GET_EM_SETSEL_MPS (0, 0x7fff));
|
|
SetFocus(GetDlgItem(hDlg, FLNAME));
|
|
_getcwd(lpPathSpec,LEN_EDITBOX);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
VOID APIENTRY QualifyFileName(lpCurPath,lpCurSpec,lpQualifiedFile)
|
|
|
|
LPSTR lpCurPath,lpCurSpec,lpQualifiedFile;
|
|
|
|
{
|
|
if ((lpCurPath[0] != 0) && (lpCurSpec[0] != 0)) {
|
|
if (lpCurPath[lstrlen(lpCurPath)-1] != '\\')
|
|
lstrcat(lpCurPath,"\\");
|
|
|
|
lstrcpy(lpQualifiedFile,lpCurPath);
|
|
lstrcat(lpQualifiedFile,lpCurSpec);
|
|
} else {
|
|
lpQualifiedFile[0] = 0;
|
|
}
|
|
|
|
};
|