#include <windows.h>
#include <windowsx.h>
#include <string.h>
#include <stdio.h>
#ifdef WIN32
#include <commdlg.h>
#endif /* WIN32 */
#include "winutils.h"
#include <dos.h>
#ifdef WIN32
#include "wxlisp.h"
#endif /* WIN32 */
#ifdef MinGW32
void Delay(unsigned n)
{
Sleep(n);
}
#else
static double dbltime(struct time *tm)
{
return(3600.0*tm->ti_hour+60.0*tm->ti_min+tm->ti_sec+0.01*tm->ti_hund);
}
void Delay(unsigned n)
{
double first, second;
struct time tm;
gettime(&tm);
first = 1000.0 * dbltime(&tm);
do {
gettime(&tm);
second = 1000.0 * dbltime(&tm);
} while (second - first < n);
}
#endif
void SysBeep(int n)
{
for (; n > 0; n -= 10)
MessageBeep(0);
}
void FlushAllEvents(void)
{
MSG msg;
while (PeekMessage(&msg, NULL, WM_KEYFIRST, WM_MOUSELAST, PM_REMOVE | PM_NOYIELD));
}
int WarningBox(char *msg)
{
SysBeep(10);
return(MessageBox(GetFocus(),
(LPSTR) msg,
"XLISP-STAT",
MB_ICONASTERISK | MB_OK));
}
int OKorCancelBox(char *msg)
{
return(MessageBox(GetFocus(),
(LPSTR) msg,
"XLISP-STAT",
MB_ICONQUESTION | MB_OKCANCEL));
}
#ifdef WIN32
/****************************************************************************
*
* FUNCTION: ProcessCDError(DWORD)
*
* PURPOSE: Processes errors from the common dialog functions.
*
* COMMENTS:
*
* This function is called whenever a common dialog function
* fails. The CommonDialogExtendedError() value is passed to
* the function which maps the error value to a string table.
* The string is loaded and displayed for the user.
*
* RETURN VALUES:
* void.
*
****************************************************************************/
void ProcessCDError(DWORD dwErrorCode, HWND hWnd)
{
WORD wStringID;
char buf[MAX_PATH];
switch (dwErrorCode) {
case CDERR_STRUCTSIZE: wStringID=IDS_STRUCTSIZE; break;
case CDERR_INITIALIZATION: wStringID=IDS_INITIALIZATION; break;
case CDERR_NOTEMPLATE: wStringID=IDS_NOTEMPLATE; break;
case CDERR_NOHINSTANCE: wStringID=IDS_NOHINSTANCE; break;
case CDERR_LOADSTRFAILURE: wStringID=IDS_LOADSTRFAILURE; break;
case CDERR_FINDRESFAILURE: wStringID=IDS_FINDRESFAILURE; break;
case CDERR_LOADRESFAILURE: wStringID=IDS_LOADRESFAILURE; break;
case CDERR_LOCKRESFAILURE: wStringID=IDS_LOCKRESFAILURE; break;
case CDERR_MEMALLOCFAILURE: wStringID=IDS_MEMALLOCFAILURE; break;
case CDERR_MEMLOCKFAILURE: wStringID=IDS_MEMLOCKFAILURE; break;
case CDERR_NOHOOK: wStringID=IDS_NOHOOK; break;
case PDERR_PARSEFAILURE: wStringID=IDS_PARSEFAILURE; break;
case PDERR_RETDEFFAILURE: wStringID=IDS_RETDEFFAILURE; break;
case PDERR_LOADDRVFAILURE: wStringID=IDS_LOADDRVFAILURE; break;
case PDERR_GETDEVMODEFAIL: wStringID=IDS_GETDEVMODEFAIL; break;
case PDERR_INITFAILURE: wStringID=IDS_INITFAILURE; break;
case PDERR_NODEVICES: wStringID=IDS_NODEVICES; break;
case PDERR_NODEFAULTPRN: wStringID=IDS_NODEFAULTPRN; break;
case PDERR_DNDMMISMATCH: wStringID=IDS_DNDMMISMATCH; break;
case PDERR_CREATEICFAILURE: wStringID=IDS_CREATEICFAILURE; break;
case PDERR_PRINTERNOTFOUND: wStringID=IDS_PRINTERNOTFOUND; break;
case CFERR_NOFONTS: wStringID=IDS_NOFONTS; break;
case FNERR_SUBCLASSFAILURE: wStringID=IDS_SUBCLASSFAILURE; break;
case FNERR_INVALIDFILENAME: wStringID=IDS_INVALIDFILENAME; break;
case FNERR_BUFFERTOOSMALL: wStringID=IDS_BUFFERTOOSMALL; break;
default:
wStringID=IDS_UNKNOWNERROR;
break;
case 0: /* user might have clicked Cancel, */
return; /* or this is a very random error */
}
LoadString(NULL, wStringID, buf, sizeof(buf));
MessageBox(hWnd, buf, NULL, MB_OK);
return;
}
/****************************************************************************
*
* FUNCTION: PageSetup(HWND)
*
* PURPOSE: Invokes Page Setup common dialog function.
*
* COMMENTS:
*
* This function initializes the PAGESETUPDLG structure for all modes
* possible: standard, using a hook or using a customized template.
*
* RETURN VALUES:
* void.
*
****************************************************************************/
void PageSetup( HWND hWnd, PAGESETUPDLG *psDlg, BOOL bGetOnly )
{
/* Initialize the PAGESETUPDLG structure. */
if (psDlg->lStructSize == 0) {
psDlg->lStructSize = sizeof(PAGESETUPDLG);
psDlg->hwndOwner = hWnd;
psDlg->hDevMode = (HANDLE)NULL;
psDlg->hDevNames = (HANDLE)NULL;
psDlg->hInstance = (HANDLE)GetWindowLong(hWnd, GWL_HINSTANCE);
psDlg->lCustData = (LPARAM)NULL;
psDlg->hPageSetupTemplate = (HGLOBAL)NULL;
psDlg->Flags = PSD_DEFAULTMINMARGINS;
}
else
psDlg->Flags = PSD_MARGINS;
if (bGetOnly)
psDlg->Flags |= PSD_RETURNDEFAULT;
else
psDlg->Flags &= ~PSD_RETURNDEFAULT;
#ifdef IDM_STANDARD
switch (wMode) {
case IDM_STANDARD:
psDlg->lpfnPageSetupHook = (LPPAGESETUPHOOK)(FARPROC)NULL;
psDlg->lpPageSetupTemplateName = (LPTSTR)NULL;
psDlg->lpfnPagePaintHook = (LPPAGEPAINTHOOK)(FARPROC)NULL;
break;
case IDM_HOOK:
psDlg->Flags |= PSD_ENABLEPAGESETUPHOOK;
psDlg->lpfnPageSetupHook = (LPPAGESETUPHOOK)(FARPROC)PageSetupHook;
psDlg->lpPageSetupTemplateName = (LPTSTR)NULL;
psDlg->lpfnPagePaintHook = (LPPAGEPAINTHOOK)(FARPROC)NULL;
break;
case IDM_CUSTOM:
psDlg->Flags |= PSD_ENABLEPAGESETUPHOOK | PSD_ENABLEPAGESETUPTEMPLATE;
psDlg->lpfnPageSetupHook = (LPPAGESETUPHOOK)(FARPROC)PageSetupHook;
psDlg->lpPageSetupTemplateName = (LPTSTR)PRNSETUPDLGORD95;
psDlg->lpfnPagePaintHook = (LPPAGEPAINTHOOK)(FARPROC)NULL;
break;
}
#else
psDlg->lpfnPageSetupHook = (LPPAGESETUPHOOK)(FARPROC)NULL;
psDlg->lpPageSetupTemplateName = (LPTSTR)NULL;
psDlg->lpfnPagePaintHook = (LPPAGEPAINTHOOK)(FARPROC)NULL;
#endif
/* Call the Page Setup common dialog procedure. */
if (PageSetupDlg(psDlg) == FALSE)
ProcessCDError(CommDlgExtendedError(), hWnd );
}
/****************************************************************************
*
* FUNCTION: PrintDialog(HWND, PRINTDLG *)
*
* PURPOSE: Invokes common dialog function to print.
*
* COMMENTS:
*
* This function initializes the PRINTDLG structure for all modes
* possible: standard, using a hook or using a customized template.
* When hook mode is chosen, a hook is installed for both the
* Print dialog and the Print Setup dialog. When custom mode is
* chosen, the templates are enabled for both the print dialog and
* the Print Setup dialog boxes.
*
*
* RETURN VALUES:
* TRUE if successful.
*
****************************************************************************/
int PrintDialog(HWND hWnd, PRINTDLG *pd, HANDLE hDevMode, HANDLE hDevNames )
{
/* Initialize PRINTDLG structure. */
pd->lStructSize = sizeof(PRINTDLG);
pd->hwndOwner = hWnd;
pd->hDevMode = hDevMode;
pd->hDevNames = hDevNames;
pd->nFromPage = 1;
pd->nToPage = 0;
pd->nMinPage = 0;
pd->nMaxPage = 0;
pd->nCopies = 0;
pd->hInstance = (HANDLE)GetWindowLong(hWnd, GWL_HINSTANCE);
pd->Flags = PD_RETURNDC | PD_USEDEVMODECOPIESANDCOLLATE | PD_NOSELECTION | PD_NOPAGENUMS | PD_ALLPAGES;
#ifdef IDM_STANDARD
switch (wMode) {
case IDM_STANDARD:
pd->lpfnSetupHook = (LPSETUPHOOKPROC)(FARPROC)NULL;
pd->lpSetupTemplateName = (LPTSTR)NULL;
pd->lpfnPrintHook = (LPPRINTHOOKPROC)(FARPROC)NULL;
pd->lpPrintTemplateName = (LPTSTR)NULL;
break;
case IDM_HOOK:
pd->Flags |= PD_ENABLEPRINTHOOK | PD_ENABLESETUPHOOK;
pd->lpfnSetupHook = (LPSETUPHOOKPROC)PrintSetupHookProc;
pd->lpSetupTemplateName = (LPTSTR)NULL;
pd->lpfnPrintHook = (LPPRINTHOOKPROC)PrintDlgHookProc;
pd->lpPrintTemplateName = (LPTSTR)NULL;
break;
case IDM_CUSTOM:
pd->Flags |= PD_ENABLEPRINTHOOK | PD_ENABLEPRINTTEMPLATE |
PD_ENABLESETUPHOOK | PD_ENABLESETUPTEMPLATE;
pd->lpfnSetupHook = (LPSETUPHOOKPROC)PrintSetupHookProc;
pd->lpfnPrintHook = (LPPRINTHOOKPROC)PrintDlgHookProc;
pd->lpPrintTemplateName = (LPTSTR)MAKEINTRESOURCE(PRINTDLGORD);
pd->lpSetupTemplateName = (LPTSTR)MAKEINTRESOURCE(PRNSETUPDLGORD);
break;
}
#else
pd->lpfnSetupHook = (LPSETUPHOOKPROC)(FARPROC)NULL;
pd->lpSetupTemplateName = (LPTSTR)NULL;
pd->lpfnPrintHook = (LPPRINTHOOKPROC)(FARPROC)NULL;
pd->lpPrintTemplateName = (LPTSTR)NULL;
#endif
/* Print if successful. */
if (PrintDlg(pd) != 0)
return TRUE;
else {
ProcessCDError(CommDlgExtendedError(), hWnd );
return FALSE;
}
}
#endif /* WIN32 */
syntax highlighted by Code2HTML, v. 0.9.1