Rather than increasing the size of my switch statements yet further, have
[u/mdw/putty] / mac / mac.h
index 50ed142..c228d1b 100644 (file)
--- a/mac/mac.h
+++ b/mac/mac.h
@@ -9,6 +9,7 @@
 #include <Controls.h>
 #include <Events.h>
 #include <Gestalt.h>
+#include <Lists.h>
 #include <MacWindows.h>
 #include <Palettes.h>
 #include <UnicodeConverter.h>
@@ -28,6 +29,7 @@ struct mac_gestalts {
     long windattr;
     long encvvers; /* TEC version (from TECGetInfo()) */
     long uncvattr; /* Unicode Converter attributes (frem TECGetInfo()) */
+    long navsvers; /* Navigation Services version */
 };
 
 extern struct mac_gestalts mac_gestalts;
@@ -39,6 +41,27 @@ extern struct mac_gestalts mac_gestalts;
 #define HAVE_COLOR_QD() (mac_gestalts.qdvers > gestaltOriginalQD)
 #endif
 
+/* Every window used by PuTTY has a refCon field pointing to one of these. */
+typedef struct {
+    struct Session *s;    /* Only used in PuTTY */
+    struct KeyState *ks; /* Only used in PuTTYgen */
+
+    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)
+
 typedef struct Session {
     struct Session *next;
     struct Session **prev;
@@ -72,6 +95,8 @@ typedef struct Session {
     Point              font_bigdenom;
     WindowPtr          window;
     WindowPtr          settings_window;
+    WindowPtr          eventlog_window;
+    ListHandle         eventlog;
     PaletteHandle      palette;
     ControlHandle      scrollbar;
     WCTabHandle                wctab;
@@ -84,26 +109,25 @@ typedef struct Session {
 
 extern Session *sesslist;
 
+/* PuTTYgen per-window state */
+typedef struct KeyState {
+    DialogPtr          box;
+} KeyState;
+
+#define mac_windowkey(w)       (((WinInfo *)GetWRefCon(w))->ks)
+
 /* 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 */
+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);
@@ -145,6 +169,10 @@ 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 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);