mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-03-12 18:13:50 -05:00

In commit 1f399bec58 I had the idea of generating the protocol radio buttons in the GUI configurer by looping over the backends[] array, which gets the reliably correct list of available backends for a given binary rather than having to second-guess. That's given me an idea: we can do the same for the per-backend config panels too. Now the GUI config panel for every backend is guarded by a check of backend_vt_from_proto, and we won't display the config for that backend unless it's present. In particular, this allows me to move the serial-port configuration back into config.c from the separate file sercfg.c: we find out whether to apply it by querying backend_vt_from_proto(PROT_SERIAL), the same as any other backend. In _particular_ particular, that also makes it much easier for me to move the serial config up the pecking order, so that it's now second only to SSH in the list of per-protocol config panes, which I think is now where it deserves to be. (A side effect of that is that I now have to come up with a different method of having each serial backend specify the subset of parity and flow control schemes it supports. I've done it by adding an extra pair of serial-port specific bitmask fields to BackendVtable, taking advantage of the new vtable definition idiom to avoid having to boringly declare them as zero in all the other backends.)
71 lines
2.3 KiB
C
71 lines
2.3 KiB
C
/*
|
|
* uxcfg.c - the Unix-specific parts of the PuTTY configuration
|
|
* box.
|
|
*/
|
|
|
|
#include <assert.h>
|
|
#include <stdlib.h>
|
|
|
|
#include "putty.h"
|
|
#include "dialog.h"
|
|
#include "storage.h"
|
|
|
|
void unix_setup_config_box(struct controlbox *b, bool midsession, int protocol)
|
|
{
|
|
struct controlset *s;
|
|
union control *c;
|
|
|
|
/*
|
|
* The Conf structure contains two Unix-specific elements which
|
|
* are not configured in here: stamp_utmp and login_shell. This
|
|
* is because pterm does not put up a configuration box right at
|
|
* the start, which is the only time when these elements would
|
|
* be useful to configure.
|
|
*/
|
|
|
|
/*
|
|
* On Unix, we don't have a drop-down list for the printer
|
|
* control.
|
|
*/
|
|
s = ctrl_getset(b, "Terminal", "printing", "Remote-controlled printing");
|
|
assert(s->ncontrols == 1 && s->ctrls[0]->generic.type == CTRL_EDITBOX);
|
|
s->ctrls[0]->editbox.has_list = false;
|
|
|
|
/*
|
|
* Unix supports a local-command proxy. This also means we must
|
|
* adjust the text on the `Telnet command' control.
|
|
*/
|
|
if (!midsession) {
|
|
int i;
|
|
s = ctrl_getset(b, "Connection/Proxy", "basics", NULL);
|
|
for (i = 0; i < s->ncontrols; i++) {
|
|
c = s->ctrls[i];
|
|
if (c->generic.type == CTRL_RADIO &&
|
|
c->generic.context.i == CONF_proxy_type) {
|
|
assert(c->generic.handler == conf_radiobutton_handler);
|
|
c->radio.nbuttons++;
|
|
c->radio.buttons =
|
|
sresize(c->radio.buttons, c->radio.nbuttons, char *);
|
|
c->radio.buttons[c->radio.nbuttons-1] =
|
|
dupstr("Local");
|
|
c->radio.buttondata =
|
|
sresize(c->radio.buttondata, c->radio.nbuttons, intorptr);
|
|
c->radio.buttondata[c->radio.nbuttons-1] = I(PROXY_CMD);
|
|
break;
|
|
}
|
|
}
|
|
|
|
for (i = 0; i < s->ncontrols; i++) {
|
|
c = s->ctrls[i];
|
|
if (c->generic.type == CTRL_EDITBOX &&
|
|
c->generic.context.i == CONF_proxy_telnet_command) {
|
|
assert(c->generic.handler == conf_editbox_handler);
|
|
sfree(c->generic.label);
|
|
c->generic.label = dupstr("Telnet command, or local"
|
|
" proxy command");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|