Support for non-ISO-8859-1 X keysyms. So in particular, pterm in a
[u/mdw/putty] / mac / macstore.c
index 244569e..548b7ac 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: macstore.c,v 1.15 2003/02/01 21:44:05 ben Exp $ */
+/* $Id: macstore.c,v 1.19 2003/04/01 18:10:25 simon Exp $ */
 
 /*
  * macstore.c: Macintosh-specific impementation of the interface
@@ -116,16 +116,20 @@ struct write_settings {
     FSSpec dstfile;
 };
 
-void *open_settings_w(char const *sessionname) {
+void *open_settings_w(char const *sessionname, char **errmsg) {
     short sessVRefNum;
     long sessDirID;
     OSErr error;
     Str255 psessionname;
     FSSpec dstfile;
-    
+
+    *errmsg = NULL;
+
     error = get_session_dir(kCreateFolder, &sessVRefNum, &sessDirID);
     if (error != noErr) return NULL;
 
+    if (!sessionname || !*sessionname)
+       sessionname = "Default Settings";
     c2pstrcpy(psessionname, sessionname);
     error = FSMakeFSSpec(sessVRefNum, sessDirID, psessionname, &dstfile);
     if (error == fnfErr) {
@@ -147,7 +151,7 @@ void *open_settings_w_fsp(FSSpec *dstfile)
     OSErr error;
     Str255 tmpname;
 
-    ws = smalloc(sizeof *ws);
+    ws = snew(struct write_settings);
     ws->dstfile = *dstfile;
 
     /* Create a temporary file to save to first. */
