X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/827ef1a8e2497ca1ba13a0b4b3c60ea02b4e4e29..b041ccece3687baa46a947a5695b634ef113edfd:/usr/src/usr.bin/window/cmd1.c diff --git a/usr/src/usr.bin/window/cmd1.c b/usr/src/usr.bin/window/cmd1.c index 4417601b69..0962c4be50 100644 --- a/usr/src/usr.bin/window/cmd1.c +++ b/usr/src/usr.bin/window/cmd1.c @@ -1,111 +1,95 @@ #ifndef lint -static char *sccsid = "@(#)cmd1.c 1.1 83/07/18"; +static char sccsid[] = "@(#)cmd1.c 3.29 %G%"; #endif -#include "defs.h" +/* + * Copyright (c) 1983 Regents of the University of California, + * All rights reserved. Redistribution permitted subject to + * the terms of the Berkeley Software License Agreement. + */ -struct ww *getwin(); -struct ww *openwin(); -char *strtime(); +#include "defs.h" +#include "char.h" -dowindow() +c_window() { int col, row, xcol, xrow; - register struct ww *w; int id; - char ids[10]; - for (id = 1; id < 10; id++) - ids[id] = 0; - for (w = wwhead; w; w = w->ww_next) - ids[w->ww_ident] = 1; - for (id = 1; id < 10 && ids[id]; id++) - ; - if (id == 10) { - wwputs("Too many windows. ", cmdwin); + if ((id = findid()) < 0) return; - } - wwputs("Upper left corner: ", cmdwin); + if (!terse) + wwputs("New window (upper left corner): ", cmdwin); col = 0; row = 1; + wwadd(boxwin, framewin->ww_back); for (;;) { + wwbox(boxwin, row - 1, col - 1, 3, 3); wwsetcursor(row, col); - while (bpeekc() < 0) { - wwflush(); - bread(); - } - switch (getpos(&row, &col, 0, 0)) { - case -1: - WBoxActive = 0; - goto out; - case 1: + while (wwpeekc() < 0) + wwiomux(); + switch (getpos(&row, &col, row > 1, 0, + wwnrow - 1, wwncol - 1)) { + case 3: + wwunbox(boxwin); + wwdelete(boxwin); + return; + case 2: + wwunbox(boxwin); break; + case 1: + wwunbox(boxwin); case 0: continue; } break; } - wwprintf(cmdwin, "%d %d. Upper left corner: ", col, row); - xcol = col + 1; - xrow = row + 1; + if (!terse) + wwputs("\nNew window (lower right corner): ", cmdwin); + xcol = col; + xrow = row; for (;;) { - Wbox(col, row, xcol - col + 1, xrow - row + 1); + wwbox(boxwin, row - 1, col - 1, + xrow - row + 3, xcol - col + 3); wwsetcursor(xrow, xcol); wwflush(); - while (bpeekc() < 0) { - wwflush(); - bread(); - } - switch (getpos(&xrow, &xcol, row + 1, col + 1)) { - case -1: - WBoxActive = 0; - goto out; - case 1: + while (wwpeekc() < 0) + wwiomux(); + switch (getpos(&xrow, &xcol, row, col, wwnrow - 1, wwncol - 1)) + { + case 3: + wwunbox(boxwin); + wwdelete(boxwin); + return; + case 2: + wwunbox(boxwin); break; + case 1: + wwunbox(boxwin); case 0: continue; } break; } - WBoxActive = 0; - wwprintf(cmdwin, "%d %d. ", xcol, xrow); - if ((w = wwopen(WW_PTY, id, xrow-row+1, xcol-col+1, row, col)) == 0) { - wwprintf(cmdwin, "Can't open window. "); - return; - } - wwframe(w); - labelwin(w, 0); - /* - reframe(); - */ - wwsetcursor(WCurRow(w->ww_win), WCurCol(w->ww_win)); - wwflush(); - switch (wwfork(w)) { - case -1: - wwprintf(cmdwin, "Can't fork. "); - wwclose(w); - return; - case 0: - execl("/bin/csh", "csh", 0); - perror("exec(csh)"); - exit(1); - } - if (selwin == 0) - setselwin(w); - else - wwsetcurrent(cmdwin); -out: - wwputs("\r\n", cmdwin); + wwdelete(boxwin); + if (!terse) + wwputc('\n', cmdwin); + wwcurtowin(cmdwin); + (void) openwin(id, row, col, xrow-row+1, xcol-col+1, nbufline, + (char *) 0, 1, 1, shellfile, shell); } -getpos(row, col, minrow, mincol) -register int *row, *col, minrow, mincol; +getpos(row, col, minrow, mincol, maxrow, maxcol) +register int *row, *col; +int minrow, mincol; +int maxrow, maxcol; { - 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': @@ -123,18 +107,18 @@ register int *row, *col, minrow, mincol; *col = mincol; break; case 'l': - if ((*col += count) >= WCols) - *col = WCols - 1; + if ((*col += count) > maxcol) + *col = maxcol; break; case 'L': - *col = WCols - 1; + *col = maxcol; break; case 'j': - if ((*row += count) >= WRows) - *row = WRows - 1; + if ((*row += count) > maxrow) + *row = maxrow; break; case 'J': - *row = WRows - 1; + *row = maxrow; break; case 'k': if ((*row -= count) < minrow) @@ -143,26 +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: - Ding(); + if (!terse) + wwputs("\nType [hjklHJKL] to move, return to enter position, escape to cancel.", cmdwin); + wwbell(); } } - return 0; -} - -/* -reframe() -{ - register struct ww *w; - - for (w = wwhead; w; w = w->ww_next) { - wwunframe(w); - wwframe(w); - labelwin(w, selwin == w ? WINVERSE : 0); - } + return oldrow != *row || oldcol != *col; } -*/