X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/4cbe417de0d1f5d8bcfebe28ffcf8f31549ad63a..b041ccece3687baa46a947a5695b634ef113edfd:/usr/src/usr.bin/window/cmd1.c?ds=inline diff --git a/usr/src/usr.bin/window/cmd1.c b/usr/src/usr.bin/window/cmd1.c index f508fb21ad..0962c4be50 100644 --- a/usr/src/usr.bin/window/cmd1.c +++ b/usr/src/usr.bin/window/cmd1.c @@ -1,95 +1,95 @@ #ifndef lint -static char *sccsid = "@(#)cmd1.c 3.7 83/08/25"; +static char sccsid[] = "@(#)cmd1.c 3.29 %G%"; #endif +/* + * Copyright (c) 1983 Regents of the University of California, + * All rights reserved. Redistribution permitted subject to + * the terms of the Berkeley Software License Agreement. + */ + #include "defs.h" +#include "char.h" c_window() { int col, row, xcol, xrow; int id; - if ((id = findid()) < 0) { - error("Too many windows."); + if ((id = findid()) < 0) return; - } if (!terse) - (void) wwputs("Upper left corner: ", cmdwin); + wwputs("New window (upper left corner): ", cmdwin); col = 0; row = 1; wwadd(boxwin, framewin->ww_back); for (;;) { - wwunbox(boxwin); wwbox(boxwin, row - 1, col - 1, 3, 3); wwsetcursor(row, col); - while (bpeekc() < 0) - bread(); - switch (getpos(&row, &col, 1, 0)) { - case -1: + while (wwpeekc() < 0) + wwiomux(); + switch (getpos(&row, &col, row > 1, 0, + wwnrow - 1, wwncol - 1)) { + case 3: wwunbox(boxwin); wwdelete(boxwin); - if (!terse) - (void) wwputs("\r\nCancelled. ", cmdwin); return; - case 1: + case 2: + wwunbox(boxwin); break; + case 1: + wwunbox(boxwin); case 0: continue; } break; } if (!terse) - (void) wwputs("\r\nLower right corner: ", cmdwin); + wwputs("\nNew window (lower right corner): ", cmdwin); xcol = col; xrow = row; for (;;) { - wwunbox(boxwin); wwbox(boxwin, row - 1, col - 1, xrow - row + 3, xcol - col + 3); wwsetcursor(xrow, xcol); wwflush(); - while (bpeekc() < 0) - bread(); - switch (getpos(&xrow, &xcol, row, col)) { - case -1: + while (wwpeekc() < 0) + wwiomux(); + switch (getpos(&xrow, &xcol, row, col, wwnrow - 1, wwncol - 1)) + { + case 3: wwunbox(boxwin); wwdelete(boxwin); - if (!terse) - (void) wwputs("\r\nCancelled. ", cmdwin); return; - case 1: + case 2: + wwunbox(boxwin); break; + case 1: + wwunbox(boxwin); case 0: continue; } break; } - wwunbox(boxwin); wwdelete(boxwin); if (!terse) - (void) wwputs("\r\n", cmdwin); + wwputc('\n', cmdwin); wwcurtowin(cmdwin); - if (openwin(id, row, col, xrow-row+1, xcol-col+1, nbufline) == 0) - error("Can't open window."); + (void) openwin(id, row, col, xrow-row+1, xcol-col+1, nbufline, + (char *) 0, 1, 1, shellfile, shell); } -findid() +getpos(row, col, minrow, mincol, maxrow, maxcol) +register int *row, *col; +int minrow, mincol; +int maxrow, maxcol; { - register i; - - for (i = 0; i < NWINDOW && window[i] != 0; i++) - ; - return i < NWINDOW ? i : -1; -} - -getpos(row, col, minrow, mincol) -register int *row, *col, minrow, mincol; -{ - static int scount = 0; + static int scount; int count; char c; + int oldrow = *row, oldcol = *col; - while ((c = bgetc()) >= 0) { + while ((c = wwgetc()) >= 0) { switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': @@ -107,18 +107,18 @@ register int *row, *col, minrow, mincol; *col = mincol; break; case 'l': - if ((*col += count) >= wwncol) - *col = wwncol - 1; + if ((*col += count) > maxcol) + *col = maxcol; break; case 'L': - *col = wwncol - 1; + *col = maxcol; break; case 'j': - if ((*row += count) >= wwnrow) - *row = wwnrow - 1; + if ((*row += count) > maxrow) + *row = maxrow; break; case 'J': - *row = wwnrow - 1; + *row = maxrow; break; case 'k': if ((*row -= count) < minrow) @@ -127,59 +127,17 @@ register int *row, *col, minrow, mincol; case 'K': *row = minrow; break; - case CTRL([): - return -1; + case ctrl([): + if (!terse) + wwputs("\nCanceled. ", cmdwin); + return 3; case '\r': - return 1; + return 2; default: if (!terse) - (void) wwputs("\r\nType [hjklHJKL] to move, return to enter position, escape to cancel.", cmdwin); + wwputs("\nType [hjklHJKL] to move, return to enter position, escape to cancel.", cmdwin); wwbell(); } } - return 0; -} - -struct ww * -openwin(id, row, col, nrow, ncol, nline) -int id, nrow, ncol, row, col; -{ - register struct ww *w; - - if (row <= 0) - return 0; - if (id < 0 && (id = findid()) < 0) - return 0; - if ((w = wwopen(WWO_PTY, nrow, ncol, row, col, nline)) == 0) - return 0; - w->ww_id = id; - window[id] = w; - w->ww_hasframe = 1; - wwcursor(w, 1); - wwadd(w, (selwin ? selwin : wwhead.ww_back)); - setselwin(w); - wwupdate(); - wwflush(); - switch (wwfork(w)) { - case -1: - c_close(w); - return 0; - case 0: - execl(shell, shellname, 0); - perror(shell); - exit(1); - } - return w; -} - -reframe() -{ - register struct ww *w; - - wwunframe(framewin); - for (w = wwhead.ww_back; w != &wwhead; w = w->ww_back) - if (w->ww_hasframe) { - wwframe(w, framewin); - labelwin(w); - } + return oldrow != *row || oldcol != *col; }