From fe5634f616c5bf0afdf883045dc309e82c6ac41c Mon Sep 17 00:00:00 2001 From: ben Date: Sat, 23 Nov 2002 20:02:38 +0000 Subject: [PATCH] Add a Config * argument to ldisc_create(), and use it in place of the global cfg throughout ldisc.c. Not tested other than on Mac, but all other ports just pass &cfg as this argument for now. git-svn-id: svn://svn.tartarus.org/sgt/putty@2250 cda61777-01e9-0310-a592-d414129be87e --- ldisc.c | 31 ++++++++++++++++--------------- ldisc.h | 1 + mac/macterm.c | 4 ++-- putty.h | 2 +- unix/pterm.c | 3 ++- unix/uxplink.c | 2 +- window.c | 2 +- 7 files changed, 24 insertions(+), 21 deletions(-) diff --git a/ldisc.c b/ldisc.c index 16c1f9b2..c77b5c8f 100644 --- a/ldisc.c +++ b/ldisc.c @@ -12,12 +12,12 @@ #include "terminal.h" #include "ldisc.h" -#define ECHOING (cfg.localecho == LD_YES || \ - (cfg.localecho == LD_BACKEND && \ +#define ECHOING (ldisc->cfg->localecho == LD_YES || \ + (ldisc->cfg->localecho == LD_BACKEND && \ (ldisc->back->ldisc(ldisc->backhandle, LD_ECHO) || \ term_ldisc(ldisc->term, LD_ECHO)))) -#define EDITING (cfg.localedit == LD_YES || \ - (cfg.localedit == LD_BACKEND && \ +#define EDITING (ldisc->cfg->localedit == LD_YES || \ + (ldisc->cfg->localedit == LD_BACKEND && \ (ldisc->back->ldisc(ldisc->backhandle, LD_EDIT) || \ term_ldisc(ldisc->term, LD_EDIT)))) @@ -39,7 +39,7 @@ static int plen(Ldisc ldisc, unsigned char c) static void pwrite(Ldisc ldisc, unsigned char c) { if ((c >= 32 && c <= 126) || (c >= 160 && !in_utf(ldisc->term))) { - c_write(ldisc, &c, 1); + c_write(ldisc, (char *)&c, 1); } else if (c < 128) { char cc[2]; cc[1] = (c == 127 ? '?' : c + 0x40); @@ -61,7 +61,7 @@ static void bsb(Ldisc ldisc, int n) #define CTRL(x) (x^'@') #define KCTRL(x) ((x^'@') | 0x100) -void *ldisc_create(Terminal *term, +void *ldisc_create(Config *mycfg, Terminal *term, Backend *back, void *backhandle, void *frontend) { @@ -72,6 +72,7 @@ void *ldisc_create(Terminal *term, ldisc->bufsiz = 0; ldisc->quotenext = 0; + ldisc->cfg = mycfg; ldisc->back = back; ldisc->backhandle = backhandle; ldisc->term = term; @@ -170,7 +171,7 @@ void ldisc_send(void *handle, char *buf, int len, int interactive) * configured telnet specials off! This breaks * talkers otherwise. */ - if (!cfg.telnet_keyboard) + if (!ldisc->cfg->telnet_keyboard) goto default_case; if (c == CTRL('C')) ldisc->back->special(ldisc->backhandle, TS_IP); @@ -222,7 +223,7 @@ void ldisc_send(void *handle, char *buf, int len, int interactive) * default clause because of the break. */ case CTRL('J'): - if (cfg.protocol == PROT_RAW && + if (ldisc->cfg->protocol == PROT_RAW && ldisc->buflen > 0 && ldisc->buf[ldisc->buflen - 1] == '\r') { if (ECHOING) bsb(ldisc, plen(ldisc, ldisc->buf[ldisc->buflen - 1])); @@ -231,9 +232,9 @@ void ldisc_send(void *handle, char *buf, int len, int interactive) case KCTRL('M'): /* send with newline */ if (ldisc->buflen > 0) ldisc->back->send(ldisc->backhandle, ldisc->buf, ldisc->buflen); - if (cfg.protocol == PROT_RAW) + if (ldisc->cfg->protocol == PROT_RAW) ldisc->back->send(ldisc->backhandle, "\r\n", 2); - else if (cfg.protocol == PROT_TELNET && cfg.telnet_newline) + else if (ldisc->cfg->protocol == PROT_TELNET && ldisc->cfg->telnet_newline) ldisc->back->special(ldisc->backhandle, TS_EOL); else ldisc->back->send(ldisc->backhandle, "\r", 1); @@ -267,27 +268,27 @@ void ldisc_send(void *handle, char *buf, int len, int interactive) if (len > 0) { if (ECHOING) c_write(ldisc, buf, len); - if (keyflag && cfg.protocol == PROT_TELNET && len == 1) { + if (keyflag && ldisc->cfg->protocol == PROT_TELNET && len == 1) { switch (buf[0]) { case CTRL('M'): - if (cfg.protocol == PROT_TELNET && cfg.telnet_newline) + if (ldisc->cfg->protocol == PROT_TELNET && ldisc->cfg->telnet_newline) ldisc->back->special(ldisc->backhandle, TS_EOL); else ldisc->back->send(ldisc->backhandle, "\r", 1); break; case CTRL('?'): case CTRL('H'): - if (cfg.telnet_keyboard) { + if (ldisc->cfg->telnet_keyboard) { ldisc->back->special(ldisc->backhandle, TS_EC); break; } case CTRL('C'): - if (cfg.telnet_keyboard) { + if (ldisc->cfg->telnet_keyboard) { ldisc->back->special(ldisc->backhandle, TS_IP); break; } case CTRL('Z'): - if (cfg.telnet_keyboard) { + if (ldisc->cfg->telnet_keyboard) { ldisc->back->special(ldisc->backhandle, TS_SUSP); break; } diff --git a/ldisc.h b/ldisc.h index aa904ed6..2bca86d9 100644 --- a/ldisc.h +++ b/ldisc.h @@ -11,6 +11,7 @@ typedef struct ldisc_tag { Terminal *term; Backend *back; + Config *cfg; void *backhandle; void *frontend; diff --git a/mac/macterm.c b/mac/macterm.c index e2e33dec..1bc43241 100644 --- a/mac/macterm.c +++ b/mac/macterm.c @@ -1,4 +1,4 @@ -/* $Id: macterm.c,v 1.8 2002/11/23 19:01:01 ben Exp $ */ +/* $Id: macterm.c,v 1.9 2002/11/23 20:02:38 ben Exp $ */ /* * Copyright (c) 1999 Simon Tatham * Copyright (c) 1999, 2002 Ben Harris @@ -165,7 +165,7 @@ void mac_newsession(void) { mac_adjustsize(s, s->cfg.height, s->cfg.width); term_size(s->term, s->cfg.height, s->cfg.width, s->cfg.savelines); - s->ldisc = ldisc_create(s->term, s->back, s->backhandle, s); + s->ldisc = ldisc_create(&s->cfg, s->term, s->back, s->backhandle, s); ldisc_send(s->ldisc, NULL, 0, 0);/* cause ldisc to notice changes */ mac_initfont(s); diff --git a/putty.h b/putty.h index 55237b33..f322bacc 100644 --- a/putty.h +++ b/putty.h @@ -544,7 +544,7 @@ extern Backend ssh_backend; /* * Exports from ldisc.c. */ -void *ldisc_create(Terminal *, Backend *, void *, void *); +void *ldisc_create(Config *, Terminal *, Backend *, void *, void *); void ldisc_send(void *handle, char *buf, int len, int interactive); /* diff --git a/unix/pterm.c b/unix/pterm.c index 8b28a23e..22b9c2cd 100644 --- a/unix/pterm.c +++ b/unix/pterm.c @@ -2113,7 +2113,8 @@ int main(int argc, char **argv) term_size(inst->term, cfg.height, cfg.width, cfg.savelines); - inst->ldisc = ldisc_create(inst->term, inst->back, inst->backhandle, inst); + inst->ldisc = + ldisc_create(&cfg, inst->term, inst->back, inst->backhandle, inst); ldisc_send(inst->ldisc, NULL, 0, 0);/* cause ldisc to notice changes */ inst->master_fd = pty_master_fd; diff --git a/unix/uxplink.c b/unix/uxplink.c index 2e5017ae..99ace88a 100644 --- a/unix/uxplink.c +++ b/unix/uxplink.c @@ -475,7 +475,7 @@ int main(int argc, char **argv) return 1; } back->provide_logctx(backhandle, logctx); - ldisc = ldisc_create(NULL, back, backhandle, NULL); + ldisc = ldisc_create(&cfg, NULL, back, backhandle, NULL); sfree(realhost); } connopen = 1; diff --git a/window.c b/window.c index 4bfec693..fd219117 100644 --- a/window.c +++ b/window.c @@ -644,7 +644,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) /* * Set up a line discipline. */ - ldisc = ldisc_create(term, back, backhandle, NULL); + ldisc = ldisc_create(&cfg, term, back, backhandle, NULL); session_closed = FALSE; -- 2.11.0