1 /* aNetHack 0.0.1 maccurs.c $ANH-Date: 1432512797 2015/05/25 00:13:17 $ $ANH-Branch: master $:$ANH-Revision: 1.9 $ */
2 /* Copyright (c) Jon W{tte, 1992. */
3 /* aNetHack may be freely redistributed. See license for details. */
9 #if 1 /*!TARGET_API_MAC_CARBON*/
11 #include <TextUtils.h>
12 #include <Resources.h>
15 static Boolean winFileInit
= 0;
16 static unsigned char winFileName
[32] = "\paNetHack Preferences";
17 static long winFileDir
;
18 static short winFileVol
;
20 typedef struct WinPosSave
{
29 static WinPosSave savePos
[kLastWindowKind
+ 1];
41 /* We trust the glue. If there's an error, store in game dir. */
42 if (FindFolder(kOnSystemDisk
, kPreferencesFolderType
, kCreateFolder
,
43 &winFileVol
, &winFileDir
)) {
49 BlockMove(*sh
, winFileName
, **sh
+ 1);
50 ReleaseResource((Handle
) sh
);
52 if (HOpen(winFileVol
, winFileDir
, winFileName
, fsRdPerm
, &ref
)) {
55 len
= sizeof(savePos
);
56 if (!FSRead(ref
, &len
, savePos
)) {
69 if (!winFileName
[0]) {
72 HCreate(winFileVol
, winFileDir
, winFileName
, MAC_CREATOR
, PREF_TYPE
);
73 HCreateResFile(winFileVol
, winFileDir
, winFileName
);
75 if (HOpen(winFileVol
, winFileDir
, winFileName
, fsWrPerm
, &ref
)) {
79 len
= sizeof(savePos
);
80 (void) FSWrite(ref
, &len
, savePos
); /* Don't care about error */
85 RetrievePosition(short kind
, short *top
, short *left
)
89 if (kind
< 0 || kind
> kLastWindowKind
) {
90 dprintf("Retrieve Bad kind %d", kind
);
94 if (!savePos
[kind
].validPos
) {
95 dprintf("Retrieve Not stored kind %d", kind
);
98 p
.v
= savePos
[kind
].top
;
99 p
.h
= savePos
[kind
].left
;
102 dprintf("Retrieve Kind %d Pt (%d,%d)", kind
, p
.h
, p
.v
);
103 return (PtInRgn(p
, GetGrayRgn()));
107 RetrieveSize(short kind
, short top
, short left
, short *height
, short *width
)
111 if (kind
< 0 || kind
> kLastWindowKind
) {
115 if (!savePos
[kind
].validSize
) {
118 *width
= savePos
[kind
].width
;
119 *height
= savePos
[kind
].height
;
122 return PtInRgn(p
, GetGrayRgn());
126 SavePosition(short kind
, short top
, short left
)
128 if (kind
< 0 || kind
> kLastWindowKind
) {
129 dprintf("Save bad kind %d", kind
);
133 savePos
[kind
].validPos
= 1;
134 savePos
[kind
].top
= top
;
135 savePos
[kind
].left
= left
;
136 dprintf("Save kind %d pt (%d,%d)", kind
, left
, top
);
141 SaveSize(short kind
, short height
, short width
)
143 if (kind
< 0 || kind
> kLastWindowKind
) {
144 dprintf("Save bad kind %d", kind
);
148 savePos
[kind
].validSize
= 1;
149 savePos
[kind
].width
= width
;
150 savePos
[kind
].height
= height
;
155 GetWinKind(WindowPtr win
)
159 if (!CheckNhWin(win
)) {
162 kind
= GetWindowKind(win
) - WIN_BASE_KIND
;
163 if (kind
< 0 || kind
> NHW_TEXT
) {
166 dprintf("In win kind %d (%lx)", kind
, win
);
174 kind
= kMessageWindow
;
183 dprintf("Out kind %d", kind
);
188 RetrieveWinPos(WindowPtr win
, short *top
, short *left
)
190 return RetrievePosition(GetWinKind(win
), top
, left
);
194 SaveWindowPos(WindowPtr win
)
198 GetWindowBounds(win
, kWindowContentRgn
, &r
);
199 SavePosition(GetWinKind(win
), r
.top
, r
.left
);
203 SaveWindowSize(WindowPtr win
)
208 GetWindowBounds(win
, kWindowContentRgn
, &r
);
209 width
= r
.right
- r
.left
;
210 height
= r
.bottom
- r
.top
;
211 SaveSize(GetWinKind(win
), height
, width
);