From 6169c75836e7b4ceecc608743516a38f019c7175 Mon Sep 17 00:00:00 2001 From: simon Date: Sun, 13 Oct 2002 12:54:17 +0000 Subject: [PATCH] Added two simple command-line arguments: -fn (so I can have my Font Of Choice back :-) and -e to run a command other than $SHELL. git-svn-id: svn://svn.tartarus.org/sgt/putty@2037 cda61777-01e9-0310-a592-d414129be87e --- unix/pterm.c | 25 +++++++++++++++++++++++++ unix/pty.c | 8 ++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/unix/pterm.c b/unix/pterm.c index 374e6413..a7715434 100644 --- a/unix/pterm.c +++ b/unix/pterm.c @@ -1111,11 +1111,36 @@ int main(int argc, char **argv) { GtkWidget *window; extern int pty_master_fd; /* declared in pty.c */ + extern char **pty_argv; /* declared in pty.c */ + int err = 0; gtk_init(&argc, &argv); do_defaults(NULL, &cfg); + while (--argc > 0) { + char *p = *++argv; + if (!strcmp(p, "-fn")) { + if (--argc > 0) { + strncpy(cfg.font, *++argv, sizeof(cfg.font)); + cfg.font[sizeof(cfg.font)-1] = '\0'; + } else + err = 1, fprintf(stderr, "pterm: -fn expects an argument\n"); + } + if (!strcmp(p, "-e")) { + if (--argc > 0) { + int i; + pty_argv = smalloc((argc+1) * sizeof(char *)); + ++argv; + for (i = 0; i < argc; i++) + pty_argv[i] = argv[i]; + pty_argv[argc] = NULL; + break; /* finished command-line processing */ + } else + err = 1, fprintf(stderr, "pterm: -e expects an argument\n"); + } + } + inst->fonts[0] = gdk_font_load(cfg.font); inst->fonts[1] = NULL; /* FIXME: what about bold font? */ inst->font_width = gdk_char_width(inst->fonts[0], ' '); diff --git a/unix/pty.c b/unix/pty.c index 444fb65d..5d05e8f2 100644 --- a/unix/pty.c +++ b/unix/pty.c @@ -20,6 +20,7 @@ #endif int pty_master_fd; +char **pty_argv; static void pty_size(void); @@ -87,11 +88,14 @@ static char *pty_init(char *host, int port, char **realhost, int nodelay) dup2(slavefd, 2); setsid(); setpgrp(); - tcsetpgrp(0, getpgrp()); + tcsetpgrp(slavefd, getpgrp()); /* Close everything _else_, for tidiness. */ for (i = 3; i < 1024; i++) close(i); - execl(getenv("SHELL"), getenv("SHELL"), NULL); + if (pty_argv) + execvp(pty_argv[0], pty_argv); + else + execl(getenv("SHELL"), getenv("SHELL"), NULL); /* * If we're here, exec has gone badly foom. */ -- 2.11.0