|
|
1.1 root 1: /************************************************************************
2: *
3: * linefrac.c
4: *
5: * Main window procedure for LineFractal window class.
6: *
7: * Created by Microsoft Corp., 1988
8: *
9: ************************************************************************/
10:
11: #define INCL_WIN
12: #define INCL_DOSSEMAPHORES
13:
14: #include <os2.h>
15: #include "linefrac.h"
16:
17:
18: extern HAB hAB;
19: HMQ hMsgQ;
20: extern HWND hwndLineFrac;
21: extern HWND hwndLineFracFrame;
22: extern LONG lColorBack;
23:
24: extern BOOL fInterrupted;
25: extern LONG lSemAccumulateFractal;
26: extern int usRecursion;
27: extern BOOL fAutoScale;
28: extern BOOL fHaveAccumThread;
29: extern BOOL fHaveBitmap;
30:
31: SHORT cdecl main(void);
32:
33:
34:
35:
36: /************************************************************************
37: *
38: * main
39: *
40: * This is a C program, right? Gotta have one of these (unless you're
41: * writing for Windows, that is).
42: *
43: * WinInitialize resizes our ring 2 stack, among other things, so
44: * we won't GP fault trying to do graphics. WinCreateMsgQueue defines
45: * us as a REAL Winthorn app. Call a sub to register our window class
46: * and create a window. Loop over messages. Exit cleanly.
47: *
48: ************************************************************************/
49:
50: SHORT cdecl
51: main()
52: {
53: QMSG qMsg;
54:
55: hAB = WinInitialize(NULL);
56: hMsgQ = WinCreateMsgQueue(hAB, 0);
57:
58: if (!LineFracInitApp())
59: return FALSE;
60:
61: while (WinGetMsg( hAB, (PQMSG)&qMsg, (HWND)NULL, 0, 0 ))
62: WinDispatchMsg( hAB, (PQMSG)&qMsg );
63:
64: WinDestroyWindow( hwndLineFracFrame );
65: WinDestroyMsgQueue( hMsgQ );
66: WinTerminate( hAB );
67: }
68:
69:
70:
71:
72: /************************************************************************
73: *
74: * LineFracWndProc
75: *
76: * Process messages for the LineFractal window class.
77: *
78: ************************************************************************/
79:
80: ULONG FAR PASCAL
81: LineFracWndProc( hWnd, message, mp1, mp2 )
82: HWND hWnd;
83: USHORT message;
84: MPARAM mp1;
85: MPARAM mp2;
86: {
87: HPS hPS;
88: RECTL rect;
89:
90: switch( message )
91: {
92: case WM_CLOSE:
93: LineFracExit();
94: WinPostMsg( hWnd, WM_QUIT, 0L, 0L );
95: break;
96:
97: case WM_COMMAND:
98: LineFracCommand(hWnd, LOUSHORT(mp1));
99: break;
100:
101: case WM_ERASEBACKGROUND:
102: hPS = WinGetPS(hWnd);
103: WinQueryUpdateRect(hWnd, (PRECTL)&rect);
104: WinFillRect(hPS, (PRECTL)&rect, lColorBack);
105: WinReleasePS(hPS);
106: return FALSE;
107: break;
108:
109: case WM_PAINT:
110: /* initialization done here so that bitmap will have
111: meaningful size */
112: if (!fHaveAccumThread)
113: LineFracInit(hWnd);
114:
115: hPS = WinBeginPaint(hwndLineFrac, NULL, NULL);
116: LineFracPaint(hPS);
117: WinEndPaint(hPS);
118: break;
119:
120: case WM_BUTTON1UP:
121: case WM_BUTTON2UP:
122: if (message == WM_BUTTON1UP)
123: usRecursion = ++usRecursion;
124: else if (usRecursion > 0)
125: usRecursion = --usRecursion;
126:
127: fInterrupted = TRUE;
128: DosSemClear(&lSemAccumulateFractal);
129: break;
130:
131: case WM_SIZE:
132: if (fAutoScale && fHaveBitmap && fHaveAccumThread)
133: if (fHaveBitmap = ResizeBitmap(hWnd))
134: {
135: fInterrupted = TRUE;
136: DosSemClear(&lSemAccumulateFractal);
137: }
138:
139: /* fall through -- we might want to restart point accumulation,
140: but don't want to process the resize message */
141:
142: default:
143: return( (ULONG)WinDefWindowProc(hWnd, message, mp1, mp2));
144: break;
145: }
146:
147: return FALSE;
148: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.