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