|
|
/*===========================================================================*/ /* Copyright (c) 1987 - 1988, Future Soft Engineering, Inc. */ /* Houston, Texas */ /*===========================================================================*/
#define NOGDICAPMASKS TRUE
#define NOICONS TRUE
#define NOKEYSTATES TRUE
#define NOSYSCOMMANDS TRUE
#define NOATOM TRUE
#define NOCLIPBOARD TRUE
#define NODRAWTEXT TRUE
#define NOMINMAX TRUE
#define NOOPENFILE TRUE
#define NOSCROLL TRUE
#define NOHELP TRUE
#define NOPROFILER TRUE
#define NODEFERWINDOWPOS TRUE
#define NOPEN TRUE
#define NO_TASK_DEFINES TRUE
#define NOLSTRING TRUE
#define WIN31 TRUE
#include <windows.h>
#include <port1632.h>
#include <dcrc.h> /* mbbx 2.00 ... */
#include "commdlg.h"
#include <dynacomm.h>
#include <fileopen.h>
#include "dlgs.h"
#include <direct.h> /* adding this for chdir prototype -sdj*/
/*---------------------------------------------------------------------------*/ /* FileOpen() - [mbb] */ /*---------------------------------------------------------------------------*/
VOID NEAR PASCAL PoundToNull(LPSTR str) {
while(*str) { if(*str == '#') *str = 0x00; str++; } }
VOID NEAR PASCAL LoadFilterString(HANDLE hInst,WORD ResID,LPSTR szFilter, INT len,DWORD *FilterIndex) {
switch(ResID) { case FO_DBSNDTEXT: case FO_DBRCVTEXT: LoadString(hInst,STR_FILTERALL, &szFilter[LoadString(hInst,STR_FILTERTXT,szFilter,len)],len); *FilterIndex = 1; break;
case FO_DBSNDFILE: case FO_DBRCVFILE: LoadString(hInst,STR_FILTERALL,szFilter,len); *FilterIndex = 1; break;
default: LoadString(hInst,STR_FILTERTRM,szFilter,len); *FilterIndex = 1; }
PoundToNull(szFilter); }
VOID NEAR PASCAL AddDirMod(CHAR *path) { INT len=0;
while(path[len]){ if(path[len] == '.') return; if(++len == (FO_MAXPATHLENGTH-1)){ *path = 0; return; } } path[len] = '\\'; path[len+1] = 0; }
BOOL FileOpen(BYTE *filePath, BYTE *fileName1,BYTE *fileName2, BYTE *fileExt,BYTE * titleText,WORD wResID,DLGPROC lpFilter, WORD wMode) { BOOL FileOpen = FALSE; // -sdj was unreferenced local var: LPDTA saveDTA;
BYTE savePath[FO_MAXPATHLENGTH]; FILEOPENDATA FOData; // -sdj was unreferenced local var: BYTE work[80];
HWND whichParent; CHAR szFilter[75]; /* default filter text/spec. for above */ CHAR szFileName[STR255]; /* Fully qualified name of file */ OPENFILENAME OFN; INT rc;
#ifndef BUGBYPASS
if (TRUE) #else
if(setPath(filePath, FALSE, savePath)) #endif
{ setFilePath(fileName1);
strcpy(FOData.file1, fileName1); strcpy(FOData.file2, (fileName2 != NULL) ? fileName2 : NULL_STR); strcpy(FOData.extent, fileExt); strcpy(FOData.title, (titleText != NULL) ? titleText : NULL_STR); FOData.wResID = ((wResID != 0) ? wResID : (!(wMode & FO_PUTFILE) ? FO_DBFILEOPEN : FO_DBFILESAVE)); /* mbbx 1.10: CUA... */ FOData.lpFilter = lpFilter; FOData.wMode = wMode; pFOData = &FOData;
whichParent = GetActiveWindow(); if ( (whichParent == NULL) || (!IsChild(hItWnd,whichParent)) ) whichParent = hItWnd; /* jtf 3.15 */
/* OFN structure intialization for common open dialog. 02/19/91*/ LoadFilterString(hInst,FOData.wResID,szFilter,sizeof(szFilter),&OFN.nFilterIndex); szFileName[0] = '\0';
OFN.lStructSize = sizeof(OPENFILENAME); OFN.lpstrTitle = NULL; /* Address later to whichever dialog*/ OFN.lpstrCustomFilter = NULL; OFN.nMaxCustFilter = 0L; OFN.lpstrDefExt = NULL; /* ?? address later forcing trm. */ OFN.lpstrInitialDir = NULL; OFN.lpstrFile = szFileName; OFN.nMaxFile = sizeof(szFileName); OFN.lpfnHook = dbFileOpen; OFN.lCustData = 0L; OFN.lpTemplateName = MAKEINTRESOURCE(FOData.wResID); OFN.hInstance = hInst; OFN.hwndOwner = whichParent; OFN.Flags = OFN_HIDEREADONLY|OFN_ENABLETEMPLATE|OFN_ENABLEHOOK; OFN.lpstrFileTitle = NULL; OFN.nMaxFileTitle = 0L; OFN.lpstrFilter = szFilter;
if((FOData.wResID == FO_DBFILESAVE) || (FOData.wResID == FO_DBRCVFILE) || (FOData.wResID == FO_DBRCVTEXT)) { FileOpen = GetSaveFileName(&OFN); } else { FileOpen = GetOpenFileName(&OFN); }
if(rc = CommDlgExtendedError()) { testBox(whichParent,-(MB_ICONHAND|MB_SYSTEMMODAL|MB_OK),STR_ERRCAPTION,NoMemStr); FileOpen = FALSE; } #ifdef ORGCODE
_getcwd(filePath); #else
_getcwd(filePath,PATHLEN); #endif
if(FileOpen) {
// sdj: the way this code is working right now, terminal
// sdj: calls the commdlg fileopen with a dbFileOpen hook
// sdj: function which saves FOData.file with just the name
// sdj: part of the file, and the called of FileOpen does
// sdj: the cat of getcwd with this filename. This is broken
// sdj: in case where terminal sets chdir to c:\ and commdlg
// sdj: while exiting sets the dir back to where it was so
// sdj: instead of c:\boot.ini user views d:\...\boot.ini!
// sdj: solution is to set filename1 to FileName part of szfilename
// sdj: which is what comdlg gives as a FQN and set filePath to
// sdj: the path part of this. it is very unlikely that commdlg
// sdj: will return szFileName with no '\\' in it but if strrchr
// sdj: fails, stick with the original pathrelated bug!
if (strrchr(szFileName,'\\')) { strcpy(fileName1,(strrchr(szFileName,'\\')+1)); *(strrchr(szFileName,'\\')) = 0; strcpy(filePath,szFileName); }
else{
switch(FOData.wResID) { case FO_DBRCVFILE: case FO_DBRCVTEXT: strcpy(fileName1, FOData.file); break; case FO_DBFILESAVE: strcpy(fileName1, szFileName); break; default: strcpy(fileName1, FOData.file1); break; }/* switch(resID) */ }// end of if{!strrchr}else{sw:original stuff}
if(fileName2 != NULL) strcpy(fileName2, FOData.file2);
if(!OFN.nFileExtension) { if(!strchr(fileName1, '.')) strcat(fileName1, "."); } else if(FOData.wMode & FO_FORCEEXTENT) { if(strchr(fileExt, '.')) strcpy(fileExt, strchr(fileExt, '.') + 1); if(strchr(fileName1, '.')) { strcpy(strchr(fileName1, '.') + 1, fileExt); } else { strcat(fileName1, "."); strcat(fileName1, fileExt); }
} else strcpy(fileExt, FOData.extent);
if(wResID == FO_DBFILETYPE) FileOpen = FOData.nType; }
setPath(savePath, FALSE, NULL); }
SetFocus(hTermWnd);
return(FileOpen); }
/*---------------------------------------------------------------------------*/ /* dbFileOpen() - [mbb] */ /*---------------------------------------------------------------------------*/
INT_PTR APIENTRY dbFileOpen(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { BOOL result; BYTE OEMname[STR255]; /* jtf 3.20 */ BYTE savePath[STR255]; /* rjs bugs 018 */
updateTimer(); /* code specific to DynaComm!!! */
switch(message) { case WM_INITDIALOG: // use the OFN stuct to set this
if(*(pFOData->title) != 0) SetWindowText(hDlg, pFOData->title); /* jtf terminal */
SendDlgItemMessage(hDlg, edt1, EM_LIMITTEXT, FO_MAXPATHLENGTH, 0L); SendDlgItemMessage(hDlg, edt1, EM_SETSEL, GET_EM_SETSEL_MPS(0, MAKELONG(0,32767)));
if(pFOData->wResID == FO_DBFILETYPE) /* mbbx 1.10: CUA... */ (*(pFOData->lpFilter)) (hDlg, message, wParam, lParam); /* mbbx 2.00: new FO hook scheme... */
switch(pFOData->wResID) /* mbbx 2.00: new FO hook scheme... */ { case FO_DBFILETYPE: break;
case FO_DBSNDFILE: case FO_DBRCVFILE: ShowWindow(GetDlgItem(hDlg, FO_IDPROMPT2), SW_HIDE); ShowWindow(GetDlgItem(hDlg, FO_IDFILENAME2), SW_HIDE); SendDlgItemMessage(hDlg, FO_IDFILENAME2, EM_LIMITTEXT, FO_MAXPATHLENGTH, 0L); break;
default: if(pFOData->lpFilter != NULL) (*(pFOData->lpFilter)) (hDlg, message, wParam, lParam); break; }
if((pFOData->wMode & FO_PUTFILE) && !FO_SaveFileName(hDlg)) /* mbbx 2.00 ... */ { SetDlgItemText(hDlg, edt1, pFOData->file1); strcpy(pFOData->title, pFOData->file1); } if(pFOData->lpFilter != NULL) /* jtf 3.22 */ (*(pFOData->lpFilter)) (hDlg, message, wParam, lParam); return(TRUE); /* Bug 7115, let dlgmgr set focus. clarkc */
case WM_COMMAND: switch(GET_WM_COMMAND_ID(wParam, lParam)) { case IDOK: { HWND focus = GetFocus();
if(focus == GetDlgItem(hDlg,edt1) || focus == GetDlgItem(hDlg,lst1) || focus == GetDlgItem(hDlg,IDOK)) { if((pFOData->wMode & FO_GETFILENAME2) && (pFOData->wMode & FO_NONDOSFILE)) { if(!GetDlgItemText(hDlg, edt1, pFOData->file2, FO_MAXPATHLENGTH)) pFOData->wMode &= ~FO_GETFILENAME2; if(!GetDlgItemText(hDlg, FO_IDFILENAME2, pFOData->file, FO_MAXPATHLENGTH)) strcpy(pFOData->file, (pFOData->wMode & FO_GETFILENAME2) ? pFOData->file2 : pFOData->file1); } else { if(!GetDlgItemText(hDlg, edt1, pFOData->file, FO_MAXPATHLENGTH)) strcpy(pFOData->file, pFOData->file1); if(pFOData->wMode & FO_GETFILENAME2) if(!GetDlgItemText(hDlg, FO_IDFILENAME2, pFOData->file2, FO_MAXPATHLENGTH)) pFOData->wMode &= ~FO_GETFILENAME2; }
result = TRUE; break; } else return(FALSE); }
case IDCANCEL: *(pFOData->file2) = 0; pFOData->wMode &= ~FO_GETFILENAME2; result = FALSE; break;
case edt1: if(GET_WM_COMMAND_CMD(wParam, lParam) == EN_CHANGE) { if(!((pFOData->wMode & FO_BATCHMODE) && (pFOData->wMode & FO_PUTFILE))) /* mbbx 1.01: ymodem */ EnableWindow(GetDlgItem(hDlg, IDOK), (BOOL)SendDlgItemMessage(hDlg, edt1, WM_GETTEXTLENGTH, 0, 0L));
if(pFOData->wMode & FO_GETFILENAME2) { *(pFOData->file2) = 0; pFOData->wMode &= ~FO_GETFILENAME2; ShowWindow(GetDlgItem(hDlg, FO_IDPROMPT2), SW_HIDE); ShowWindow(GetDlgItem(hDlg, FO_IDFILENAME2), SW_HIDE); }
if(pFOData->lpFilter != NULL) /* mbbx 2.00: new FO hook scheme... */ (*(pFOData->lpFilter)) (hDlg, message, wParam, lParam); } return(FALSE);
case lst1: if(GET_WM_COMMAND_CMD(wParam, lParam) == LBN_SELCHANGE) { FO_SetListItem(hDlg, lst1, FALSE); if(pFOData->lpFilter != NULL) /* mbbx 2.00: new FO hook scheme... */ (*(pFOData->lpFilter)) (hDlg, message, wParam, lParam); return(FALSE); } result = TRUE; if(GET_WM_COMMAND_CMD(wParam, lParam) == LBN_DBLCLK) break; return(FALSE); break;
default: switch(pFOData->wResID) /* mbbx 2.00: new FO hook scheme... */ { case FO_DBFILETYPE: /* mbbx 1.10: CUA... */ /* BUG BUG, what does this call, wParam/lParam may need fixing!*/ if(!(*(pFOData->lpFilter)) (hDlg, message, wParam, lParam)) { SetDlgItemText(hDlg, FO_IDFILENAME, pFOData->file1); } break;
default: if(pFOData->lpFilter != NULL) (*(pFOData->lpFilter)) (hDlg, message, wParam, lParam); break; }
return(FALSE); } break;
default: return(FALSE); }
if(result) { if(!setPath(pFOData->file, TRUE, savePath)) { FO_ErrProc(STRDRIVEDIR, MB_OK | MB_ICONHAND, hDlg); return(FO_SetCtrlFocus(hDlg, GetFocus())); }
if(!((pFOData->wMode & FO_BATCHMODE) && (GetKeyState(VK_CONTROL) & 0x8000))) /* mbbx 1.01: ymodem */ { AnsiUpper(pFOData->file); strcpy(pFOData->file1, pFOData->file);
if(FO_AddFileType(pFOData->file, pFOData->extent)) return(FALSE);
if(!FO_IsLegalDOSFN(pFOData->file)) /* mbbx 2.00: no forced extents... */ { if(((pFOData->wMode & FO_NONDOSFILE) && (pFOData->wMode & FO_GETFILENAME2)) || (!(pFOData->wMode & FO_NONDOSFILE) && !(pFOData->wMode & FO_GETFILENAME2)) || !FO_IsLegalFN(pFOData->file)) { FO_ErrProc(FO_STR_BADFILENAME, MB_OK | MB_ICONHAND,hDlg); return(FO_SetCtrlFocus(hDlg, GetFocus())); } else if(!(pFOData->wMode & FO_GETFILENAME2)) { pFOData->wMode |= FO_GETFILENAME2; ShowWindow(GetDlgItem(hDlg, FO_IDPROMPT2), SW_SHOW); ShowWindow(GetDlgItem(hDlg, FO_IDFILENAME2), SW_SHOW); return(FO_SetCtrlFocus(hDlg, GetFocus())); } }
if(!getFileType(pFOData->file, pFOData->extent)) /* mbbx 2.00 ... */ { forceExtension(pFOData->file, pFOData->extent+2, FALSE); /* mbbx 2.00: no forced extents... */ }
// JYF -- replace these two lines with the below if() to remove the use of AnsiToOem()
//
//AnsiToOem(pFOData->file, (LPSTR) OEMname); /* jtf 3.20 */
//if((pFOData->wMode & FO_FILEEXIST) && !fileExist(OEMname)) /* jtf 3.20 */
if ((pFOData->wMode & FO_FILEEXIST) && !fileExist(pFOData->file)) { /* rjs bugs 018 */ if(!(pFOData->wMode & FO_PUTFILE)) /* mbbx 1.10: CUA... */ DlgDirList(hDlg, pFOData->file, lst1, 0, FO_LBFILE); else strcpy(pFOData->file, pFOData->title); SetDlgItemText(hDlg, ((pFOData->wMode & FO_GETFILENAME2) && (pFOData->wMode & FO_NONDOSFILE)) ? FO_IDFILENAME2 : FO_IDFILENAME, pFOData->file); setFilePath(savePath); /* end of rjs bugs 018 */ FO_ErrProc(FO_STR_FILENOTFOUND, MB_OK | MB_ICONHAND,hDlg); return(FO_SetCtrlFocus(hDlg, GetFocus())); }
if((pFOData->wMode & FO_REMOTEFILE) && !(pFOData->wMode & FO_GETFILENAME2)) { pFOData->wMode |= FO_GETFILENAME2; SetDlgItemText(hDlg, FO_IDFILENAME2, pFOData->file); ShowWindow(GetDlgItem(hDlg, FO_IDPROMPT2), SW_SHOW); ShowWindow(GetDlgItem(hDlg, FO_IDFILENAME2), SW_SHOW); return(FO_SetCtrlFocus(hDlg, GetDlgItem(hDlg, FO_IDFILENAME2))); }
// JYF -- replace these two lines with following if() to remove the use of AnsiToOem()
//
//AnsiToOem(pFOData->file, (LPSTR) OEMname); /* jtf 3.20 */
//if(((pFOData->wMode & (FO_PUTFILE | FO_FILEEXIST)) == FO_PUTFILE) && fileExist(OEMname)) /* jtf 3.20 */
if (((pFOData->wMode & (FO_PUTFILE | FO_FILEEXIST)) == FO_PUTFILE) && fileExist(pFOData->file)) { if(FO_ErrProc(FO_STR_REPLACEFILE, MB_YESNO | MB_ICONEXCLAMATION,hDlg) == IDNO) return(FO_SetCtrlFocus(hDlg, GetFocus())); } }
AnsiUpper(pFOData->file); /* mbbx 2.00: new FO hook scheme... */ strcpy(pFOData->file1, pFOData->file); AnsiUpper(pFOData->file2); }
if(pFOData->lpFilter != NULL) /* mbbx 2.00: new FO hook scheme... */ (*(pFOData->lpFilter)) (hDlg, WM_NULL, result, 0L);
return(FALSE); }
/*---------------------------------------------------------------------------*/ /* FO_SaveFileName() - [mbb] */ /*---------------------------------------------------------------------------*/
BOOL NEAR FO_SaveFileName(HWND hDlg) { register BYTE *pch;
GetDlgItemText(hDlg, ((pFOData->wMode & FO_GETFILENAME2) && (pFOData->wMode & FO_NONDOSFILE)) ? FO_IDFILENAME2 : edt1, pFOData->file, 32);
for(pch = pFOData->file; *pch != 0; pch += 1) if((*pch == '*') || (*pch == '?') || (*pch == '\\') || (*pch == ':')) return(FALSE);
strcpy(pFOData->title, pFOData->file); return(TRUE); }
/*---------------------------------------------------------------------------*/ /* FO_SetListItem() - [mbb] */ /*---------------------------------------------------------------------------*/
VOID NEAR FO_SetListItem(HWND hDlg,WORD wCtrlID,BOOL bSetSel) { if(bSetSel) SendDlgItemMessage(hDlg, wCtrlID, LB_SETCURSEL, 0, 0L);
if(SendDlgItemMessage(hDlg, wCtrlID, LB_GETCURSEL, 0, 0L) != LB_ERR) { MDlgDirSelect(hDlg, pFOData->file, FO_MAXFILELENGTH, wCtrlID);
if(wCtrlID == lst2) { FO_NewFilePath(hDlg, ((pFOData->wMode & FO_GETFILENAME2) && (pFOData->wMode & FO_NONDOSFILE)) ? FO_IDFILENAME2 : edt1, pFOData->file, pFOData->extent); }
SetDlgItemText(hDlg, ((pFOData->wMode & FO_GETFILENAME2) && (pFOData->wMode & FO_NONDOSFILE)) ? FO_IDFILENAME2 : edt1, pFOData->file); } }
/*---------------------------------------------------------------------------*/ /* FO_NewFilePath() - [mbb] */ /*---------------------------------------------------------------------------*/
VOID NEAR FO_NewFilePath(HWND hDlg, WORD wCtrlID,BYTE *fileName,BYTE *fileExt) { register BYTE *pch; BOOL bWild; BYTE tempName[FO_MAXPATHLENGTH];
GetDlgItemText(hDlg, wCtrlID, tempName, FO_MAXPATHLENGTH);
pch = tempName+(strlen(tempName)-1); bWild = ((*pch == '*') || (*pch == ':'));
while(pch > tempName) { pch--; if((*pch == '*') || (*pch == '?')) bWild = TRUE; if((*pch == '\\') || (*pch == ':')) { pch++; break; } }
if(bWild) strcpy(fileName+strlen(fileName), pch); else strcpy(fileName+strlen(fileName), fileExt+1); }
/*---------------------------------------------------------------------------*/ /* FO_AddFileType() - [mbb] */ /*---------------------------------------------------------------------------*/
BOOL NEAR FO_AddFileType(BYTE *fileName, BYTE *fileExt) { register BYTE *pch; INT j; BOOL bWild;
if((pch = fileName+strlen(fileName)) == fileName) j = 1; else if((pch == fileName+2) && (fileName[0] == '.') && (fileName[1] == '.')) j = 0; else { bWild = FALSE; /* mbbx 2.00: no forced extents... */ while(--pch >= fileName) { if((*pch == '*') || (*pch == '?')) { bWild = TRUE; break; } }
if(getFileType(fileName, fileExt)) return(bWild);
pch = fileName+strlen(fileName); j = ((*(pch-1) == '\\') ? 1 : (bWild ? 2 : 0)); }
//sdj: if the extention is "\*.*" which it would be if someone is doing
//sdj: recvfile open with "test" as name, why add \*.* to test?
//sdj: it is ok to do this for open/save/saveas where you can force .trm
//sdj: not not in other cases of opening the file
if (*fileExt == '\\' && *(fileExt+1) == '*' && *(fileExt+2) == '.') { return FALSE; }
strcpy(pch, fileExt+j); return(TRUE); }
/*---------------------------------------------------------------------------*/ /* FO_StripFileType() - [mbb] */ /*---------------------------------------------------------------------------*/
VOID NEAR FO_StripFileType(BYTE *fileName) { register BYTE *pch;
for(pch = fileName+(strlen(fileName)-1); pch > fileName; pch--) { if(*pch == '\\') { *pch = 0; break; } } }
/*---------------------------------------------------------------------------*/ /* FO_IsLegalDOSFN() - [mbb] */ /*---------------------------------------------------------------------------*/
#define FO_MAXDOSFILELEN FO_MAXFILELENGTH //-sdj bug#4587 fix
// -sdj this was 8 to check for dosfilename length. with ntfs filenames
// -sdj being >8 this test used to fail. made maxdosfilelen to fo_maxfilelength
// -sdj which is 16 at present. This will let users use prefix name upto
// -sdj 16 chars, but still force them to have .trm extension, AND by
// -sdj restricting the name to FO_MAXFILELENGTH, ensure that no other
// -sdj global buffer overflows (most of the buffers use this define)
// -sdj eventually, right solution is to set fo_maxfilelength to ntfs max
// -sdj name, but this is an intermediate solution which is safe, and still
// -sdj allow users upto 16 chars of trmfilenames.
// -sdj along with this change the other change needed is to increase
// -sdj the termData element sizes to > 12 which was a pain! this define
// -sdj in dynacomm.h is increased to 32 for the time being.
#define FO_MAXDOSEXTLEN 3
BOOL NEAR FO_IsLegalDOSFN(BYTE *fileName) { register INT i; INT j;
for(i = 0; fileName[i] == ' '; i++); if(i > 0) strcpy(fileName, fileName+i);
for(i = 0; fileName[i] != 0; i++) { if(fileName[i] == '.') { for(j = 1; fileName[i+j] != 0; j++) { if((j > FO_MAXDOSEXTLEN) || !FO_IsLegalDOSCH(fileName[i+j]) || (fileName[i+j]=='.') ) /* jtf 3.31 */ return(FALSE); }
break; }
if((i >= FO_MAXDOSFILELEN) || !FO_IsLegalDOSCH(fileName[i])) return(FALSE); }
return(i != 0); }
/*---------------------------------------------------------------------------*/ /* FO_IsLegalDOSCH() - */ /*---------------------------------------------------------------------------*/
#define FO_NONDOSFNCHARS "\\/[]:|<>+=;,\""
BOOL NEAR FO_IsLegalDOSCH(BYTE ch) { register BYTE *pch;
if(ch <= ' ') return(FALSE);
for(pch = FO_NONDOSFNCHARS; *pch != '\0'; pch++) { if(*pch == ch) return(FALSE); }
return(TRUE); }
/*---------------------------------------------------------------------------*/ /* FO_IsLegalFN() - [scf] */ /*---------------------------------------------------------------------------*/
BOOL NEAR FO_IsLegalFN(BYTE *fileName) { return(TRUE); }
/*---------------------------------------------------------------------------*/ /* FO_ErrProc() - */ /*---------------------------------------------------------------------------*/
INT NEAR FO_ErrProc(WORD errMess, WORD errType, HWND hDlg) { BYTE temp1[STR255]; BYTE temp2[STR255]; GetWindowText(hItWnd, temp1, 254); /* mbbx 2.00: new FO hook scheme... */ sscanf(temp1, "%s", temp2); LoadString(hInst, (errType & MB_ICONHAND) ? FO_STR_ERRCAPTION : FO_STR_WARNCAPTION, temp1, 80); strcpy(temp2+strlen(temp2), temp1); LoadString(hInst, errMess, temp1, 254);
MessageBeep(0); return(MessageBox(hDlg, temp1, temp2, errType)); /* jtf 3.14 */ }
/*---------------------------------------------------------------------------*/ /* FO_SetCtrlFocus() - [mbb] */ /*---------------------------------------------------------------------------*/
BOOL NEAR FO_SetCtrlFocus(HWND hDlg, HWND hCtrl) { if(hCtrl == NULL) /* mbbx 2.00 ... */ hCtrl = GetDlgItem(hDlg, (pFOData->wMode & FO_GETFILENAME2) ? FO_IDFILENAME2 : edt1);
#ifdef ORGCODE
switch(GetWindowWord(hCtrl, GWW_ID)) #else
switch(GetWindowLong(hCtrl, GWL_ID)) #endif
{ case edt1: case FO_IDFILENAME2: SendMessage(hCtrl, EM_SETSEL, GET_EM_SETSEL_MPS(0, 0x7FFF)); break;
case lst2: break;
case lst1: if(SendMessage(hCtrl, LB_GETCURSEL, 0, 0L) != LB_ERR) break;
case IDOK: if(pFOData->wMode & FO_PUTFILE) { hCtrl = GetDlgItem(hDlg, (pFOData->wMode & FO_GETFILENAME2) ? FO_IDFILENAME2 : edt1); SendMessage(hCtrl, EM_SETSEL, GET_EM_SETSEL_MPS(0, 0x7FFF)); } else { hCtrl = GetDlgItem(hDlg, lst1); if(SendMessage(hCtrl, LB_GETCOUNT, 0, 0L) > 0) FO_SetListItem(hDlg, lst1, TRUE); else hCtrl = GetDlgItem(hDlg, lst2); /* mbbx 1.10: CUA... */ } break; }
SetFocus(hCtrl); return(TRUE); }
/*---------------------------------------------------------------------------*/ /* setPath() - [mbb] */ /*---------------------------------------------------------------------------*/
BOOL setPath(BYTE *newPath, BOOL bFileName, BYTE *oldPath) { BYTE work[FO_MAXPATHLENGTH];
DEBOUT("Enter setPath: with newpath=%lx\n",newPath); DEBOUT(" setPath: with bFileName=%lx\n",bFileName); DEBOUT(" setPath: with oldPath=%lx\n",oldPath);
if(oldPath) #ifdef ORGCODE
{ _getcwd(oldPath); } #else
{ _getcwd(oldPath,PATHLEN); DEBOUT("setPath: getcwd returned %s\n",oldPath); } #endif
if(bFileName) { if(!setFilePath(newPath)){ DEBOUT("setPath: setFilePath(newPath) returned 0, calling sFP(%lx) and ret FALSE\n",oldPath); setFilePath(oldPath); return(FALSE); } } else { strcpy(work, newPath); DEBOUT("setPath: bFil=0,call setfp and chdir with work as %s\n",work); if(!setFilePath(work) || ((work[0] != 0) && (_chdir(work) == -1))){ DEBOUT("setPath: setFP(work) ret0||somethingelse, calling sFP(%lx) and ret FALSE\n",oldPath); setFilePath(oldPath); return(FALSE); } }
return(TRUE); }
/*---------------------------------------------------------------------------*/ /* setFilePath() - [mbb] */ /*---------------------------------------------------------------------------*/
BOOL setFilePath(BYTE *fileName) { INT ndx; BYTE temp[FO_MAXPATHLENGTH]; //sdj: just added to debug if chdir is working BYTE tmpgetcwd[PATHLEN];
DEBOUT("Enter setFilePath with filename=%lx\n",fileName);
#ifdef ORGCODE
#else
if (!fileName) { DEBOUT("setFilePath: HACK %s\n","called with 0 as filename"); DEBOUT("setFilePath: HACK %s\n","setting chdir to c:\\nt"); _chdir("C:\\NT"); return TRUE; } #endif
ndx = strlen(fileName);
#ifdef ORGCODE
if((ndx >= 2) && (fileName[1] == ':')) /* mbbx 2.00 ... */ { if(fileName[0] > 'Z') fileName[0] -= ' '; if(!setdrive(fileName[0])) return(FALSE);
strcpy(fileName, fileName+2); ndx -= 2; /* mbbx 2.00 */ }
#else
/* in NT there is no concept of currentdrive AND currentWorkDir -sdj
so dont do any setdrive, and keep the fileName as a fully -sdj qualified path name including the drive letter -sdj*/ #endif
while(--ndx >= 0) /* mbbx 2.00 ... */ { if(fileName[ndx] == '\\') break; }
if(ndx >= 0) { // sdj: 11may93: FileOpen
strcpy(temp, fileName+ndx+1);
if(ndx == 0) ndx += 1;
fileName[ndx] = '\0';
// -sdj fix for readcmdline not opening .trm file 03jun92
//
// if filename was c:\scratch\foo.trm, do chdir(c:\) not chdir(c:)
// if chdir(c:) is done,later getcwd will not give c:\ but something else
if (fileName[ndx-1] == ':') { fileName[ndx] = '\\'; fileName[ndx+1] = '\0'; }
// end of fix
if(_chdir(fileName) == -1) return(FALSE);
//getcwd(tmpgetcwd,PATHLEN);
strcpy(fileName, temp); }
return(TRUE); }
/*---------------------------------------------------------------------------*/ /* forceExtension() - [mbb] */ /*---------------------------------------------------------------------------*/
VOID forceExtension(BYTE *fileName, BYTE *fileExt, BOOL bReplace) { register BYTE *pch; WORD len;
for(pch = fileName+((len = strlen(fileName))-1); pch > fileName; pch -= 1) { if((*pch == '.') || (*pch == '\\')) break; }
if((pch <= fileName) || (*pch != '.')) pch = fileName + len; else if(!bReplace) return;
strcpy(pch, fileExt);
while(*(++pch) != 0) if((*pch == '*') || (*pch == '?')) { *pch = 0; break; } }
/*---------------------------------------------------------------------------*/ /* getFileType() - [mbb] */ /*---------------------------------------------------------------------------*/
BOOL getFileType(BYTE *fileName, BYTE *fileExt) { register BYTE *pch;
for(pch = fileName+(strlen(fileName)-1); pch > fileName; pch -= 1) { if(*pch == '.') { AnsiUpper(pch); forceExtension(fileExt, pch, TRUE); /* mbbx 2.00: no forced extents */ return(TRUE); } else if(*pch == '\\') break; }
return(FALSE); }
#ifdef ORGCODE
#else
BOOL fileExist(LPSTR lpfilename) { HANDLE hFile; CHAR chCurDir[FO_MAXPATHLENGTH+1]; DWORD dwRc;
dwRc = GetCurrentDirectory(FO_MAXPATHLENGTH,chCurDir);
DEBOUT("Rc of getcdir = %lx\n",dwRc); DEBOUT("Current Dir in which file is being opened=%s\n",chCurDir); DEBOUT("Existence being checked for the file=%s\n",lpfilename);
hFile = CreateFile(lpfilename, GENERIC_READ, /* no access desired please */ FILE_SHARE_READ|FILE_SHARE_WRITE, /* dont be greedy */ NULL, /* no security */ OPEN_EXISTING, /* open only if existing */ FILE_ATTRIBUTE_NORMAL, /* who cares what attr it is */ NULL); /* why do we need template here */
if( (hFile == (HANDLE)-1) || (hFile == NULL) ) { /* cant open this one, so return false, looks like doesnt exist */ DEBOUT("fileExist FALSE: %s does not exit\n",lpfilename); return FALSE; }
DEBOUT("fileExist TRUE: %s does exit\n",lpfilename);
CloseHandle(hFile); return TRUE;
}
#endif
|