]> asedeno.scripts.mit.edu Git - PuTTY_svn.git/commitdiff
Add an "open" command to the "file" (now "session") menu on the Mac to
authorBen Harris <bjh21@bjh21.me.uk>
Mon, 30 Dec 2002 18:21:17 +0000 (18:21 +0000)
committerBen Harris <bjh21@bjh21.me.uk>
Mon, 30 Dec 2002 18:21:17 +0000 (18:21 +0000)
open an existing saved session.  This has entailed adding an extra hook to
settings.c to allow for loading settings other than by name.

git-svn-id: http://svn.tartarus.org/sgt/putty@2387 cda61777-01e9-0310-a592-d414129be87e

mac/mac.c
mac/mac.h
mac/mac_res.r
mac/macresid.h
mac/macstore.c
mac/macterm.c
putty.h
settings.c

index 54ed35ca9cff305b14501c26be3683cb86ffdc79..0abb33756f006cdc4cd66b65a9b5988b879600c6 100644 (file)
--- a/mac/mac.c
+++ b/mac/mac.c
@@ -1,4 +1,4 @@
-/* $Id: mac.c,v 1.9 2002/12/29 19:14:56 ben Exp $ */
+/* $Id: mac.c,v 1.10 2002/12/30 18:21:17 ben Exp $ */
 /*
  * Copyright (c) 1999 Ben Harris
  * All rights reserved.
@@ -413,6 +413,9 @@ static void mac_menucommand(long result) {
           case iNew:
             mac_newsession();
             goto done;
+         case iOpen:
+           mac_opensession();
+           goto done;
           case iClose:
             mac_closewindow(window);
             goto done;
index 626ca5190c775487a1209445d19dc885157dcc8f..838c8285d9c63b1f80f82cecef3154683096a2ac 100644 (file)
--- a/mac/mac.h
+++ b/mac/mac.h
@@ -6,6 +6,7 @@
 #define PUTTY_MAC_H
 
 #include <MacTypes.h>
+#include <Controls.h>
 #include <Events.h>
 #include <Gestalt.h>
 #include <MacWindows.h>
@@ -25,21 +26,6 @@ extern struct mac_gestalts mac_gestalts;
 
 #define HAVE_COLOR_QD() (mac_gestalts.qdvers > gestaltOriginalQD)
 
-/* from macterm.c */
-extern void mac_newsession(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 maccfg.c */
-extern void mac_loadconfig(Config *);
-/* from macnet.c */
-extern void macnet_eventcheck(void);
-
 typedef struct {
     /* Config that created this session */
     Config cfg;
@@ -69,6 +55,26 @@ typedef struct {
     UnicodeToTextInfo  uni_to_font;
 } Session;
 
+/* from macterm.c */
+extern void mac_newsession(void);
+extern void mac_opensession(void);
+extern void mac_startsession(Session *);
+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 */
+OSErr get_session_dir(Boolean makeit, short *pVRefNum, long *pDirID);
+extern void *open_settings_r_fsp(FSSpec *);
+/* from maccfg.c */
+extern void mac_loadconfig(Config *);
+/* from macnet.c */
+extern void macnet_eventcheck(void);
+
 #endif
 
 /*
index 984df167376646e3ee26b9c599dc16776a661fa8..a8c800ed9a0b27067924e33620a177e49a6e7bd3 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: mac_res.r,v 1.5 2002/12/30 14:17:51 ben Exp $ */
+/* $Id: mac_res.r,v 1.6 2002/12/30 18:21:17 ben Exp $ */
 /*
  * Copyright (c) 1999 Ben Harris
  * All rights reserved.
@@ -360,7 +360,7 @@ resource 'MENU' (mApple, preload) {
     enabled,
     apple,
     {
-       "About PuTTYÉ",         noicon, nokey, nomark, plain,
+       "About PuTTY\0xc9",     noicon, nokey, nomark, plain,
        "-",                    noicon, nokey, nomark, plain,
     }
 };
@@ -368,11 +368,12 @@ resource 'MENU' (mApple, preload) {
 resource 'MENU' (mFile, preload) {
     mFile,
     textMenuProc,
-    0b11111111111111111111111111111011,
+    0b11111111111111111111111111110111,
     enabled,
-    "File",
+    "Session",
     {
-       "New Session",          noicon, "N",   nomark, plain,
+       "New",                  noicon, "N",   nomark, plain,
+       "Open\0xc9",            noicon, "O",   nomark, plain,
        "Close",                noicon, "W",   nomark, plain,
        "-",                    noicon, nokey, nomark, plain,
        "Quit",                 noicon, "Q",   nomark, plain,
index b98346b133fee19c9749963b59954882ac5a3d66..8013901f21b6b92989c23ff07ee7d3b28e33db43 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: macresid.h,v 1.1 2002/11/19 02:13:46 ben Exp $ */
+/* $Id: macresid.h,v 1.2 2002/12/30 18:21:17 ben Exp $ */
 
 /*
  * macresid.h -- Mac resource IDs
@@ -20,8 +20,9 @@
 #define iAbout         1
 /* File menu */
 #define iNew           1
-#define iClose         2
-#define iQuit          4
+#define iOpen          2
+#define iClose         3
+#define iQuit          5
 /* Edit menu */
 #define iUndo          1
 #define iCut           3
index ecd0355bf12db67391b6e322d6a31a40605c4946..fe1232e381e1c12df2c0424dee4e22eab07b1c90 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: macstore.c,v 1.5 2002/12/28 22:44:27 ben Exp $ */
+/* $Id: macstore.c,v 1.6 2002/12/30 18:21:17 ben Exp $ */
 
 /*
  * macstore.c: Macintosh-specific impementation of the interface
 
 #include "putty.h"
 #include "storage.h"
+#include "mac.h"
 
 #define PUTTY_CREATOR  FOUR_CHAR_CODE('pTTY')
 #define SESS_TYPE      FOUR_CHAR_CODE('Sess')
 
 
-OSErr get_session_dir(Boolean makeit, short *pVRefNum, long *pDirID);
 OSErr FSpGetDirID(FSSpec *f, long *idp, Boolean makeit);
 
 /*
@@ -191,21 +191,32 @@ void close_settings_w(void *handle) {
     safefree(handle);
 }
 
-void *open_settings_r(char *sessionname) {
+void *open_settings_r(char *sessionname)
+{
     short sessVRefNum;
     long sessDirID;
     FSSpec sessfile;
     OSErr error;
     Str255 psessionname;
-    int fd;
-    int *handle;
 
     error = get_session_dir(kDontCreateFolder, &sessVRefNum, &sessDirID);
 
     c2pstrcpy(psessionname, sessionname);
     error = FSMakeFSSpec(sessVRefNum, sessDirID, psessionname, &sessfile);
     if (error != noErr) goto out;
-    fd = FSpOpenResFile(&sessfile, fsRdPerm);
+    return open_settings_r_fsp(&sessfile);
+
+  out:
+    return NULL;
+}
+
+void *open_settings_r_fsp(FSSpec *sessfile)
+{
+    OSErr error;
+    int fd;
+    int *handle;
+
+    fd = FSpOpenResFile(sessfile, fsRdPerm);
     if (fd == 0) {error = ResError(); goto out;}
 
     handle = safemalloc(sizeof *handle);
@@ -216,7 +227,6 @@ void *open_settings_r(char *sessionname) {
     return NULL;
 }
 
-
 char *read_setting_s(void *handle, char *key, char *buffer, int buflen) {
     int fd;
     Handle h;
index 19ba7fa5dda7c53233d88d7ef2e6d1b833c4f72a..2e0f25d97e277cf29323cb622bf05ce68ca5ab7d 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: macterm.c,v 1.25 2002/12/28 22:25:31 ben Exp $ */
+/* $Id: macterm.c,v 1.26 2002/12/30 18:21:17 ben Exp $ */
 /*
  * Copyright (c) 1999 Simon Tatham
  * Copyright (c) 1999, 2002 Ben Harris
@@ -46,6 +46,7 @@
 #include <Scrap.h>
 #include <Script.h>
 #include <Sound.h>
+#include <StandardFile.h>
 #include <TextCommon.h>
 #include <Threads.h>
 #include <ToolUtils.h>
@@ -60,6 +61,7 @@
 #include "macresid.h"
 #include "putty.h"
 #include "mac.h"
+#include "storage.h"
 #include "terminal.h"
 
 #define NCOLOURS (lenof(((Config *)0)->colours))
@@ -138,15 +140,45 @@ static void display_resource(Session *s, unsigned long type, short id) {
 
 void mac_newsession(void) {
     Session *s;
-    UInt32 starttime;
-    char msg[128];
 
     /* This should obviously be initialised by other means */
     s = smalloc(sizeof(*s));
     memset(s, 0, sizeof(*s));
     do_defaults(NULL, &s->cfg);
     s->back = &loop_backend;
-       
+    mac_startsession(s);
+}
+
+void mac_opensession(void) {
+    Session *s;
+    StandardFileReply sfr;
+    static const OSType sftypes[] = { 'Sess', 0, 0, 0 };
+    void *sesshandle;
+
+    s = smalloc(sizeof(*s));
+    memset(s, 0, sizeof(*s));
+
+    StandardGetFile(NULL, 1, sftypes, &sfr);
+    if (!sfr.sfGood) goto fail;
+
+    sesshandle = open_settings_r_fsp(&sfr.sfFile);
+    if (sesshandle == NULL) goto fail;
+    load_open_settings(sesshandle, TRUE, &s->cfg);
+    close_settings_r(sesshandle);
+    s->back = &loop_backend;
+    mac_startsession(s);
+    return;
+
+  fail:
+    sfree(s);
+    return;
+}
+
+void mac_startsession(Session *s)
+{
+    UInt32 starttime;
+    char msg[128];
+
     /* XXX: Own storage management? */
     if (HAVE_COLOR_QD())
        s->window = GetNewCWindow(wTerminal, NULL, (WindowPtr)-1);
diff --git a/putty.h b/putty.h
index 0f2911c538fe5ad127d1e6798e236f05fbf121ef..3ff9e9d1a59760f3824c877a5d505cb1e5ff0daf 100644 (file)
--- a/putty.h
+++ b/putty.h
@@ -465,6 +465,7 @@ void random_destroy_seed(void);
  */
 void save_settings(char *section, int do_host, Config * cfg);
 void load_settings(char *section, int do_host, Config * cfg);
+void load_open_settings(void *sesskey, int do_host, Config *cfg);
 void get_sesslist(struct sesslist *, int allocate);
 void do_defaults(char *, Config *);
 void registry_cleanup(void);
index ce21d2c291f8fa72b801d48bf469df4badd2ddca..0c642f50edd892297fbddfecb296904bfa7c5387 100644 (file)
@@ -321,11 +321,17 @@ void save_settings(char *section, int do_host, Config * cfg)
 
 void load_settings(char *section, int do_host, Config * cfg)
 {
-    int i;
-    char prot[10];
     void *sesskey;
 
     sesskey = open_settings_r(section);
+    load_open_settings(sesskey, do_host, cfg);
+    close_settings_r(sesskey);
+}
+
+void load_open_settings(void *sesskey, int do_host, Config *cfg)
+{
+    int i;
+    char prot[10];
 
     cfg->ssh_subsys = 0;              /* FIXME: load this properly */
     cfg->remote_cmd_ptr = cfg->remote_cmd;
@@ -637,8 +643,6 @@ void load_settings(char *section, int do_host, Config * cfg)
     gppi(sesskey, "ScrollbarOnLeft", 0, &cfg->scrollbar_on_left);
     gpps(sesskey, "BoldFont", "", cfg->boldfont, sizeof(cfg->boldfont));
     gppi(sesskey, "ShadowBoldOffset", 1, &cfg->shadowboldoffset);
-
-    close_settings_r(sesskey);
 }
 
 void do_defaults(char *session, Config * cfg)