Added two simple command-line arguments: -fn (so I can have my Font
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sun, 13 Oct 2002 12:54:17 +0000 (12:54 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sun, 13 Oct 2002 12:54:17 +0000 (12:54 +0000)
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
unix/pty.c

index 374e641..a771543 100644 (file)
@@ -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], ' ');
index 444fb65..5d05e8f 100644 (file)
@@ -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.
         */