@@ -183,6 +187,7 @@ void write_setting_s(void *handle, char const *key, char const *value) {
     Handle h;
     int id;
     OSErr error;
+    Str255 pkey;
 
     UseResFile(fd);
     if (ResError() != noErr)
@@ -195,7 +200,8 @@ void write_setting_s(void *handle, char const *key, char const *value) {
     id = Unique1ID(FOUR_CHAR_CODE('TEXT'));
     if (ResError() != noErr)
        fatalbox("Failed to get ID for resource %s (%d)", key, ResError());
-    addresource(h, FOUR_CHAR_CODE('TEXT'), id, key);
+    c2pstrcpy(pkey, key);
+    AddResource(h, FOUR_CHAR_CODE('TEXT'), id, pkey);
     if (ResError() != noErr)
        fatalbox("Failed to add resource %s (%d)", key, ResError());
 }
@@ -205,6 +211,7 @@ void write_setting_i(void *handle, char const *key, int value) {
     Handle h;
     int id;
     OSErr error;
+    Str255 pkey;
 
     UseResFile(fd);
     if (ResError() != noErr)
@@ -219,7 +226,8 @@ void write_setting_i(void *handle, char const *key, int value) {
     id = Unique1ID(FOUR_CHAR_CODE('Int '));
     if (ResError() != noErr)
        fatalbox("Failed to get ID for resource %s (%d)", key, ResError());
-    addresource(h, FOUR_CHAR_CODE('Int '), id, key);
+    c2pstrcpy(pkey, key);
+    AddResource(h, FOUR_CHAR_CODE('Int '), id, pkey);
     if (ResError() != noErr)
        fatalbox("Failed to add resource %s (%d)", key, ResError());
 }
@@ -252,6 +260,8 @@ void *open_settings_r(char const *sessionname)
 
     error = get_session_dir(kDontCreateFolder, &sessVRefNum, &sessDirID);
 
+    if (!sessionname || !*sessionname)
+       sessionname = "Default Settings";
     c2pstrcpy(psessionname, sessionname);
     error = FSMakeFSSpec(sessVRefNum, sessDirID, psessionname, &sessfile);
     if (error != noErr) goto out;
@@ -270,7 +280,7 @@ void *open_settings_r_fsp(FSSpec *sessfile)
     fd = FSpOpenResFile(sessfile, fsRdPerm);
     if (fd == 0) {error = ResError(); goto out;}
 
-    handle = safemalloc(sizeof *handle);
+    handle = snew(int);
     *handle = fd;
     return handle;
 
@@ -282,12 +292,14 @@ char *read_setting_s(void *handle, char const *key, char *buffer, int buflen) {
     int fd;
     Handle h;
     size_t len;
+    Str255 pkey;
 
     if (handle == NULL) goto out;
     fd = *(int *)handle;
     UseResFile(fd);
     if (ResError() != noErr) goto out;
-    h = get1namedresource(FOUR_CHAR_CODE('TEXT'), key);
+    c2pstrcpy(pkey, key);
+    h = Get1NamedResource(FOUR_CHAR_CODE('TEXT'), pkey);
     if (h == NULL) goto out;
 
     len = GetHandleSize(h);
@@ -307,12 +319,14 @@ int read_setting_i(void *handle, char const *key, int defvalue) {
     int fd;
     Handle h;
     int value;
+    Str255 pkey;
 
     if (handle == NULL) goto out;
     fd = *(int *)handle;
     UseResFile(fd);
     if (ResError() != noErr) goto out;
-    h = get1namedresource(FOUR_CHAR_CODE('Int '), key);
+    c2pstrcpy(pkey, key);
+    h = Get1NamedResource(FOUR_CHAR_CODE('Int '), pkey);
     if (h == NULL) goto out;
     value = *(int *)*h;
     ReleaseResource(h);
@@ -358,18 +372,20 @@ void write_setting_fontspec(void *handle, const char *name, FontSpec font)
     sfree(settingname);
 }
 
-int read_setting_filename(void *handle, const char *name, Filename *result)
+int read_setting_filename(void *handle, const char *key, Filename *result)
 {
     int fd;
     AliasHandle h;
     Boolean changed;
     OSErr err;
+    Str255 pkey;
 
     if (handle == NULL) goto out;
     fd = *(int *)handle;
     UseResFile(fd);
     if (ResError() != noErr) goto out;
-    h = (AliasHandle)get1namedresource(rAliasType, name);
+    c2pstrcpy(pkey, key);
+    h = (AliasHandle)Get1NamedResource(rAliasType, pkey);
     if (h == NULL) goto out;
     if ((*h)->userType == 'pTTY' && (*h)->aliasSize == sizeof(**h))
        memset(result, 0, sizeof(*result));
@@ -397,12 +413,13 @@ int read_setting_filename(void *handle, const char *name, Filename *result)
     return 0;
 }
 
-void write_setting_filename(void *handle, const char *name, Filename fn)
+void write_setting_filename(void *handle, const char *key, Filename fn)
 {
     int fd = *(int *)handle;
     AliasHandle h;
     int id;
     OSErr error;
+    Str255 pkey;
 
     UseResFile(fd);
     if (ResError() != noErr)
@@ -442,10 +459,11 @@ void write_setting_filename(void *handle, const char *name, Filename fn)
     /* Put the data in a resource. */
     id = Unique1ID(rAliasType);
     if (ResError() != noErr)
-       fatalbox("Failed to get ID for resource %s (%d)", name, ResError());
-    addresource((Handle)h, rAliasType, id, name);
+       fatalbox("Failed to get ID for resource %s (%d)", key, ResError());
+    c2pstrcpy(pkey, key);
+    AddResource((Handle)h, rAliasType, id, pkey);
     if (ResError() != noErr)
-       fatalbox("Failed to add resource %s (%d)", name, ResError());
+       fatalbox("Failed to add resource %s (%d)", key, ResError());
 }
 
 void close_settings_r(void *handle) {
@@ -456,7 +474,7 @@ void close_settings_r(void *handle) {
     CloseResFile(fd);
     if (ResError() != noErr)
        fatalbox("Close of saved session failed (%d)", ResError());
-    safefree(handle);
+    sfree(handle);
 }
 
 void del_settings(char const *sessionname) {