int cstart(BW *bw, unsigned char *name, unsigned char **s, void *obj, int *notify, int build, int out_only) { #ifdef __MSDOS__ if (notify) { *notify = 1; } varm(s); msgnw(bw->parent, joe_gettext(_("Sorry, no sub-processes in DOS (yet)"))); return -1; #else MPX *m; if (notify) { *notify = 1; } if (bw->b->pid) { msgnw(bw->parent, joe_gettext(_("Program already running in this window"))); varm(s); return -1; } /* p_goto_eof(bw->cursor); */ if (!(m = mpxmk(&bw->b->out, name, s, cdata, bw->b, build ? cdone_parse : cdone, bw->b, out_only))) { varm(s); msgnw(bw->parent, joe_gettext(_("No ptys available"))); return -1; } else { bw->b->pid = m->pid; } return 0; #endif }
int cstart(BW *bw, unsigned char *name, unsigned char **s, void *obj, int *notify, int build, int out_only, unsigned char *first_command, int vt) { #ifdef __MSDOS__ if (notify) { *notify = 1; } varm(s); msgnw(bw->parent, joe_gettext(_("Sorry, no sub-processes in DOS (yet)"))); return -1; #else MPX *m; int shell_w = -1, shell_h = -1; if (notify) { *notify = 1; } if (bw->b->pid) { if (!vt) { /* Don't complain if shell already running.. makes F-key switching nicer */ /* Keep old behavior for dumb terminal */ msgnw(bw->parent, joe_gettext(_("Program already running in this window"))); } varm(s); return -1; } if (vt) { BW *master = vtmaster(bw->parent->t, bw->b); /* In case of multiple BWs on one B, pick one to be the master */ if (!master) master = bw; /* Should never happen */ shell_w = master->w; shell_h = master->h; bw->b->vt = mkvt(bw->b, master->top, master->h, master->w); bw->b->o.ansi = 1; bw->b->o.syntax = load_syntax(USTR "ansi"); /* Turn on shell mode for each window */ ansiall(bw->b); } /* p_goto_eof(bw->cursor); */ if (!(m = mpxmk(&bw->b->out, name, s, cdata, bw->b, build ? cdone_parse : cdone, bw->b, out_only, shell_w, shell_h))) { varm(s); msgnw(bw->parent, joe_gettext(_("No ptys available"))); return -1; } else { bw->b->pid = m->pid; if (first_command) if (-1 == write(bw->b->out, first_command, zlen(first_command))) msgnw(bw->parent, joe_gettext(_("Write failed when writing first command to shell"))); } return 0; #endif }