Add input-focus support for System 7, where the Control Manager can't do
[u/mdw/putty] / mac / mac.h
index dfe7285..d453de7 100644 (file)
--- a/mac/mac.h
+++ b/mac/mac.h
@@ -15,6 +15,7 @@
 #include <UnicodeConverter.h>
 
 #include "charset.h"
+#include "tree234.h"
 
 #define PUTTY_CREATOR  FOUR_CHAR_CODE('pTTY')
 #define INTERNAL_CREATOR FOUR_CHAR_CODE('pTTI')
@@ -27,12 +28,14 @@ struct mac_gestalts {
     long apprvers;
     long cntlattr;
     long windattr;
+    long menuattr;
     long encvvers; /* TEC version (from TECGetInfo()) */
     long uncvattr; /* Unicode Converter attributes (frem TECGetInfo()) */
     long navsvers; /* Navigation Services version */
 };
 
 extern struct mac_gestalts mac_gestalts;
+extern UInt32 sleeptime;
 
 #if TARGET_RT_MAC_CFM
 /* All systems that can use CFM have Color QuickDraw */
@@ -43,11 +46,38 @@ extern struct mac_gestalts mac_gestalts;
 
 /* Every window used by PuTTY has a refCon field pointing to one of these. */
 typedef struct {
-    struct Session *s;
+    struct Session *s;    /* Only used in PuTTY */
+    struct KeyState *ks; /* Only used in PuTTYgen */
+    struct macctrls *mcs;
+
+    void (*activate)   (WindowPtr, EventRecord *);
+    void (*adjustcursor)(WindowPtr, Point, RgnHandle);
+    void (*adjustmenus)        (WindowPtr);
+    void (*update)     (WindowPtr);
+    void (*click)      (WindowPtr, EventRecord *);
+    void (*grow)       (WindowPtr, EventRecord *);
+    void (*key)                (WindowPtr, EventRecord *);
+    void (*menu)       (WindowPtr, short, short);
+    void (*close)      (WindowPtr);
+
     int wtype;
 } WinInfo;
 
+#define mac_wininfo(w)         ((WinInfo *)GetWRefCon(w))
 #define mac_windowsession(w)   (((WinInfo *)GetWRefCon(w))->s)
+#define mac_winctrls(w)                (((WinInfo *)GetWRefCon(w))->mcs)
+
+union macctrl;
+
+struct macctrls {
+    WindowPtr          window;
+    tree234            *byctrl;
+    void               *data; /* private data for config box */
+    unsigned int       npanels;
+    unsigned int       curpanel;
+    union macctrl      **panels; /* lists of controls by panel */
+    union macctrl      *focus; /* Input focus for System 7 */
+};    
 
 typedef struct Session {
     struct Session *next;
@@ -81,7 +111,6 @@ typedef struct Session {
     Point              font_bignumer;
     Point              font_bigdenom;
     WindowPtr          window;
-    WindowPtr          settings_window;
     WindowPtr          eventlog_window;
     ListHandle         eventlog;
     PaletteHandle      palette;
@@ -92,37 +121,40 @@ typedef struct Session {
     charset_t          font_charset; /* font_charset is used at a time. */
     int                        hasfile;
     FSSpec             savefile;
+
+    /* Config dialogue bits */
+    WindowPtr          settings_window;
+    struct controlbox  *ctrlbox;
+    struct macctrls    settings_ctrls;
 } Session;
 
 extern Session *sesslist;
 
+/* PuTTYgen per-window state */
+typedef struct KeyState {
+    DialogPtr          box;
+    int collecting_entropy;
+    int entropy_got, entropy_required, entropy_size;
+    unsigned *entropy;
+    ControlHandle      progress;
+} KeyState;
+
+#define mac_windowkey(w)       (((WinInfo *)GetWRefCon(w))->ks)
+
+/* from macmisc.c */
+extern WindowPtr mac_frontwindow(void);
 /* from macdlg.c */
 extern void mac_newsession(void);
 extern void mac_dupsession(void);
 extern void mac_savesession(void);
 extern void mac_savesessionas(void);
-extern void mac_clickdlg(WindowPtr, EventRecord *);
-extern void mac_activatedlg(WindowPtr, EventRecord *);
 /* from maceventlog.c */
-void mac_freeeventlog(Session *);
-extern void mac_clickeventlog(WindowPtr, EventRecord *);
-extern void mac_activateeventlog(WindowPtr, EventRecord *);
-extern void mac_groweventlog(WindowPtr, EventRecord *);
-extern void mac_updateeventlog(WindowPtr);
+extern void mac_freeeventlog(Session *);
 extern void mac_showeventlog(Session *);
 /* from macterm.c */
 extern void mac_opensession(void);
 extern void mac_startsession(Session *);
 extern void mac_pollterm(void);
-extern void mac_activateterm(WindowPtr, Boolean);
-extern void mac_adjusttermcursor(WindowPtr, Point, RgnHandle);
-extern void mac_adjusttermmenus(WindowPtr);
-extern void mac_updateterm(WindowPtr);
-extern void mac_clickterm(WindowPtr, EventRecord *);
-extern void mac_growterm(WindowPtr, EventRecord *);
-extern void mac_keyterm(WindowPtr, EventRecord *);
-extern void mac_menuterm(WindowPtr, short, short);
-extern void mac_closeterm(WindowPtr);
 /* from macstore.c */
 extern OSErr get_putty_dir(Boolean makeit, short *pVRefNum, long *pDirID);
 extern OSErr get_session_dir(Boolean makeit, short *pVRefNum, long *pDirID);
@@ -164,6 +196,21 @@ extern Socket ot_register(void *, Plug);
 extern Socket ot_new(SockAddr addr, int, int, int, int, Plug);
 extern Socket ot_newlistener(char *, int, Plug, int);
 extern char *ot_addr_error(SockAddr);
+/* from macabout.c */
+extern void mac_openabout(void);
+/* from macctrls.c */
+extern void macctrl_layoutbox(struct controlbox *, WindowPtr,
+                             struct macctrls *);
+extern void macctrl_activate(WindowPtr, EventRecord *);
+extern void macctrl_click(WindowPtr, EventRecord *);
+extern void macctrl_key(WindowPtr, EventRecord *);
+extern void macctrl_update(WindowPtr);
+extern void macctrl_adjustmenus(WindowPtr);
+extern void macctrl_close(WindowPtr);
+
+
+/* from macpgkey.c */
+extern void mac_newkey(void);
 /* Apple Event Handlers (in various files) */
 extern pascal OSErr mac_aevt_oapp(const AppleEvent *, AppleEvent *, long);
 extern pascal OSErr mac_aevt_odoc(const AppleEvent *, AppleEvent *, long);