1 /* SCCS Id: @(#)maccurs.c 3.1 93/01/24 */
2 /* Copyright (c) Jon W{tte, 1992. */
3 /* NetHack may be freely redistributed. See license for details. */
9 #if !TARGET_API_MAC_CARBON
11 #include <TextUtils.h>
12 #include <Resources.h>
16 static Boolean winFileInit = 0;
17 static unsigned char winFileName [32] = "\pNetHack Preferences";
18 static long winFileDir;
19 static short winFileVol;
21 typedef struct WinPosSave {
30 static WinPosSave savePos [kLastWindowKind + 1];
43 /* We trust the glue. If there's an error, store in game dir. */
44 if (FindFolder (kOnSystemDisk, kPreferencesFolderType, kCreateFolder ,
45 &winFileVol, &winFileDir)) {
51 BlockMove (*sh, winFileName, **sh + 1);
52 ReleaseResource ((Handle) sh);
54 if (HOpen (winFileVol, winFileDir, winFileName, fsRdPerm, &ref)) {
57 len = sizeof (savePos);
58 if (!FSRead (ref, &len, savePos)) {
72 if (!winFileName [0]) {
75 HCreate (winFileVol, winFileDir, winFileName, MAC_CREATOR, PREF_TYPE);
76 HCreateResFile (winFileVol, winFileDir, winFileName);
78 if (HOpen (winFileVol, winFileDir, winFileName, fsWrPerm, &ref)) {
82 len = sizeof (savePos);
83 (void) FSWrite (ref, &len, savePos); /* Don't care about error */
88 RetrievePosition (short kind, short *top, short *left) {
91 if (kind < 0 || kind > kLastWindowKind) {
92 dprintf ("Retrieve Bad kind %d", kind);
96 if (!savePos [kind].validPos) {
97 dprintf ("Retrieve Not stored kind %d", kind);
100 p.v = savePos [kind].top;
101 p.h = savePos [kind].left;
104 dprintf ("Retrieve Kind %d Pt (%d,%d)", kind, p.h, p.v);
105 return (PtInRgn (p, GetGrayRgn ()));
110 RetrieveSize (short kind, short top, short left, short *height, short *width)
114 if (kind < 0 || kind > kLastWindowKind) {
118 if (!savePos [kind].validSize) {
121 *width = savePos [kind].width;
122 *height = savePos [kind].height;
125 return PtInRgn (p, GetGrayRgn ());
130 SavePosition (short kind, short top, short left)
132 if (kind < 0 || kind > kLastWindowKind) {
133 dprintf ("Save bad kind %d", kind);
137 savePos[kind].validPos = 1;
138 savePos[kind].top = top;
139 savePos[kind].left = left;
140 dprintf("Save kind %d pt (%d,%d)", kind, left, top);
146 SaveSize (short kind, short height, short width)
148 if (kind < 0 || kind > kLastWindowKind) {
149 dprintf ("Save bad kind %d", kind);
153 savePos [kind].validSize = 1;
154 savePos [kind].width = width;
155 savePos [kind].height = height;
161 GetWinKind (WindowPtr win)
165 if (!CheckNhWin (win)) {
168 kind = GetWindowKind(win) - WIN_BASE_KIND;
169 if (kind < 0 || kind > NHW_TEXT) {
172 dprintf ("In win kind %d (%lx)", kind, win);
180 kind = kMessageWindow;
189 dprintf ("Out kind %d", kind);
195 RetrieveWinPos(WindowPtr win, short *top, short *left)
197 return RetrievePosition(GetWinKind (win), top, left);
202 SaveWindowPos(WindowPtr win)
207 GetWindowBounds(win, kWindowContentRgn, &r);
208 SavePosition(GetWinKind(win), r.top, r.left);
213 SaveWindowSize(WindowPtr win)
219 GetWindowBounds(win, kWindowContentRgn, &r);
220 width = r.right - r.left;
221 height = r.bottom - r.top;
222 SaveSize(GetWinKind (win), height, width);