source: trunk/fm3.c@ 1511

Last change on this file since 1511 was 1511, checked in by Steven Levine, 15 years ago

Comments

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.9 KB
Line 
1
2/***********************************************************************
3
4 $Id: fm3.c 1511 2010-04-12 16:36:48Z stevenhl $
5
6 fm/2 starter
7
8 Copyright (c) 1993-98 M. Kimes
9 Copyright (c) 2008 Steven H.Levine
10
11 05 Jan 08 SHL Sync
12 18 Jul 08 SHL Add Fortify support
13 11 Dec 08 SHL Add exception handler support
14
15***********************************************************************/
16
17#include <string.h>
18
19#define INCL_DOS
20#define INCL_WIN
21#define INCL_LONGLONG
22#define INCL_DOSEXCEPTIONS // XCTP_...
23#define INCL_DOSERRORS // NO_ERROR
24
25#include "dll\fm3dll.h"
26#include "dll\mainwnd.h" // hwndBubble
27#include "dll\version.h" // VER...
28#include "dll\init.h" // StartFM3
29#include "dll\notebook.h" // appname
30#include "dll\fortify.h"
31#include "dll\errutil.h" // Error reporting
32#include "dll\excputil.h" // Exception handlers
33
34static PSZ pszSrcFile = __FILE__;
35
36int main(int argc, char *argv[])
37{
38 HAB hab;
39 HMQ hmq;
40 QMSG qmsg;
41 HWND hwndFrame;
42 APIRET regRet;
43 EXCEPTIONREGISTRATIONRECORD regRec = { NULL, NULL };
44
45 strcpy(appname, "FM/3");
46 DosError(FERR_DISABLEHARDERR);
47
48 regRec.ExceptionHandler = HandleException;
49 regRet = DosSetExceptionHandler(&regRec);
50 if (regRet != NO_ERROR) {
51#if 0 // 10 Dec 08 SHL fixme to report later maybe?
52 Dos_Error(MB_ENTER, regRet, HWND_DESKTOP, pszSrcFile, __LINE__,
53 "DosSetExceptionHandler");
54#endif
55 DbgMsg(pszSrcFile, __LINE__,
56 "DosSetExceptionHandler failed with error %u", regRet);
57 }
58
59 hab = WinInitialize(0);
60 if (hab) {
61 hmq = WinCreateMsgQueue(hab, 2048);
62 if (hmq) {
63 if (InitFM3DLL(hab, argc, argv)) {
64 if (CheckVersion(VERMAJOR, VERMINOR)) {
65# ifdef FORTIFY
66 Fortify_EnterScope();
67# endif
68 hwndFrame = StartFM3(hab, argc, argv);
69 if (hwndFrame != (HWND) 0) {
70 for (;;) {
71 if (!WinGetMsg(hab, &qmsg, (HWND) 0, 0, 0)) {
72 if (qmsg.hwnd)
73 qmsg.msg = WM_CLOSE; // Map quit to close
74 else
75 break;
76 }
77 if (hwndBubble &&
78 ((qmsg.msg > (WM_BUTTON1DOWN - 1) &&
79 qmsg.msg < (WM_BUTTON3DBLCLK + 1)) ||
80 (qmsg.msg > (WM_CHORD - 1) &&
81 qmsg.msg < (WM_BUTTON3CLICK + 1))) &&
82 WinIsWindowVisible(hwndBubble))
83 WinShowWindow(hwndBubble, FALSE);
84 WinDispatchMsg(hab, &qmsg);
85 }
86 if (WinIsWindow(hab, WinWindowFromID(hwndFrame, FID_CLIENT)))
87 WinSendMsg(WinWindowFromID(hwndFrame, FID_CLIENT), WM_CLOSE,
88 MPVOID, MPVOID);
89 }
90# ifdef FORTIFY
91 for (;;) {
92 UCHAR scope = Fortify_LeaveScope();
93 if ((CHAR)scope == 0)
94 break;
95 Runtime_Error(__FILE__, __LINE__, "Attempting to exit thread with scope non-zero (%u)", scope);
96 if ((CHAR)scope < 0)
97 break;
98 }
99 Fortify_DumpAllMemory();
100# endif
101 }
102 }
103 DosSleep(250L);
104 WinDestroyMsgQueue(hmq);
105 }
106 WinTerminate(hab);
107 }
108
109 if (regRet == NO_ERROR) {
110 regRet = DosUnsetExceptionHandler(&regRec);
111 if (regRet != NO_ERROR) {
112 DbgMsg(pszSrcFile, __LINE__,
113 "DosUnsetExceptionHandler failed with error %u", regRet);
114 }
115 }
116 return 0;
117}
Note: See TracBrowser for help on using the repository browser.