X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/27a3458f34afd8c533f33d980228acd2f7eef856..8def70c3ec6f81f95673c0de67a75b5a6b2e9e1c:/mac/mac.h diff --git a/mac/mac.h b/mac/mac.h index 88b02cd0..c1dcc74f 100644 --- a/mac/mac.h +++ b/mac/mac.h @@ -9,11 +9,19 @@ #include #include #include +#include #include #include #include #include "charset.h" +#include "tree234.h" + +#define PUTTY_CREATOR FOUR_CHAR_CODE('pTTY') +#define INTERNAL_CREATOR FOUR_CHAR_CODE('pTTI') +#define SESS_TYPE FOUR_CHAR_CODE('Sess') +#define SEED_TYPE FOUR_CHAR_CODE('Seed') +#define HKYS_TYPE FOUR_CHAR_CODE('Hkys') struct mac_gestalts { long sysvers; @@ -21,13 +29,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 mtcpvers; - long otptattr; + 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 */ @@ -36,11 +45,53 @@ 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 */ + 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; + void (*end)(WindowPtr, int); + 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 */ + union macctrl *defbutton; /* Default button */ + union macctrl *canbutton; /* Cancel button */ + Boolean gotcolour; + RGBColor thecolour; +}; + typedef struct Session { struct Session *next; struct Session **prev; /* Config that created this session */ Config cfg; + /* Temporary config for passing to Change Settings */ + Config temp_cfg; /* Terminal emulator internal state */ Terminal *term; /* Display state */ @@ -53,52 +104,84 @@ typedef struct Session { char *realhost; /* Logging */ void *logctx; + /* Unicode stuff */ + struct unicode_data ucsdata; + /* Session closed flag */ + int session_closed; /* Mac-specific elements */ short fontnum; int font_ascent; int font_leading; int font_boldadjust; + Point font_stdnumer; + Point font_stddenom; + Point font_widenumer; + Point font_widedenom; + Point font_bignumer; + Point font_bigdenom; WindowPtr window; - WindowPtr settings_window; + WindowPtr eventlog_window; + ListHandle eventlog; PaletteHandle palette; ControlHandle scrollbar; WCTabHandle wctab; int raw_mouse; UnicodeToTextInfo uni_to_font; /* Only one of uni_to_font and */ 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_clickdlg(WindowPtr, EventRecord *); -extern void mac_activatedlg(WindowPtr, EventRecord *); +extern void mac_reconfig(void); +extern void mac_dupsession(void); +extern void mac_savesession(void); +extern void mac_savesessionas(void); +/* 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); /* 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); extern void *open_settings_r_fsp(FSSpec *); +extern void *open_settings_w_fsp(FSSpec *); +extern int verify_host_key(const char *, int, const char *, const char*); +extern void store_host_key(const char *, int, const char *, const char*); /* from macucs.c */ -extern void init_ucs(void); +extern void init_ucs(Session *); +/* from macnet.c */ +extern void sk_poll(void); /* from mtcpnet.c */ extern OSErr mactcp_init(void); extern void mactcp_cleanup(void); extern void mactcp_poll(void); -extern SockAddr mactcp_namelookup(char *, char **); -extern SockAddr mactcp_nonamelookup(char *); +extern SockAddr mactcp_namelookup(char const *, char **); +extern SockAddr mactcp_nonamelookup(char const *); extern void mactcp_getaddr(SockAddr, char *, int); extern int mactcp_hostname_is_local(char *); extern int mactcp_address_is_local(SockAddr); @@ -106,15 +189,15 @@ extern int mactcp_addrtype(SockAddr); extern void mactcp_addrcopy(SockAddr, char *); extern void mactcp_addr_free(SockAddr); extern Socket mactcp_register(void *, Plug); -extern Socket mactcp_new(SockAddr addr, int, int, int, int, Plug); -extern Socket mactcp_newlistener(char *, int, Plug, int); +extern Socket mactcp_new(SockAddr addr, int, int, int, int, int, Plug); +extern Socket mactcp_newlistener(char *, int, Plug, int, int); extern char *mactcp_addr_error(SockAddr); /* from otnet.c */ extern OSErr ot_init(void); extern void ot_cleanup(void); extern void ot_poll(void); -extern SockAddr ot_namelookup(char *, char **); -extern SockAddr ot_nonamelookup(char *); +extern SockAddr ot_namelookup(char const *, char **); +extern SockAddr ot_nonamelookup(char const *); extern void ot_getaddr(SockAddr, char *, int); extern int ot_hostname_is_local(char *); extern int ot_address_is_local(SockAddr); @@ -122,9 +205,29 @@ extern int ot_addrtype(SockAddr); extern void ot_addrcopy(SockAddr, char *); extern void ot_addr_free(SockAddr); 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 Socket ot_new(SockAddr addr, int, int, int, int, int, Plug); +extern Socket ot_newlistener(char *, int, Plug, int, 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); +extern pascal OSErr mac_aevt_pdoc(const AppleEvent *, AppleEvent *, long); +extern pascal OSErr mac_aevt_quit(const AppleEvent *, AppleEvent *, long); #endif