summaryrefslogtreecommitdiffstats
path: root/private/sdktools/fontedit/fontdlg.c
diff options
context:
space:
mode:
authorAdam <you@example.com>2020-05-17 05:51:50 +0200
committerAdam <you@example.com>2020-05-17 05:51:50 +0200
commite611b132f9b8abe35b362e5870b74bce94a1e58e (patch)
treea5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/sdktools/fontedit/fontdlg.c
downloadNT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip
Diffstat (limited to 'private/sdktools/fontedit/fontdlg.c')
-rw-r--r--private/sdktools/fontedit/fontdlg.c380
1 files changed, 380 insertions, 0 deletions
diff --git a/private/sdktools/fontedit/fontdlg.c b/private/sdktools/fontedit/fontdlg.c
new file mode 100644
index 000000000..ca6d1cd89
--- /dev/null
+++ b/private/sdktools/fontedit/fontdlg.c
@@ -0,0 +1,380 @@
+/*++
+
+Copyright (c) 1991 Microsoft Corporation
+
+Module Name:
+
+ fontdlg.c
+
+Abstract:
+
+ Font Editor interface to the common dialog Open File and Save File
+ functions. Also, this routine displays and controls the font format
+ save dialog.
+
+Author:
+
+ David J. Marsyla (t-davema) 22-Aug-1991
+
+Revision History:
+
+
+--*/
+
+
+#include "windows.h"
+#include <port1632.h>
+#include "fontedit.h"
+#include "commdlg.h"
+
+
+/* message box strings loaded in sample.c from the stringtable */
+extern CHAR szIFN[], szFNF[], szREF[], szSCC[], szEOF[], szECF[];
+
+extern CHAR szAppName [];
+extern CHAR szExt [];
+extern CHAR szExtDesc [];
+
+extern CHAR szNEWFONT [];
+extern CHAR szFRO [];
+
+extern INT iFontFormat; /* Set to the id of current font format */
+extern BOOL fReadOnly;
+
+CHAR szDlgMsg [MAX_STR_LEN+MAX_FNAME_LEN];
+
+extern CHAR szFilter[];
+
+//
+// Local Function Prototypes.
+//
+
+BOOL
+DlgCheckFormat (
+ HANDLE hInstance, // app module instance handle
+ HWND hWndParent // window handle of parent window
+ );
+
+BOOL APIENTRY
+DlgFnCheckFormat (
+ HWND hDlg,
+ WORD message,
+ WPARAM wParam,
+ LONG lParam
+ );
+
+//
+// Functions.
+//
+
+BOOL
+CommDlgOpen (
+ HWND hWndParent, /* window handle of parent window */
+ OFSTRUCT *pofsReOpenInfo,/* ptr to current file OFSTRUCT (->cBytes=0 if no
+ * cur. file)*/
+ CHAR *pszNewNameIn, /* ptr to array which will get new file's name
+ * (no path) */
+ CHAR *pszExtIn, /* ptr to current default extension */
+ CHAR *pszFileNameOnly, /* ptr to application name */
+ BOOL fOpenType
+ )
+{
+ OPENFILENAME ofTempOF;
+ HFILE hFile;
+ CHAR szBuf[_MAX_PATH];
+
+ ofTempOF.lStructSize = sizeof(OPENFILENAME);
+ ofTempOF.hwndOwner = hWndParent;
+ ofTempOF.lpstrFilter = szFilter;
+ ofTempOF.lpstrCustomFilter = (LPSTR)NULL;
+ ofTempOF.nMaxCustFilter = 0L;
+ ofTempOF.nFilterIndex = 0L;
+ ofTempOF.lpstrFile = pszNewNameIn;
+ ofTempOF.nMaxFile = MAX_FNAME_LEN;
+ ofTempOF.lpstrFileTitle = pszFileNameOnly;
+ ofTempOF.nMaxFileTitle = MAX_FNAME_LEN;
+ ofTempOF.lpstrInitialDir = (LPSTR)NULL;
+ ofTempOF.lpstrTitle = (LPSTR)NULL;
+ ofTempOF.Flags = 0;
+ ofTempOF.nFileOffset = 0;
+ ofTempOF.nFileExtension = 0;
+ ofTempOF.lpstrDefExt = pszExtIn;
+
+ if (fOpenType == FONT_NEW)
+ {
+ if (MessageBox (hWndParent, (LPSTR)szNEWFONT, (LPSTR)szAppName,
+ MB_OKCANCEL | MB_ICONEXCLAMATION | MB_APPLMODAL) == IDCANCEL)
+ {
+ return (FALSE);
+ }
+ }
+
+ // save lpstrFile. Because if GetSaveFileName returns 0(i.e. select
+ // [Cancel] in dialog, pointer to lpstrFile will be lost.
+ lstrcpy(szBuf,pszNewNameIn);
+ if (GetOpenFileName (&ofTempOF) == FALSE)
+ {
+ lstrcpy(pszNewNameIn,szBuf);
+ return (FALSE);
+ }
+
+ CharUpper (pszNewNameIn);
+
+ fReadOnly = FALSE;
+
+ hFile = MOpenFile (pszNewNameIn, pofsReOpenInfo, OF_READWRITE);
+
+ if (hFile == (HFILE) -1) {
+
+ hFile = MOpenFile (pszNewNameIn, pofsReOpenInfo, OF_READ);
+
+ if (hFile == (HFILE) -1) {
+
+ DlgMergeStrings (szFNF, pszNewNameIn, szDlgMsg);
+
+ MessageBox (hWndParent, szDlgMsg, szAppName,
+ MB_OK | MB_ICONASTERISK | MB_APPLMODAL);
+
+ return (FALSE);
+
+ } else if (fOpenType != FONT_NEW) {
+
+ BOOL fResult;
+
+ DlgMergeStrings (szFRO, pszNewNameIn, szDlgMsg);
+
+ /* File Is Read Only */
+ fResult = MessageBox (hWndParent, szDlgMsg, szAppName,
+ MB_OKCANCEL | MB_ICONEXCLAMATION | MB_APPLMODAL);
+
+ /* Give them the chance to cancel right now. */
+ if (fResult == IDCANCEL) {
+
+ M_lclose (hFile);
+ return (FALSE);
+ }
+
+ fReadOnly = TRUE;
+ }
+ }
+
+ M_lclose (hFile);
+
+ return (TRUE);
+}
+
+BOOL
+CommDlgSaveAs(
+ HANDLE hInstance,
+ HWND hWndParent, /* window handle of parent window */
+ OFSTRUCT *pofsReOpenInfo,/* ptr to current file OFSTRUCT (->cBytes=0 if no
+ * cur. file)*/
+ CHAR *pszNewNameIn, /* ptr to array which will get new file's name
+ * (no path) */
+ CHAR *pszExtIn, /* ptr to current default extension */
+ CHAR *pszFileNameOnly /* ptr to file name */
+ )
+{
+ OPENFILENAME ofTempOF;
+ HFILE hFile;
+ CHAR szBuf[_MAX_PATH];
+
+ ofTempOF.lStructSize = sizeof(OPENFILENAME);
+ ofTempOF.hwndOwner = hWndParent;
+ ofTempOF.lpstrFilter = szFilter;
+ ofTempOF.lpstrCustomFilter = (LPSTR)NULL;
+ ofTempOF.nMaxCustFilter = 0L;
+ ofTempOF.nFilterIndex = 0L;
+ ofTempOF.lpstrFile = pszNewNameIn;
+ ofTempOF.nMaxFile = MAX_FNAME_LEN;
+ ofTempOF.lpstrFileTitle = pszFileNameOnly;
+ ofTempOF.nMaxFileTitle = MAX_FNAME_LEN;
+ ofTempOF.lpstrInitialDir = (LPSTR)NULL;
+ ofTempOF.lpstrTitle = (LPSTR)NULL;
+ ofTempOF.Flags = OFN_SHOWHELP;
+ ofTempOF.nFileOffset = 0;
+ ofTempOF.nFileExtension = 0;
+ ofTempOF.lpstrDefExt = pszExtIn;
+
+ if (DlgCheckFormat (hInstance, hWndParent) == FALSE)
+ {
+ return (FALSE);
+ }
+
+ // save lpstrFile. Because if GetSaveFileName returns 0(i.e. select
+ // [Cancel] in dialog, pointer to lpstrFile will be lost.
+ lstrcpy(szBuf,pszNewNameIn);
+ if (GetSaveFileName (&ofTempOF) == FALSE)
+ {
+ lstrcpy(pszNewNameIn,szBuf);
+ return (FALSE);
+ }
+
+ CharUpper (pszNewNameIn);
+
+ hFile = MOpenFile (pszNewNameIn, pofsReOpenInfo, OF_EXIST);
+
+ if (hFile >= (HFILE) 0) /* already exists */
+ {
+ M_lclose (hFile);
+
+ DlgMergeStrings (szREF, pszNewNameIn, szDlgMsg);
+
+ if (MessageBox (hWndParent, (LPSTR)szDlgMsg, (LPSTR)pszNewNameIn,
+ MB_YESNO | MB_DEFBUTTON2 | MB_ICONQUESTION | MB_APPLMODAL)
+ == IDNO)
+ {
+ return (FALSE);
+ }
+
+ hFile = MOpenFile (pszNewNameIn, pofsReOpenInfo, OF_WRITE);
+
+ if (hFile == (HFILE) -1)
+ {
+ DlgMergeStrings(szEOF, pszNewNameIn, szDlgMsg);
+
+ MessageBox(hWndParent, (LPSTR)szDlgMsg, (LPSTR)pszNewNameIn,
+ MB_OK | MB_ICONEXCLAMATION | MB_APPLMODAL);
+
+ return (FALSE);
+ }
+
+ M_lclose (hFile);
+
+ return (TRUE);
+ }
+
+ hFile = MOpenFile (pszNewNameIn, pofsReOpenInfo, OF_CREATE);
+
+ if (hFile == (HFILE) -1)
+ {
+ DlgMergeStrings(szECF, pszNewNameIn, szDlgMsg);
+
+ MessageBox(hWndParent, (LPSTR)szDlgMsg, (LPSTR)pszNewNameIn,
+ MB_OK | MB_ICONEXCLAMATION | MB_APPLMODAL);
+
+ return (FALSE);
+ }
+
+ M_lclose (hFile);
+
+ return (TRUE);
+
+} /* end dlgsaveas */
+
+
+/*=============================================================================
+ DLGMERGESTRINGS scans string1 for merge spec (%%). If found, insert string2 at
+ that point, and then append remainder of string1. Result in string3.
+==============================================================================*/
+BOOL
+DlgMergeStrings(
+ CHAR *szSrc,
+ CHAR *szMerge,
+ CHAR *szDst
+ )
+{
+ CHAR *pchSrc;
+ CHAR *pchDst;
+
+ pchSrc = szSrc;
+ pchDst = szDst;
+
+ /* Find merge spec if there is one. */
+ while (!((*pchSrc == '%') && (*(pchSrc+1) == '%'))) {
+ *pchDst++ = *pchSrc;
+
+ /* If we reach end of string before merge spec, just return. */
+ if (!*pchSrc++)
+ return FALSE;
+
+ }
+ /* If merge spec found, insert sz2 there. (check for null merge string */
+ if (szMerge) {
+ while (*szMerge)
+ *pchDst++ = *szMerge++;
+
+ }
+
+ /* Jump over merge spec */
+ pchSrc++; pchSrc++;
+
+
+ /* Now append rest of Src String */
+ while (*pchDst++ = *pchSrc++);
+ return TRUE;
+
+} /* end dlgmergestrings */
+
+
+BOOL
+DlgCheckFormat (
+ HANDLE hInstance, // app module instance handle
+ HWND hWndParent // window handle of parent window
+ )
+{
+ //FARPROC lpProc;
+ BOOL fResult;
+
+ fResult = DialogBox (hInstance, (LPSTR)MAKEINTRESOURCE (IDD_FORMAT),
+ //hWndParent, (WNDPROC)(lpProc = DlgFnCheckFormat));
+ hWndParent, (WNDPROC)DlgFnCheckFormat);
+
+ //FreeProcInstance(lpProc);
+
+ return (fResult);
+
+} /* end dlgcheckformat */
+
+
+BOOL APIENTRY
+DlgFnCheckFormat (
+ HWND hDlg,
+ WORD message,
+ WPARAM wParam,
+ LONG lParam
+ )
+{
+
+ switch (message)
+ {
+
+ case WM_INITDIALOG:
+ CheckRadioButton (hDlg, ID_FORMAT2, ID_FORMAT3, iFontFormat);
+ break;
+
+ case WM_COMMAND:
+
+ switch (GET_WM_COMMAND_ID(wParam, lParam))
+ {
+ case IDOK:
+
+ EndDialog (hDlg, TRUE);
+ break;
+
+ case IDCANCEL:
+ EndDialog (hDlg, FALSE);
+ break;
+
+ case ID_FORMAT2:
+ case ID_FORMAT3:
+ CheckRadioButton(hDlg, ID_FORMAT2,ID_FORMAT3,
+ iFontFormat = GET_WM_COMMAND_ID(wParam,lParam));
+ break;
+
+ default:
+
+ return FALSE;
+
+ } /* end switch wparam */
+ break;
+
+ default:
+
+ return FALSE;
+
+ } /* end switch message */
+
+ return TRUE;
+
+} /* end dlgsaveasdlg */