]> asedeno.scripts.mit.edu Git - PuTTY.git/blob - maccfg.c
Removing one bug, and hunting another
[PuTTY.git] / maccfg.c
1 /* $Id: maccfg.c,v 1.1.2.6 1999/07/24 15:51:12 ben Exp $ */
2 /*
3  * maccfg.c -- Mac port configuration
4  */
5
6 #include <MacMemory.h>
7 #include <Palettes.h>
8 #include <Resources.h>
9 #include <TextUtils.h>
10
11 #include <assert.h>
12 #include <string.h>
13
14 #include "putty.h"
15 #include "mac.h"
16 #include "macresid.h"
17
18 struct strloc {
19     short id, idx;
20 };
21
22 static void get_string(struct strloc *l, char *d, size_t maxlen) {
23     Str255 s;
24     int i, len;
25
26     GetIndString(s, l->id, l->idx);
27     len = s[0];
28     /* maxlen includes a terminator */
29     if (len > maxlen - 1)
30         len = maxlen - 1;
31     for (i = 0; i < len; i++)
32         d[i] = s[i + 1];
33     d[i] = '\0';
34 }
35
36 static void get_wordness(short id, short *dst) {
37     Handle h;
38
39     h = GetResource(PREF_wordness_type, id);
40     if (h == NULL || *h == NULL)
41         fatalbox ("Couldn't get wordness id %d (%d)", id, ResError());
42     memcpy(dst, *h, 256 * sizeof(short));
43 }
44
45 #pragma options align=mac68k
46 struct pSET {
47     unsigned long basic_flags;
48 #define CLOSE_ON_EXIT   0x80000000
49     unsigned long ssh_flags;
50 #define NO_PTY          0x80000000
51     unsigned long telnet_flags;
52 #define RFC_ENVIRON     0x80000000
53     unsigned long kbd_flags;
54 #define BKSP_IS_DELETE  0x80000000
55 #define RXVT_HOMEEND    0x40000000
56 #define LINUX_FUNKEYS   0x20000000
57 #define APP_CURSOR      0x10000000
58 #define APP_KEYPAD      0x08000000
59     unsigned long term_flags;
60 #define DEC_OM          0x80000000
61 #define WRAP_MODE       0x40000000
62 #define LFHASCR         0x20000000
63 #define WIN_NAME_ALWAYS 0x10000000
64     unsigned long colour_flags;
65 #define BOLD_COLOUR     0x80000000
66     unsigned long selection_flags;
67 #define IMPLICIT_COPY   0x80000000
68     struct strloc host;
69     long port;
70     long protocol;
71     struct strloc termtype, termspeed;
72     struct strloc environmt;
73     struct strloc username;
74     long width, height, savelines;
75     struct strloc font;
76     long font_height;
77     short colours_id;
78     short wordness_id;
79     unsigned short meta_modifiers;
80 };
81 #pragma options align=reset
82
83 /*
84  * Load a configuration from the current chain of resource files.
85  */
86 void mac_loadconfig(Config *cfg) {
87     Handle h;
88     struct pSET *s;
89
90     h = GetResource('pSET', PREF_settings);
91     if (h == NULL || *h == NULL)
92         fatalbox("Can't load settings");
93     HLock(h);
94     if (GetHandleSize(h) != sizeof(struct pSET))
95         fatalbox("Settings resource is wrong size (%d vs %d)",
96                  GetHandleSize(h), sizeof(struct pSET));
97     s = (struct pSET *)*h;
98     /* Basic */
99     get_string(&s->host, cfg->host, sizeof(cfg->host));
100     cfg->port = s->port;
101     cfg->protocol = s->protocol;
102     cfg->close_on_exit = (s->basic_flags & CLOSE_ON_EXIT) != 0;
103     /* SSH */
104     cfg->nopty = (s->ssh_flags & NO_PTY) != 0;
105     /* Telnet */
106     get_string(&s->termtype, cfg->termtype, sizeof(cfg->termtype));
107     get_string(&s->termspeed, cfg->termspeed, sizeof(cfg->termspeed));
108     get_string(&s->environmt, cfg->environmt, sizeof(cfg->environmt));
109     get_string(&s->username, cfg->username, sizeof(cfg->username));
110     cfg->rfc_environ = (s->telnet_flags & RFC_ENVIRON) != 0;
111     /* Keyboard */
112     cfg->bksp_is_delete = (s->kbd_flags & BKSP_IS_DELETE) != 0;
113     cfg->rxvt_homeend = (s->kbd_flags & RXVT_HOMEEND) != 0;
114     cfg->linux_funkeys = (s->kbd_flags & LINUX_FUNKEYS) != 0;
115     cfg->app_cursor = (s->kbd_flags & APP_CURSOR) != 0;
116     cfg->app_keypad = (s->kbd_flags & APP_KEYPAD) != 0;
117     cfg->meta_modifiers = s->meta_modifiers;
118     /* Terminal */
119     cfg->savelines = s->savelines;
120     cfg->dec_om = (s->term_flags & DEC_OM) != 0;
121     cfg->wrap_mode = (s->term_flags & WRAP_MODE) != 0;
122     cfg->lfhascr = (s->term_flags & LFHASCR) != 0;
123     cfg->win_name_always = (s->term_flags & WIN_NAME_ALWAYS) != 0;
124     cfg->width = s->width;
125     cfg->height = s->height;
126     get_string(&s->font, cfg->font, sizeof(cfg->font));
127     cfg->fontisbold = FALSE;            /* XXX */
128     cfg->fontheight = s->font_height;
129     cfg->vtmode = VT_POORMAN;           /* XXX */
130     /* Colour */
131     cfg->try_palette = FALSE;           /* XXX */
132     cfg->bold_colour = (s->colour_flags & BOLD_COLOUR) != 0;
133     if (HAVE_COLOR_QD()) {
134         cfg->colours = GetNewPalette(s->colours_id);
135         if (cfg->colours == NULL)
136             fatalbox("Failed to get default palette");
137     }
138     /* Selection */
139     cfg->implicit_copy = (s->selection_flags & IMPLICIT_COPY) != 0;
140     get_wordness(s->wordness_id, cfg->wordness);
141     HUnlock(h);
142     ReleaseResource(h);
143 }
144
145 /*
146  * Emacs magic:
147  * Local Variables:
148  * c-file-style: "simon"
149  * End:
150  */