| 1 |
jmc |
1.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); |