Lines Matching +full:no +full:- +full:wp
1 /*-
54 * ex_script -- : sc[ript][!] [file]
70 if (cmdp->argc != 0 && ex_edit(sp, cmdp)) in ex_script()
81 * sscr_init --
95 sp->script = sc; in sscr_init()
96 sc->sh_prompt = NULL; in sscr_init()
97 sc->sh_prompt_len = 0; in sscr_init()
103 sc->sh_master = sc->sh_slave = -1; in sscr_init()
105 if (tcgetattr(STDIN_FILENO, &sc->sh_term) == -1) { in sscr_init()
113 sc->sh_term.c_oflag &= ~OPOST; in sscr_init()
114 sc->sh_term.c_cflag &= ~(ECHO|ECHOE|ECHONL|ECHOK); in sscr_init()
116 if (ioctl(STDIN_FILENO, TIOCGWINSZ, &sc->sh_win) == -1) { in sscr_init()
121 if (openpty(&sc->sh_master, in sscr_init()
122 &sc->sh_slave, sc->sh_name, &sc->sh_term, &sc->sh_win) == -1) { in sscr_init()
132 switch (sc->sh_pid = fork()) { in sscr_init()
133 case -1: /* Error. */ in sscr_init()
135 err: if (sc->sh_master != -1) in sscr_init()
136 (void)close(sc->sh_master); in sscr_init()
137 if (sc->sh_slave != -1) in sscr_init()
138 (void)close(sc->sh_slave); in sscr_init()
157 (void)ioctl(sc->sh_slave, TIOCSCTTY, 0); in sscr_init()
159 (void)close(sc->sh_master); in sscr_init()
160 (void)dup2(sc->sh_slave, STDIN_FILENO); in sscr_init()
161 (void)dup2(sc->sh_slave, STDOUT_FILENO); in sscr_init()
162 (void)dup2(sc->sh_slave, STDERR_FILENO); in sscr_init()
163 (void)close(sc->sh_slave); in sscr_init()
165 /* Assumes that all shells have -i. */ in sscr_init()
171 execl(sh_path, sh, "-i", NULL); in sscr_init()
182 F_SET(sp->gp, G_SCRWIN); in sscr_init()
187 * sscr_getprompt --
188 * Eat lines printed by the shell until a line with no trailing
202 CHAR_T *wp; in sscr_getprompt() local
214 sc = sp->script; in sscr_getprompt()
215 FD_SET(sc->sh_master, &fdset); in sscr_getprompt()
216 switch (select(sc->sh_master + 1, &fdset, NULL, NULL, &tv)) { in sscr_getprompt()
217 case -1: /* Error or interrupt. */ in sscr_getprompt()
228 more: len = sizeof(buf) - (endp - buf); in sscr_getprompt()
229 switch (nr = read(sc->sh_master, endp, len)) { in sscr_getprompt()
233 case -1: /* Error or interrupt. */ in sscr_getprompt()
244 if (CHAR2INT5(sp, exp->ibcw, t, p - t, wp, wlen)) in sscr_getprompt()
247 db_append(sp, 0, lline, wp, wlen)) in sscr_getprompt()
253 memmove(buf, t, endp - t); in sscr_getprompt()
254 endp = buf + (endp - t); in sscr_getprompt()
262 switch (select(sc->sh_master + 1, &fdset, NULL, NULL, &tv)) { in sscr_getprompt()
263 case -1: /* Error or interrupt. */ in sscr_getprompt()
273 llen = endp - buf; in sscr_getprompt()
277 if (CHAR2INT5(sp, exp->ibcw, buf, llen, wp, wlen)) in sscr_getprompt()
279 if (db_last(sp, &lline) || db_append(sp, 0, lline, wp, wlen)) { in sscr_getprompt()
290 * sscr_exec --
303 CHAR_T *wp; in sscr_exec() local
309 if (db_get(sp, last_lno, DBG_FATAL, &wp, &wlen)) in sscr_exec()
311 INT2CHAR(sp, wp, wlen, p, last_len); in sscr_exec()
320 if (db_eget(sp, lno, &wp, &wlen, &isempty)) { in sscr_exec()
329 INT2CHAR(sp, wp, wlen, p, len); in sscr_exec()
334 empty: msgq(sp, M_BERR, "151|No command to execute"); in sscr_exec()
337 p += (len - tlen); in sscr_exec()
342 sc = sp->script; in sscr_exec()
343 if ((nw = write(sc->sh_master, p, len)) != len) in sscr_exec()
346 if (write(sc->sh_master, "\n", 1) != 1) { in sscr_exec()
356 CHAR2INT(sp, bp, last_len + len, wp, wlen); in sscr_exec()
357 if (db_set(sp, last_lno, wp, wlen)) in sscr_exec()
366 * sscr_input --
379 gp = sp->gp; in sscr_input()
387 TAILQ_FOREACH(sp, gp->dq, q) in sscr_input()
389 FD_SET(sp->script->sh_master, &rdfd); in sscr_input()
390 if (sp->script->sh_master > maxfd) in sscr_input()
391 maxfd = sp->script->sh_master; in sscr_input()
396 case -1: in sscr_input()
406 TAILQ_FOREACH(sp, gp->dq, q) in sscr_input()
408 FD_ISSET(sp->script->sh_master, &rdfd) && in sscr_input()
415 * sscr_insert --
430 CHAR_T *wp; in sscr_insert() local
446 sc = sp->script; in sscr_insert()
447 more: switch (nr = read(sc->sh_master, endp, MINREAD)) { in sscr_insert()
452 case -1: /* Error or interrupt. */ in sscr_insert()
463 len = p - t; in sscr_insert()
464 if (CHAR2INT5(sp, exp->ibcw, t, len, wp, wlen)) in sscr_insert()
466 if (db_append(sp, 1, lno++, wp, wlen)) in sscr_insert()
472 len = p - t; in sscr_insert()
484 FD_SET(sc->sh_master, &rdfd); in sscr_insert()
485 if (select(sc->sh_master + 1, in sscr_insert()
494 if (CHAR2INT5(sp, exp->ibcw, t, len, wp, wlen)) in sscr_insert()
496 if (db_append(sp, 1, lno++, wp, wlen)) in sscr_insert()
501 sp->lno = lno; in sscr_insert()
502 sp->cno = wlen ? wlen - 1 : 0; in sscr_insert()
513 * sscr_setprompt --
523 sc = sp->script; in sscr_setprompt()
524 free(sc->sh_prompt); in sscr_setprompt()
525 MALLOC(sp, sc->sh_prompt, len + 1); in sscr_setprompt()
526 if (sc->sh_prompt == NULL) { in sscr_setprompt()
530 memmove(sc->sh_prompt, buf, len); in sscr_setprompt()
531 sc->sh_prompt_len = len; in sscr_setprompt()
532 sc->sh_prompt[len] = '\0'; in sscr_setprompt()
537 * sscr_matchprompt --
548 sc = sp->script; in sscr_matchprompt()
549 if (line_len < (prompt_len = sc->sh_prompt_len)) in sscr_matchprompt()
552 for (pp = sc->sh_prompt; in sscr_matchprompt()
553 prompt_len && line_len; --prompt_len, --line_len) { in sscr_matchprompt()
555 for (; prompt_len && *pp == '\0'; --prompt_len, ++pp); in sscr_matchprompt()
558 for (; line_len && *lp != *pp; --line_len, ++lp); in sscr_matchprompt()
574 * sscr_end --
584 if ((sc = sp->script) == NULL) in sscr_end()
592 if (sc->sh_master != -1) in sscr_end()
593 (void)close(sc->sh_master); in sscr_end()
594 if (sc->sh_slave != -1) in sscr_end()
595 (void)close(sc->sh_slave); in sscr_end()
598 (void)proc_wait(sp, (long)sc->sh_pid, "script-shell", 0, 0); in sscr_end()
601 free(sc->sh_prompt); in sscr_end()
603 sp->script = NULL; in sscr_end()
609 * sscr_check --
617 gp = sp->gp; in sscr_check()
618 TAILQ_FOREACH(sp, gp->dq, q) in sscr_check()