|
|
1.1 root 1: /* This header file does all the necessary includes and defines all the
2: structures and constants needed for the hanoi program */
3:
4: #define INCL_WIN
5: #define INCL_WINHEAP
6: #define INCL_WINDIALOGS
7: #define INCL_GPIPRIMITIVES
8: #define INCL_DOSPROCESS
9:
10:
11: #include <os2.h>
12: #include <stdio.h>
13: #include <string.h>
14: #include <stdlib.h>
15:
16: /* This structure is passed into the recursive Hanoi() procedure and contains
17: the current window handle as well as a flag indicating the current
18: processing status. If the fContinueCalc flag becomes FALSE, that
19: indicates that the user has selected stop from the menu bar and that
20: the procedure should exit the recursive process and terminate. */
21:
22:
23: MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM);
24: MRESULT EXPENTRY EntryFldDlgProc(HWND, USHORT, MPARAM, MPARAM);
25: MRESULT EXPENTRY AboutDlgProc(HWND, USHORT, MPARAM, MPARAM);
26: VOID CalcThread(VOID);
27: VOID DrawDisk(HPS,BYTE,BYTE,BYTE);
28: VOID MoveDisk(HPS,BYTE,BYTE);
29: VOID Hanoi(BYTE, BYTE, BYTE, BYTE);
30: VOID EnableMenuItem(HWND hwnd, SHORT sMenuItem, BOOL fEnable);
31: VOID SetupTowers(VOID);
32:
33:
34: #define MAXDISKCNT 16 /* Maximum # of disks allowable */
35: #define BASEXOFFSET 10 /* X offset for platform base */
36: #define BASEYOFFSET 10 /* Y offset for platform base */
37: #define BASETHICK 10 /* Base thickness */
38: #define BASELEN 300 /* Base width */
39: #define POSTOFFSET 62 /* First post offset from edge */
40: #define POSTSPACE 100 /* Distance between posts */
41: #define POSTWIDTH 5 /* Width of each post */
42: #define POSTHALF 2 /* 1/2 width for centering */
43: #define POSTEXTRAHT 25 /* Post height above top disk */
44: #define DISKTHICK 3 /* Thickness of each disk */
45: #define DISKSPACE (DISKTHICK+1) /* Thickness + space */
46: #define MINDISKWIDTH 11 /* Width of the smallest disk */
47: #define MAXDISKWIDTH 91 /* Width of the thickest disk */
48: #define BOTDISKYPOS (BASEYOFFSET+BASETHICK+DISKSPACE-DISKTHICK)
49: #define STACK 8192 /* Stack size for thread */
50: #define fDRAW 1 /* Indicate draw to DrawDisk() */
51: #define fERASE 0 /* Indicate erase */
52:
53: #define DEFAULTSIZE 5 /* Default number of disks */
54: #define MSGBUFSIZE 25 /* Space needed for sprintf msg */
55:
56: /****** Resource IDs *****/
57:
58:
59: #define ID_RESOURCE 1
60: #define IDM_START 2
61: #define IDM_STOP 3
62: #define IDM_SET 4
63: #define IDM_ABOUT 5
64: #define ID_SETCOUNT 6
65: #define ID_ENTRYFLD 7
66: #define ID_MSGBOX 8
67: #define IDD_ABOUTBOX 9
68: #define UM_CALC_DONE (WM_USER+0) /* Message posted when thread terminates */
69:
70:
71:
72: /* Macro for drawing a rectangle. Assumes hps and ptl structs are defined
73: in the calling module. */
74:
75: #define DrawRect(x1,y1,x2,y2,color) ptl.x = (LONG) (x1); \
76: ptl.y = (LONG) (y1); \
77: GpiSetCurrentPosition(hps,&ptl); \
78: ptl.x = (LONG) (x2); \
79: ptl.y = (LONG) (y2); \
80: GpiSetColor(hps,color); \
81: GpiBox(hps,DRO_FILL,&ptl,0L,0L);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.