home *** CD-ROM | disk | FTP | other *** search
- /*--------------------------------
- FILEDLG.C -- open and close
- file dialog boxes
- ----------------------------------*/
-
- #include <windows.h>
- #include "filedlg.h"
-
- BOOL FAR PASCAL FileOpenDlgProc(HWND, WORD, WORD, LONG);
- BOOL FAR PASCAL FileSaveDlgProc(HWND, WORD, WORD, LONG);
- BOOL FAR PASCAL OutFileDlgProc (HWND, WORD, WORD, LONG);
-
- LPSTR lstrchr (LPSTR str, char ch);
- LPSTR lstrrchr (LPSTR str, char ch);
-
- static char szDefExt[5];
- static char szOutDefExt[5];
- static char szFName[96];
- static char szFileSpec[16];
- static char szOutFileSpec[16];
-
- static POFSTRUCT pof;
- static WORD wFileAttr, wStatus;
-
- int DoFileOpenDlg (HANDLE hInst, HWND hwnd, char *szFileSpecIn,
- char *szDefExtIn, WORD wFileAttrIn,
- char *szFNameOut, POFSTRUCT pofIn)
-
- {
- FARPROC lpfnFileOpenDlgProc;
- int iReturn;
-
- lstrcpy (szFileSpec, szFileSpecIn);
- lstrcpy (szDefExt, szDefExtIn);
- wFileAttr = wFileAttrIn;
- pof = pofIn;
-
- lpfnFileOpenDlgProc = MakeProcInstance (FileOpenDlgProc, hInst);
-
- iReturn = DialogBox(hInst, "FileOpen", hwnd, lpfnFileOpenDlgProc);
-
- FreeProcInstance(lpfnFileOpenDlgProc);
- lstrcpy(szFNameOut, szFName);
- return iReturn;
- }
-
- int DoFileSaveDlg (HANDLE hInst, HWND hwnd, char *szFileSpecIn,
- char *szDefExtIn, WORD *pwStatusOut,
- char *szFNameOut, POFSTRUCT pofIn)
- {
- FARPROC lpfnFileSaveDlgProc;
- int iReturn;
-
- lstrcpy (szFileSpec, szFileSpecIn);
- lstrcpy (szDefExt, szDefExtIn);
- pof = pofIn;
- lpfnFileSaveDlgProc = MakeProcInstance (FileSaveDlgProc, hInst);
-
- iReturn = DialogBox(hInst, "FileSave", hwnd, lpfnFileSaveDlgProc);
-
- FreeProcInstance(lpfnFileSaveDlgProc);
- lstrcpy(szFNameOut, szFName);
- *pwStatusOut = wStatus;
- return iReturn;
- }
-
- int DoOutFileDlg (HANDLE hInst, HWND hwnd, char *szFileSpecIn,
- char *szDefExtIn, WORD *pwStatusOut,
- char *szFNameOut, POFSTRUCT pofIn)
-
- {
- FARPROC lpfnOutFileDlgProc;
- int iReturn;
-
- lstrcpy (szOutFileSpec, szFileSpecIn);
- lstrcpy (szOutDefExt, szDefExtIn);
-
- pof = pofIn;
-
- lpfnOutFileDlgProc = MakeProcInstance (OutFileDlgProc, hInst);
-
- iReturn = DialogBox(hInst, "OutFile", hwnd, lpfnOutFileDlgProc);
-
- FreeProcInstance(lpfnOutFileDlgProc);
- lstrcpy(szFNameOut, szFName);
- *pwStatusOut = wStatus;
- return iReturn;
- }
-
- BOOL FAR PASCAL FileOpenDlgProc(HWND hDlg, WORD message,
- WORD wParam, LONG lParam)
- {
- char cLastChar;
- short nEditLen;
-
- switch (message)
- {
- case WM_INITDIALOG:
- SendDlgItemMessage (hDlg, IDD_FNAME, EM_LIMITTEXT, 80, 0L);
- DlgDirList(hDlg, szFileSpec, IDD_FLIST, IDD_FPATH, wFileAttr);
- SetDlgItemText(hDlg, IDD_FNAME, szFileSpec);
- return TRUE;
-
- case WM_COMMAND:
- switch (wParam)
- {
- case IDD_FLIST :
- switch (HIWORD(lParam))
- {
- case LBN_SELCHANGE :
- if (DlgDirSelect (hDlg, (LPSTR)szFName, IDD_FLIST))
- lstrcat ((LPSTR)szFName, (LPSTR)szFileSpec);
- SetDlgItemText(hDlg, IDD_FNAME, szFName);
- return TRUE;
-
- case LBN_DBLCLK :
- if (DlgDirSelect (hDlg, szFName, IDD_FLIST))
- {
- lstrcat (szFName, szFileSpec);
- DlgDirList(hDlg, szFName, IDD_FLIST, IDD_FPATH, wFileAttr);
- SetDlgItemText(hDlg, IDD_FNAME, szFileSpec);
- }
- else
- {
- SetDlgItemText(hDlg, IDD_FNAME, szFName);
- SendMessage(hDlg, WM_COMMAND, IDOK, 0L);
- }
- return TRUE;
- }
- break;
-
- case IDD_FNAME:
- if (HIWORD(lParam) == EN_CHANGE)
- EnableWindow(GetDlgItem(hDlg, IDOK),
- (BOOL) SendMessage(LOWORD(lParam),
- WM_GETTEXTLENGTH, 0, 0L));
- return TRUE;
-
- case IDOK :
- GetDlgItemText (hDlg, IDD_FNAME, szFName, 80);
-
- nEditLen = lstrlen(szFName);
- cLastChar = *AnsiPrev(szFName, szFName + nEditLen);
-
- if (cLastChar == '\\' || cLastChar == ':')
- lstrcat(szFName, szFileSpec);
-
- if(lstrchr(szFName, '*') || lstrchr(szFName, '?'))
- {
- if (DlgDirList (hDlg, szFName, IDD_FLIST,
- IDD_FPATH, wFileAttr))
- {
- lstrcpy(szFileSpec, szFName);
- SetDlgItemText(hDlg, IDD_FNAME, szFileSpec);
- }
- else
- MessageBeep(0);
-
- return TRUE;
- }
-
- lstrcat (lstrcat(szFName, "\\"), szFileSpec);
-
- if (DlgDirList (hDlg, szFName, IDD_FLIST,
- IDD_FPATH, wFileAttr))
- {
- lstrcpy(szFileSpec, szFName);
- SetDlgItemText(hDlg, IDD_FNAME, szFileSpec);
- return TRUE;
- }
-
- szFName [nEditLen] = '\0';
-
- if (-1 == OpenFile (szFName, pof, OF_READ | OF_EXIST))
- {
- lstrcat (szFName, szDefExt);
- if (-1 == OpenFile (szFName, pof, OF_READ | OF_EXIST))
- {
- MessageBeep(0);
- return TRUE;
- }
- }
- lstrcpy (szFName,
- AnsiNext(lstrrchr(pof->szPathName, '\\')));
-
- OemToAnsi (szFName, szFName);
- EndDialog(hDlg, TRUE);
- return TRUE;
-
- case IDCANCEL :
- EndDialog(hDlg, FALSE);
- return TRUE;
-
- }
-
- }
- return FALSE;
- }
-
- BOOL FAR PASCAL FileSaveDlgProc (HWND hDlg, WORD message,
- WORD wParam, LONG lParam)
-
- {
- switch (message)
- {
- case WM_INITDIALOG:
- SendDlgItemMessage (hDlg, IDD_FNAME, EM_LIMITTEXT, 80, 0L);
- DlgDirList(hDlg, szFileSpec, 0, IDD_FPATH, 0);
- SetDlgItemText(hDlg, IDD_FNAME, szFileSpec);
- return TRUE;
-
- case WM_COMMAND:
- switch(wParam)
- {
- case IDD_FNAME:
- if (HIWORD(lParam) == EN_CHANGE)
- EnableWindow(GetDlgItem (hDlg, IDOK),
- (BOOL) SendMessage(LOWORD (lParam),
- WM_GETTEXTLENGTH, 0, 0L));
-
- return TRUE;
-
- case IDOK :
- GetDlgItemText (hDlg, IDD_FNAME, szFName, 80);
-
- if (-1 == OpenFile (szFName, pof, OF_PARSE))
- {
- MessageBeep(0);
- return TRUE;
- }
-
- if (!lstrchr (AnsiNext(lstrrchr(pof->szPathName, '\\')),
- '.'))
- lstrcat (szFName, szDefExt);
-
- if (-1 != OpenFile (szFName, pof, OF_WRITE | OF_EXIST))
- wStatus = 1;
-
- else if (-1 != OpenFile (szFName, pof, OF_CREATE | OF_EXIST))
- wStatus = 0;
-
- else
- {
- MessageBeep(0);
- return TRUE;
- }
-
- lstrcpy (szFName,
- AnsiNext(lstrrchr(pof->szPathName, '\\')));
-
-
- OemToAnsi (szFName, szFName);
- EndDialog(hDlg, TRUE);
- return TRUE;
-
- case IDCANCEL :
- EndDialog(hDlg, FALSE);
- return TRUE;
- }
- }
- return FALSE;
- }
-
- BOOL FAR PASCAL OutFileDlgProc (HWND hDlg, WORD message,
- WORD wParam, LONG lParam)
- {
- switch (message)
- {
- case WM_INITDIALOG:
- SendDlgItemMessage (hDlg, IDD_FNAME, EM_LIMITTEXT, 80, 0L);
- DlgDirList(hDlg, szOutFileSpec, 0, IDD_FPATH, 0);
- SetDlgItemText(hDlg, IDD_FNAME, szOutFileSpec);
- return TRUE;
-
- case WM_COMMAND:
- switch(wParam)
- {
- case IDD_FNAME:
- if (HIWORD(lParam) == EN_CHANGE)
- EnableWindow(GetDlgItem (hDlg, IDOK),
- (BOOL) SendMessage(LOWORD (lParam),
- WM_GETTEXTLENGTH, 0, 0L));
-
- return TRUE;
-
- case IDOK :
- GetDlgItemText (hDlg, IDD_FNAME, szFName, 80);
-
- if (-1 == OpenFile (szFName, pof, OF_PARSE))
- {
- MessageBeep(0);
- return TRUE;
- }
-
- if (!lstrchr (AnsiNext(lstrrchr(pof->szPathName, '\\')),
- '.'))
- lstrcat (szFName, szOutDefExt);
-
- if (-1 != OpenFile (szFName, pof, OF_WRITE | OF_EXIST))
- wStatus = 1;
-
- else if (-1 != OpenFile (szFName, pof, OF_CREATE | OF_EXIST))
- wStatus = 0;
-
- else
- {
- MessageBeep(0);
- return TRUE;
- }
-
- lstrcpy (szFName,
- AnsiNext(lstrrchr(pof->szPathName, '\\')));
-
-
- OemToAnsi (szFName, szFName);
- EndDialog(hDlg, TRUE);
- return TRUE;
-
- case IDCANCEL :
- EndDialog(hDlg, FALSE);
- return TRUE;
- }
- }
- return FALSE;
- }
-
-
- LPSTR lstrchr (LPSTR str, char ch)
- {
- while (*str)
- {
- if (ch == *str)
- return str;
-
- str = AnsiNext(str);
- }
- return NULL;
- }
-
- LPSTR lstrrchr (LPSTR str, char ch)
- {
- LPSTR strl = str + lstrlen(str);
-
- do
- {
- if (ch == *strl)
- return strl;
-
- strl = AnsiPrev(str, strl);
- }
- while (strl > str);
-
- return NULL;
- }
-