1 |
/* macnapp.h -- general mac application library header |
2 |
*/ |
3 |
/* (C) Copyright 1995 by Carnegie Mellon University |
4 |
* All Rights Reserved. |
5 |
* |
6 |
* Permission to use, copy, modify, distribute, and sell this software |
7 |
* and its documentation for any purpose is hereby granted without |
8 |
* fee, provided that the above copyright notice appear in all copies |
9 |
* and that both that copyright notice and this permission notice |
10 |
* appear in supporting documentation, and that the name of Carnegie |
11 |
* Mellon University not be used in advertising or publicity |
12 |
* pertaining to distribution of the software without specific, |
13 |
* written prior permission. Carnegie Mellon University makes no |
14 |
* representations about the suitability of this software for any |
15 |
* purpose. It is provided "as is" without express or implied |
16 |
* warranty. |
17 |
* |
18 |
* CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO |
19 |
* THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY |
20 |
* AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE |
21 |
* FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
22 |
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN |
23 |
* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING |
24 |
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS |
25 |
* SOFTWARE. |
26 |
*/ |
27 |
/* (C) Copyright 1990-1995 by Christopher J. Newman |
28 |
* All Rights Reserved. |
29 |
* |
30 |
* Permission to use, copy, modify, and distribute this software and its |
31 |
* documentation for any purpose is hereby granted without fee, provided that |
32 |
* the above copyright notice appear in all copies and that both that |
33 |
* copyright notice and this permission notice appear in supporting |
34 |
* documentation, and that the name of Christopher J. Newman not be used in |
35 |
* advertising or publicity pertaining to distribution of the software without |
36 |
* specific, written prior permission. Christopher J. Newman makes no |
37 |
* representations about the suitability of this software for any purpose. It |
38 |
* is provided "as is" without express or implied warranty. |
39 |
* |
40 |
* CHRISTOPHER J. NEWMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, |
41 |
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT |
42 |
* SHALL CHRISTOPHER J. NEWMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR |
43 |
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, |
44 |
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER |
45 |
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE |
46 |
* OF THIS SOFTWARE. |
47 |
* |
48 |
* Author: Chris Newman |
49 |
* Message: This is a nifty program. |
50 |
*/ |
51 |
|
52 |
#ifdef THINK_C |
53 |
#define QD(x) (x) |
54 |
#ifndef NULL |
55 |
#define NULL 0 |
56 |
#endif |
57 |
#else |
58 |
#define QD(x) (qd.x) |
59 |
#include <MacTypes.h> |
60 |
#include <Quickdraw.h> |
61 |
#include <Events.h> |
62 |
#include <Controls.h> |
63 |
#include <Windows.h> |
64 |
#include <MemoryMgr.h> |
65 |
#include <Menus.h> |
66 |
#include <OSUtils.h> |
67 |
#include <TextEdit.h> |
68 |
#include <Dialogs.h> |
69 |
#endif |
70 |
|
71 |
/* dual pascal/C strings |
72 |
*/ |
73 |
typedef unsigned char PCstr; |
74 |
#define C(str) ((char*)(str) + 1) |
75 |
#define P(str) ((unsigned char*)(str)) |
76 |
|
77 |
/* various machine types. |
78 |
*/ |
79 |
typedef unsigned short WORD; |
80 |
typedef unsigned char BYTE; |
81 |
|
82 |
/* useful macros: |
83 |
*/ |
84 |
#define HIWORD(x) ( (WORD) ( (x) >> 16) ) |
85 |
#define LOWORD(x) ( (WORD) (x) ) |
86 |
|
87 |
/* most window/menu procedures return short integers (see defines below) |
88 |
*/ |
89 |
typedef short (*na_menup)(struct na_win *, WORD, WORD); |
90 |
typedef short (*na_mousep)(struct na_win *, Point, short, short); |
91 |
typedef short (*na_ctrlp)(struct na_win *, Point, short, short, ControlHandle); |
92 |
typedef short (*na_activep)(struct na_win *, Boolean); |
93 |
typedef short (*na_closep)(struct na_win *); |
94 |
typedef void (*na_afterp)(struct na_win *); |
95 |
typedef short (*na_updatep)(struct na_win *, Boolean); |
96 |
typedef short (*na_keyp)(struct na_win *, long, short); |
97 |
typedef short (*na_cursorp)(struct na_win *, Point); |
98 |
typedef short (*na_miscp)(struct na_win *, EventRecord *); |
99 |
typedef short (*na_idlep)(struct na_win *); |
100 |
typedef short (*na_taskp)(struct na_win *); |
101 |
typedef short (*na_resizep)(struct na_win *, Point, Rect *); |
102 |
typedef short (*na_openp)(short, FSSpec *, FInfo *); |
103 |
typedef short (*na_initp)(struct na_win *, long *); |
104 |
typedef struct na_win { |
105 |
long flags; /* flags indicating various window settings (see below) */ |
106 |
short delay; /* delay between main loop cycles (in ticks) */ |
107 |
short mousepix; /* number of pixels mouse can move until drag starts */ |
108 |
short minw, minh; /* minimum width and height for the window */ |
109 |
short maxw, maxh; /* maximum width and height for the window */ |
110 |
short type; /* current window type (negatives reserved) */ |
111 |
BYTE locks; /* locks on this window structure */ |
112 |
short priority; /* priority if there is a taskp (-1 = everytime) */ |
113 |
RgnHandle cursorRgn; /* cursor region */ |
114 |
RgnHandle uncrsrRgn; /* region cursor isn't in */ |
115 |
WindowPtr pwin; /* window pointer */ |
116 |
struct na_win **next; /* handle to next window in linked list */ |
117 |
struct na_win **task; /* handle to next task in a linked list of active tasks */ |
118 |
struct na_win **child; /* handle to child window list (NULL = no child) */ |
119 |
struct na_win **parent; /* handle to parent window (NULL = toplevel) */ |
120 |
na_menup menup; /* menu proc */ |
121 |
na_mousep mousep; /* mouse proc */ |
122 |
na_ctrlp ctrlp; /* dialog item/control proc */ |
123 |
na_activep activep; /* activate proc */ |
124 |
na_closep closep; /* close proc */ |
125 |
na_afterp afterp; /* after proc */ |
126 |
na_updatep updatep; /* update proc */ |
127 |
na_keyp keyp; /* key proc */ |
128 |
na_cursorp cursorp; /* cursor setting proc */ |
129 |
na_miscp miscp; /* miscellaneous event proc (disk/net/app/driver) */ |
130 |
na_idlep idlep; /* idle proc */ |
131 |
na_taskp taskp; /* task proc */ |
132 |
na_resizep resizep; /* resize proc */ |
133 |
long resid; /* storage for window resource id or user data. */ |
134 |
char *data; /* data pointer for user */ |
135 |
} na_win; |
136 |
typedef struct nate_win { |
137 |
na_win winp; |
138 |
TEHandle hTE; /* textedit handle for auto-textedit routines */ |
139 |
ControlHandle hctrl; /* horizontal scroll bar for textedit */ |
140 |
ControlHandle vctrl; /* vertical scroll bar for textedit */ |
141 |
long docwidth; /* width of the document */ |
142 |
short lheight; /* line height of text */ |
143 |
short topoff; /* offset from top of window to textedit area */ |
144 |
} nate_win; |
145 |
/* procedures types: |
146 |
* |
147 |
* // called for menu events when window is frontmost |
148 |
* // supercedes global menu function unless NA_NOTPROCESSED is returned. |
149 |
* // if menuid is 0, the procedure should enable/disable menus appropriately |
150 |
* // if menuid is 1, the procedure should disable enabled menus appropriately |
151 |
* short menu(winp, menuid, itemno) |
152 |
* WORD menuid; // resource id of the menu |
153 |
* WORD itemno; // item number of the menu item |
154 |
* |
155 |
* // called for mouse down/up/move events in the window |
156 |
* short mouse(winp, p, type, mods) |
157 |
* Point p; // location of mouse action |
158 |
* short type; // type of mouse action (see below) |
159 |
* short mods; // modifier keys |
160 |
* |
161 |
* // called for dialog events in dialog windows |
162 |
* // control events in windows with controls |
163 |
* // In a dialog window with no key procedure, ESC, command-., return, enter are |
164 |
* // mapped to iCancel and iOk. |
165 |
* short control(winp, p, itemHit, mods, ctrlh) |
166 |
* Point p; // point in window local coords |
167 |
* short itemHit; // the item/part code clicked |
168 |
* short mods; // modifier keys |
169 |
* ControlHandle ctrlh; // handle to the control |
170 |
* |
171 |
* // called when window is activated or deactivated |
172 |
* // close return values may be ignored on a deactivate |
173 |
* short activate(winp, on) |
174 |
* Boolean on; // true = activate, false = deactivate |
175 |
* |
176 |
* // called when a window close request has been made (close box/close menu item) |
177 |
* // called when any window function returns NA_REQCLOSE or NA_REQCLOSEALL |
178 |
* // respond with either NA_CLOSED or NA_NOTPROCESSED |
179 |
* short close(winp) |
180 |
* |
181 |
* // called after window closed & removed from lists, but before window object freed |
182 |
* void afterp(winp) |
183 |
* |
184 |
* // called on update events |
185 |
* short update(winp, newsize) |
186 |
* Boolean newsize; // true if r is a new window size |
187 |
* |
188 |
* // called on key/autokey events (menu keys are parsed out first) |
189 |
* short key(winp, c, mods) |
190 |
* long c; // ASCII value of the key (unless NA_RAWKEY option set) |
191 |
* short mods; // modifier keys |
192 |
* |
193 |
* // called when cursor moves into or out of a window |
194 |
* // use winp->flags & NA_CURSORON |
195 |
* // close request return values are ignored. |
196 |
* // return NA_PROCESSED only when the cursorRgn is changed |
197 |
* short cursor(winp, p) |
198 |
* Point p; // point where the cursor is |
199 |
* |
200 |
* // This is called for miscellaneous events (disk/network/driver/app1-3) |
201 |
* short miscp(winp, pevent) |
202 |
* EventRecord *pevent; // the event |
203 |
* |
204 |
* // called every time through the event loop when window active |
205 |
* short idle(winp) |
206 |
* |
207 |
* // called cyclicly with other tasks with each pass through event loop |
208 |
* // only used when task is installed |
209 |
* // the task procedure can only close it's own window. |
210 |
* short task(winp) |
211 |
* |
212 |
* // function called to resize the window |
213 |
* // (parameters similar to GrowWindow function) |
214 |
* short resize(winp, where, rct) |
215 |
* Point where; |
216 |
* Rect *rct; |
217 |
* |
218 |
* // function passed to NAinit: |
219 |
* // should return 0 if OK, and -1 to stop opening files |
220 |
* short open(message, afile, fspec) |
221 |
* short message; // either appOpen or appPrint (in SegLoad.h) |
222 |
* FSSpec *fspec; // file to open/print |
223 |
* Finfo *finfo; // finder info |
224 |
* |
225 |
* // function passed to NAwindow: |
226 |
* // returns standard window status |
227 |
* short init(winp, datap) |
228 |
* na_win *winp; // pointer to new window structure |
229 |
* long *datap; // pointer to data passed through NAwindow |
230 |
*/ |
231 |
|
232 |
/* niftyapp globals */ |
233 |
extern na_win **NAhead; /* handle to the head of the window tree */ |
234 |
extern na_win **NAtask; /* handle to the head of the window task list */ |
235 |
extern na_win **NActask; /* handle to the current task */ |
236 |
extern na_win *NAwin; /* pointer to current window (NULL = no current window) */ |
237 |
extern na_menup NAmenup; /* pointer to default menu procedure */ |
238 |
extern MenuHandle **NAmenus; /* list of menu handles */ |
239 |
extern short NAnewitem; /* item number of the new item on the file menu (0 = not avail) */ |
240 |
extern short NAcloseitem; /* item number of the close item on the file menu (0 = not avail) */ |
241 |
extern short NAappleitems; /* the number of (user) items at the top of the apple menu */ |
242 |
extern short NAhelpitems; /* the number of (user) help items */ |
243 |
extern short NAhelpcount; /* the number of (system) items at the top of the help menu */ |
244 |
extern Boolean NAhasedit; /* true if application has an edit menu */ |
245 |
extern long NAdelay; /* the wait next event delay */ |
246 |
extern SysEnvRec NAsysenv; /* mac system environment */ |
247 |
extern Boolean NAinBack; /* true if application is backgrounded */ |
248 |
extern long NAmousetime; /* time of last mouse up event */ |
249 |
extern short NAlastmouse; /* kind of last mouse event */ |
250 |
extern Cursor NAibeam; /* the ibeam cursor */ |
251 |
extern long NAgestaltBits; /* 0 = gestalt not on system */ |
252 |
|
253 |
/* globals for your convenience */ |
254 |
extern RgnHandle NAfullRgn, NAnullRgn; |
255 |
|
256 |
/* niftyapp definitions */ |
257 |
|
258 |
/* default resource id for niftyapp windows */ |
259 |
#define NA_CLIPWINDOW 1000 |
260 |
#define NA_ABOUTDLOG 1000 |
261 |
#define NA_PREFSDLOG 1001 |
262 |
#define NA_HELPSTR 1000 |
263 |
/* default item numbers for OK & cancel */ |
264 |
#define iOk 1 |
265 |
#define iCancel 2 |
266 |
/* default ids for APPLE, FILE, EDIT, and HELP menus */ |
267 |
#define mApple 128 |
268 |
#define mFile 129 |
269 |
#define mEdit 130 |
270 |
#define mHelp ((WORD)-16490) |
271 |
/* default item numbers for about & edit menu */ |
272 |
#define iAbout 1 |
273 |
#define iUndo 1 |
274 |
#define iCut 3 |
275 |
#define iCopy 4 |
276 |
#define iPaste 5 |
277 |
#define iClear 6 |
278 |
#define iSelAll 7 |
279 |
#define iClipboard 9 |
280 |
/* new window positions */ |
281 |
#define NA_HFULLSCN 0x0000 |
282 |
#define NA_HQUARTERSCN 0x0001 |
283 |
#define NA_HHALFSCN 0x0002 |
284 |
#define NA_H3QUARTERSCN 0x0003 |
285 |
#define NA_VFULLSCN 0x0000 |
286 |
#define NA_VQUARTERSCN 0x0004 |
287 |
#define NA_VHALFSCN 0x0008 |
288 |
#define NA_V3QUARTERSCN 0x000C |
289 |
#define NA_CENTERSCN 0x0000 |
290 |
#define NA_TOPSCN 0x0010 |
291 |
#define NA_BOTTOMSCN 0x0020 |
292 |
#define NA_LEFTSCN 0x0040 |
293 |
#define NA_RIGHTSCN 0x0080 |
294 |
#define NA_TITLEOFFSET 0x0100 |
295 |
/* new window flags */ |
296 |
#define NA_PLAINWIN 0x00000000L /* plain window -- no title, simple border */ |
297 |
#define NA_COLORWINDOW 0x00000001L /* allow color in the window */ |
298 |
#define NA_DIALOGWINDOW 0x00000002L /* open as a dialog */ |
299 |
#define NA_TITLEBAR 0x00000004L /* have title bar */ |
300 |
#define NA_GROWBOX 0x00000008L /* have a grow box (enables automatic drawing) */ |
301 |
#define NA_ZOOMBOX 0x00000010L /* have a zoom box */ |
302 |
#define NA_CLOSEBOX 0x00000020L /* have a close box (enables close menu item) */ |
303 |
#define NA_SHADOWBORDER 0x00000040L /* have a shadow border (for dialogs) */ |
304 |
#define NA_DOUBLEBORDER 0x00000080L /* have a double (dialog) border */ |
305 |
#define NA_ROUNDBORDER 0x000000c0L /* have rounded corners and black title bar */ |
306 |
#define NA_CHILDWINDOW 0x00000100L /* open as a child window of current window */ |
307 |
#define NA_NOTVISIBLE 0x00000200L /* do not make window visible on open */ |
308 |
#define NA_BEHIND 0x00000400L /* open window behind current window */ |
309 |
#define NA_HASCONTROLS 0x00000800L /* process/draw/kill controls automatically */ |
310 |
#define NA_HASTASK 0x00001000L /* install window in background task list */ |
311 |
#define NA_USERESOURCE 0x00002000L /* use res parameter as WIND/DLOG/wctb/dctb resource */ |
312 |
#define NA_CURSORON 0x00004000L /* true if application has set the cursor */ |
313 |
#define NA_MODAL 0x00008000L /* set if window/dialog will be modal */ |
314 |
#define NA_DEFBUTTON 0x00010000L /* show default button after init proc */ |
315 |
#define NA_COPYDATA 0x00020000L /* data will by copied by NAwindow */ |
316 |
#define NA_SMARTSIZE 0x00040000L /* window resizes & placements are saved in WIND res */ |
317 |
#define NA_FORCESIZE 0x00080000L /* when a resource is used, re-size the window anyway */ |
318 |
#define NA_RAWKEY 0x00100000L /* if set, key event fields aren't stripped */ |
319 |
#define NA_HILITECTRLS 0x00200000L /* if set, hilite controls on activate/deactive */ |
320 |
#define NATE_FLAGS 0x0f000000L /* flags reserved for NATE */ |
321 |
#define NA_USER_FLAG1 0x10000000L /* flags reserved for users */ |
322 |
#define NA_USER_FLAG2 0x20000000L |
323 |
#define NA_USER_FLAG3 0x40000000L |
324 |
#define NA_USER_FLAG4 0x80000000L |
325 |
/* niftyapp window/task types */ |
326 |
#define NA_CLIPTYPE -1 |
327 |
#define NA_DEBUGTYPE -2 |
328 |
#define NA_TCPTYPE -3 |
329 |
#define NA_SMTPTYPE -4 |
330 |
/* mouse click types */ |
331 |
#define NA_DOWN1 0 |
332 |
#define NA_UP1 1 |
333 |
#define NA_DOWN2 2 |
334 |
#define NA_UP2 3 |
335 |
#define NA_DOWNN 4 |
336 |
#define NA_UPN 5 |
337 |
#define NA_DRAG 6 |
338 |
#define NA_RELEASE 7 |
339 |
/* return values for window/menu procedures */ |
340 |
#define NA_ALLCLOSED -4 /* all windows are to be destroyed & exit app immediately */ |
341 |
#define NA_REQCLOSEALL -3 /* request to close all windows & exit app */ |
342 |
#define NA_CLOSED -2 /* current window is ready to close (used by closep/taskp) */ |
343 |
#define NA_REQCLOSE -1 /* request to close current window */ |
344 |
#define NA_NOTPROCESSED 0 /* use any default handler available */ |
345 |
#define NA_PROCESSED 1 /* do nothing more */ |
346 |
#define NA_USERINTERACT 2 /* user interaction pending -- don't do tasks */ |
347 |
/* Gestalt bits */ |
348 |
#define NA_HASAEVENTS 0x00000001L /* Apple events supported */ |
349 |
#define NA_HASFSSPEC 0x00000002L /* FSSpec calls supported */ |
350 |
#define NA_HASSTDFILE 0x00000004L /* New standard file available */ |
351 |
|
352 |
/* niftyapp basic macros */ |
353 |
|
354 |
#define NAunlockWindow(winp) {if (!--(winp)->locks) HUnlock((Handle) GetWRefCon((winp)->pwin));} |
355 |
#define NAunlockWindowh(winh, winp) {if (!--(winp)->locks) HUnlock((Handle) winh);} |
356 |
#define NAisDAWindow(pWnd) (( (WindowPeek) pWnd)->windowKind < 0) |
357 |
#define NAmenuh(menu) ((*NAmenus)[(menu) - mApple]) |
358 |
#define NAenableMItem(menu, item) EnableItem(NAmenuh(menu), item) |
359 |
#define NAdisableMItem(menu, item) DisableItem(NAmenuh(menu), item) |
360 |
#define NAcheckItem(menu, item, c) CheckItem(NAmenuh(menu), item, c) |
361 |
#define NAgetDHandle(dlg, it, hn) {short ty; Rect r; GetDItem(dlg, it, &ty, (Handle *) (hn), &r);} |
362 |
#define NAgetDRect(dlg, it, rct) {short ty; Handle hn; GetDItem(dlg, it, &ty, &hn, (rct));} |
363 |
#define NAsetIval(dlg, it, val) {short ty; Rect r; Handle hn; GetDItem(dlg, it, &ty, &hn, &r); SetCtlValue((ControlHandle)hn, (val));} |
364 |
#define NAsetInum(dlg, it, val) NAsetIText(dlg, it, longtoPCstr(val)) |
365 |
#define NAalert(resid) Alert(resid, NAfilterProc) |
366 |
|
367 |
/* niftyapp basic procedures */ |
368 |
|
369 |
/* initialize the Macintosh managers and niftyapp internal variables. |
370 |
* optionally set up a menu bar & menu procedure. |
371 |
* Returns 0 if OK, negative if an error occured, 1 if print files requested & app should quit |
372 |
* short minK; // minimum K needed to execute |
373 |
* short masters; // number of times to call MoreMasters() |
374 |
* na_proc *openp; // open file procedure -- called for each application in the startup list |
375 |
* na_proc *menup; // pointer to a menu procedure (NULL = no menu handling) |
376 |
* short nummenu; // number of menus (starting at mApple == 128) |
377 |
* short numapple; // number of apple menu items |
378 |
* short newitem; // item number of new item (mFile) |
379 |
* short closeitem; // item number of close item (mFile) |
380 |
*/ |
381 |
short NAinit(short, short, na_openp, na_menup, short, short, short, short); |
382 |
|
383 |
/* call the main loop procedure |
384 |
*/ |
385 |
void NAmainloop(void); |
386 |
|
387 |
/* create a rectangle based on the screen size |
388 |
* short position; // see above |
389 |
*/ |
390 |
Rect *NAscreenrect(short); |
391 |
|
392 |
/* create a new window structure |
393 |
* returns window status result, up to the caller to pass on NA_ALLCLOSED |
394 |
* Rect *rpos; // placement rectangle |
395 |
* long flags; // flags determining type of window |
396 |
* char *title; // window title (C string may not be NULL unless NA_USERESOURCE) |
397 |
* short res; // resource number of WIND/DLOG/wctb/dctb/DITL |
398 |
* long *initdata; // window data (may be NULL) |
399 |
* long datasize; // bytes of window data |
400 |
* na_proc *initp; // procedure to initialize the window functions, etc. |
401 |
*/ |
402 |
short NAwindow(Rect *, long, char *, short, long *, long, na_initp); |
403 |
|
404 |
/* create & add a new task to the task list, given pointer to task procedure, |
405 |
* and data size |
406 |
*/ |
407 |
na_win **NAaddtask(na_taskp, long); |
408 |
|
409 |
/* standard init procedure for an about box -- stops all background tasks, however */ |
410 |
short NAabout(na_win*, long*); |
411 |
|
412 |
/* standard button flash procedure used by shell for keypresses */ |
413 |
void NAflashButton(DialogPtr, short); |
414 |
|
415 |
/* draw the default button */ |
416 |
void NAdefaultButton(DialogPtr); |
417 |
|
418 |
/* filter proc for modal dialogs which handles ESC and command-. */ |
419 |
pascal Boolean NAfilterProc(DialogPtr, EventRecord *, short *); |
420 |
|
421 |
/* re-calculate cursor region information (after changing winp->cursorRgn) */ |
422 |
void NAcalcCursor(na_win*); |
423 |
|
424 |
/* this saves a window's dimensions into a 'WIND' resource with appropriate resid */ |
425 |
void NAsaveWin(na_win*); |
426 |
|
427 |
/* This is available to access window structures other than the current window |
428 |
* best for looking at parent window or child window(s). |
429 |
*/ |
430 |
na_win *NAlockWindow(na_win**); |
431 |
|
432 |
/* This is available, but the user should only call it is severe cases */ |
433 |
short NAcloseWindow(na_win*, short); |
434 |
|
435 |
/* this is for closing all windows, the user should only call it from main |
436 |
* usually NAhead is the first parameter. |
437 |
*/ |
438 |
short NAcloseWindows(na_win**, short); |
439 |
|
440 |
/* this is for sending an event directly to the misc procedure of all windows. |
441 |
* usually NAhead is the first parameter. |
442 |
*/ |
443 |
short NAallWindows(na_win**, EventRecord*); |
444 |
|
445 |
|
446 |
/* niftyapp clipboard library: |
447 |
* NAclipboard: true = window on, false = window off, 'TEXT' or 'PICT' |
448 |
*/ |
449 |
void NAclipboard(Boolean, ResType); |
450 |
|
451 |
|
452 |
/* niftyapp debug library: |
453 |
*/ |
454 |
void NAdebug(char *, ...); |
455 |
#ifdef DEBUG |
456 |
#define NADEBUG(x) NAdebug x |
457 |
#else |
458 |
#define NADEBUG(x) |
459 |
#endif |
460 |
|
461 |
|
462 |
/* niftyapp dialog library: |
463 |
*/ |
464 |
/* select a radio button |
465 |
* returns number from 0 to firstitem - lastitem: the button that's been pressed |
466 |
* DialogPtr dialog; // the dialog window |
467 |
* short firstitem; // the itemno of first radio button |
468 |
* short lastitem; // the itemno of last radio button |
469 |
* short setting; // the radio button to set (itemno to lastitem) |
470 |
*/ |
471 |
short NAradioSet(DialogPtr, short, short, short); |
472 |
|
473 |
/* get the itemno of the active radio button |
474 |
* DialogPtr dialog; // the dialog window |
475 |
* short firstitem; // the itemno of first radio button |
476 |
* short lastitem; // the itemno of last radio button |
477 |
*/ |
478 |
short NAradioGet(DialogPtr, short, short); |
479 |
|
480 |
/* enable/disable,hilite,show/hide an item in a dialog window */ |
481 |
void NAenableDItem(DialogPtr, short, Boolean); |
482 |
void NAhiliteDItem(DialogPtr, short, short); |
483 |
void NAvisibleDItem(DialogPtr, short, Boolean); |
484 |
|
485 |
/* set/get the item text in a dialog item */ |
486 |
void NAsetIText(DialogPtr, short, PCstr*); |
487 |
void NAgetIText(DialogPtr, short, PCstr*); |
488 |
|
489 |
/* enable/disable modal menus for a moveable modal dialog box (1 = go modal) */ |
490 |
void NAmodalMenus(int); |
491 |
|
492 |
/* handle edit menu for dialogs */ |
493 |
short NAdialogMenu(na_win *, WORD, WORD); |
494 |
|
495 |
|
496 |
/* NATE (NiftyApp TextEdit) libraries |
497 |
*/ |
498 |
#define NATEflags (NA_TITLEBAR | NA_GROWBOX | NA_ZOOMBOX | NA_CLOSEBOX \ |
499 |
| NA_HASCONTROLS | NA_HILITECTRLS) |
500 |
#define NATE_DEFAULT 0x00000000L |
501 |
#define NATE_READONLY 0x01000000L |
502 |
#define NATE_NOMOUSE 0x02000000L |
503 |
#define NATE_NOHSCROLL 0x04000000L |
504 |
#define NATE_NOVSCROLL 0x08000000L |
505 |
void NATEinit(na_win*, long, short, Ptr, long); /* winp, flags, horizwidth, data, len */ |
506 |
short NATEinitp(na_win*, long*); |
507 |
short NATEmousep(na_win*, Point, short, short); |
508 |
short NATEidlep(na_win*); |
509 |
short NATEactivep(na_win*, Boolean); |
510 |
short NATEkeyp(na_win*, long, short); |
511 |
short NATEmenup(na_win*, WORD, WORD); |
512 |
short NATEupdatep(na_win*, Boolean); |
513 |
short NATEctrlp(na_win*, Point, short, short, ControlHandle); |
514 |
short NATEclosep(na_win*); |
515 |
|
516 |
void NATEsetscroll(na_win*, Boolean, Rect*, Rect*); |
517 |
void NATEappend(na_win*, char*, long); |
518 |
|
519 |
|
520 |
/* Niftyapp file library |
521 |
*/ |
522 |
/* get a file to open -- similar to StandardGetFile, but works on older systems |
523 |
* extra fields in "StandardFileReply" are only valid if NA_HASSTDFILE is set in |
524 |
* NAgestaltBits |
525 |
*/ |
526 |
void NAgetFile(FileFilterProcPtr, short, SFTypeList, StandardFileReply *); |
527 |
/* put a file to open -- similar to StandardPutFile, but works on older systems |
528 |
* extra fields in "StandardFileReply" are only valid if NA_HASSTDFILE is set in |
529 |
* NAgestaltBits |
530 |
*/ |
531 |
void NAputFile(Str255, Str255, StandardFileReply *); |
532 |
|
533 |
|
534 |
/* Niftyapp TCP library |
535 |
*/ |
536 |
/* tcp stream descriptor */ |
537 |
typedef int na_tcp; |
538 |
/* tcp init function |
539 |
* passed NATCP_connect for success, NATCP_nodriver/NATCP_nomem for failure |
540 |
* passed 1 to 100 for progress waiting for MacTCP to finish cleanly |
541 |
*/ |
542 |
typedef void na_tcpinitp(short); |
543 |
/* TCP read/status callback for connection, or TCP window |
544 |
* void *user; Context generic pointer (passed to NATCPopen) |
545 |
* na_tcp s; TCP stream id |
546 |
* short status; TCP status (see below) |
547 |
* long size; size of buffer (or Macintosh error) |
548 |
* char *data; data or NULL |
549 |
*/ |
550 |
typedef void na_tcpreadp(void *, na_tcp, short, long, char *); |
551 |
typedef void na_readp(na_win *, short, long, char *); |
552 |
/* TCP window */ |
553 |
typedef struct natcp_win { |
554 |
na_win winp; |
555 |
na_tcp s; |
556 |
na_readp *readp; |
557 |
} natcp_win; |
558 |
/* status values/bits */ |
559 |
#define NATCP_closing 0x08 /* other end of connection closed */ |
560 |
#define NATCP_urgent 0x04 /* in urgent mode */ |
561 |
#define NATCP_more 0x02 /* more data will follow immediately */ |
562 |
#define NATCP_data 0x01 /* data to read */ |
563 |
#define NATCP_connect 0x00 /* connection ready */ |
564 |
#define NATCP_noread -1 /* non-fatal */ |
565 |
#define NATCP_nowrite -2 /* fatal... */ |
566 |
#define NATCP_nodriver -3 |
567 |
#define NATCP_notcpbuf -4 |
568 |
#define NATCP_nomem -5 |
569 |
#define NATCP_nohost -6 |
570 |
#define NATCP_nocon -7 |
571 |
#define NATCP_closed -8 /* connection fully closed */ |
572 |
/* open flags */ |
573 |
#define NATCP_server 0x01 /* be a server */ |
574 |
/* functions */ |
575 |
void NATCPinit(na_tcpinitp *); |
576 |
/* NATCPsettings: TCP buffer size, type of service, precedence, write buffer size */ |
577 |
void NATCPsettings(long, short, short, unsigned short); |
578 |
short NATCPtask(na_win *); |
579 |
/* NATCPopen: callback, context, host, port, flags */ |
580 |
na_tcp NATCPopen(na_tcpreadp *, void *, char *, long, short); |
581 |
na_tcp NATCPwinopen(natcp_win *, char *, long, short); /* tcp window, host, port, flags */ |
582 |
short NATCPwrite(na_tcp, Ptr, long, short); /* tcp, buffer, length, dispose */ |
583 |
short NATCPputchar(na_tcp, char); |
584 |
void NATCPclose(na_tcp); |
585 |
void NATCPdone(long); /* number of 1/60 sec intervals to wait for MacTCP to finish cleanly */ |
586 |
/* returns passes NATCP_connect to readp on success with hostname as argument */ |
587 |
void NATCPgethost(na_tcpreadp *, void *); |
588 |
|
589 |
|
590 |
/* niftyapp SMTP library |
591 |
*/ |
592 |
/* status: |
593 |
* void *context; user context |
594 |
* short code; see below |
595 |
* short err; SMTP error code or NATCP error code (NASMTP_tcpfail) or 0 |
596 |
* long num; macintosh TCP error code or address number or 0 |
597 |
* char *errstr; SMTP error string or NULL |
598 |
*/ |
599 |
typedef void (*na_smtpstat)(void *, short, short, long, char *); |
600 |
#define NASMTP_progress 2 /* progress: err = % done */ |
601 |
#define NASMTP_badaddr 1 /* address was not valid */ |
602 |
#define NASMTP_completed 0 /* success */ |
603 |
#define NASMTP_nomem -1 /* not enough memory */ |
604 |
#define NASMTP_badargs -2 /* input arguments invalid */ |
605 |
#define NASMTP_oserr -3 /* OS failure (e.g. file error) */ |
606 |
#define NASMTP_tcpfail -4 /* TCP connection to SMTP server failed */ |
607 |
#define NASMTP_conclosed -5 /* connection closed by other side before completion */ |
608 |
#define NASMTP_badprot -6 /* other end sent unrecognizable protocol */ |
609 |
#define NASMTP_temperr -7 /* SMTP persistant temporary failure */ |
610 |
#define NASMTP_permerr -8 /* SMTP permanent failure */ |
611 |
/* Submit email: statf, server, fspec, headers, envelope, flags, context */ |
612 |
void NASMTPsubmit(na_smtpstat, char *, FSSpec *, Handle, Handle, short, void *); |
613 |
#define NASMTP_crtrans 0x01 /* flag indicating translation of CR -> CRLF desired */ |
614 |
|
615 |
/* PC, C string libraries: |
616 |
*/ |
617 |
#define SetClen(pcstr) (*((pcstr) + *(pcstr) + 1) = '\0') |
618 |
#define PCstrlen(pcstr) (*(pcstr)) |
619 |
#define Pstrlen(pstr) (* (unsigned char *) (pstr)) |
620 |
|
621 |
void PtoPCstrcpy(PCstr*, char*); |
622 |
void CtoPCstrcpy(PCstr*, char*); |
623 |
void PCtoPCstrcpy(PCstr*, PCstr*); |
624 |
void PtoPCstrncpy(PCstr*, char*, short); |
625 |
void CtoPCstrncpy(PCstr*, char*, short); |
626 |
void PtoPCstrcat(PCstr*, char*); |
627 |
void CtoPCstrcat(PCstr*, char*); |
628 |
PCstr *PtoPCstr(char*); |
629 |
PCstr *CtoPCstr(char*); |
630 |
void SetPlen(PCstr*); |
631 |
PCstr *longtoPCstr(long); |