}
/*
+ * Return the top-level GtkWindow associated with a particular
+ * front end instance.
+ */
+void *get_window(void *frontend)
+{
+ Terminal *term = (Terminal *)frontend;
+ struct gui_data *inst = (struct gui_data *)term->frontend;
+ return inst->window;
+}
+
+/*
* Minimise or restore the window in response to a server-side
* request.
*/
exit(1);
}
+void cmdline_error(char *p, ...)
+{
+ va_list ap;
+ fprintf(stderr, "plink: ");
+ va_start(ap, p);
+ vfprintf(stderr, p, ap);
+ va_end(ap);
+ fputc('\n', stderr);
+ exit(1);
+}
+
char *get_x_display(void *frontend)
{
return gdk_get_display();
{
int err = 0;
extern char **pty_argv; /* declared in pty.c */
+ extern int use_pty_argv;
/*
* Macros to make argument handling easier. Note that because
char *val;
while (--argc > 0) {
char *p = *++argv;
+ int ret;
+
+ ret = cmdline_process_param(p, (argc > 1 ? argv[1] : NULL),
+ do_everything ? 1 : -1, cfg);
+
+ if (ret == -2) {
+ cmdline_error("option \"%s\" requires an argument", p);
+ } else if (ret == 2) {
+ --argc, ++argv; /* skip next argument */
+ continue;
+ } else if (ret == 1) {
+ continue;
+ }
+
if (!strcmp(p, "-fn") || !strcmp(p, "-font")) {
EXPECTS_ARG;
SECOND_PASS_ONLY;
cfg->colours[index][2] = col.blue / 256;
}
- } else if (!strcmp(p, "-e")) {
+ } else if (use_pty_argv && !strcmp(p, "-e")) {
/* This option swallows all further arguments. */
if (!do_everything)
break;
help(stdout);
exit(0);
+ } else if(p[0] != '-' && (!do_everything ||
+ process_nonoption_arg(p, cfg))) {
+ /* do nothing */
+
} else {
err = 1;
fprintf(stderr, "pterm: unrecognized option '%s'\n", p);
gdk_input_remove(id);
}
-int main(int argc, char **argv)
+int pt_main(int argc, char **argv)
{
- extern void pty_pre_init(void); /* declared in pty.c */
+ extern Backend *select_backend(Config *cfg);
+ extern int cfgbox(Config *cfg);
struct gui_data *inst;
int font_charset;
* it */
block_signal(SIGCHLD, 1);
- pty_pre_init();
-
gtk_init(&argc, &argv);
/*
if (do_cmdline(argc, argv, 1, &inst->cfg))
exit(1); /* post-defaults, do everything */
+ cmdline_run_saved(&inst->cfg);
+
+ if (!*inst->cfg.host && !cfgbox(&inst->cfg))
+ exit(0); /* config box hit Cancel */
+
inst->fonts[0] = gdk_font_load(inst->cfg.font.name);
if (!inst->fonts[0]) {
fprintf(stderr, "pterm: unable to load font \"%s\"\n",
inst->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- if (inst->cfg.wintitle[0])
- set_title(inst, inst->cfg.wintitle);
- else
- set_title(inst, "pterm");
-
/*
* Set up the colour map.
*/
uxsel_init();
- inst->back = &pty_backend;
- inst->back->init((void *)inst->term, &inst->backhandle, &inst->cfg,
- NULL, 0, NULL, 0);
+ inst->back = select_backend(&inst->cfg);
+ {
+ char *realhost;
+
+ inst->back->init((void *)inst->term, &inst->backhandle, &inst->cfg,
+ inst->cfg.host, inst->cfg.port, &realhost,
+ inst->cfg.tcp_nodelay);
+
+ if (inst->cfg.wintitle[0])
+ set_title(inst, inst->cfg.wintitle);
+ else {
+ char *title = make_default_wintitle(realhost);
+ set_title(inst, title);
+ sfree(title);
+ }
+ }
inst->back->provide_logctx(inst->backhandle, inst->logctx);
term_provide_resize_fn(inst->term, inst->back->size, inst->backhandle);