home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Amiga / Workbench / Archivers / mpackPPC.lha / mpackPPC / src / macnapp.h < prev    next >
C/C++ Source or Header  |  1998-04-08  |  26KB  |  632 lines

  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);
  632.