|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)cmd1.c 3.29 4/24/85"; ! 3: #endif ! 4: ! 5: /* ! 6: * Copyright (c) 1983 Regents of the University of California, ! 7: * All rights reserved. Redistribution permitted subject to ! 8: * the terms of the Berkeley Software License Agreement. ! 9: */ ! 10: ! 11: #include "defs.h" ! 12: #include "char.h" ! 13: ! 14: c_window() ! 15: { ! 16: int col, row, xcol, xrow; ! 17: int id; ! 18: ! 19: if ((id = findid()) < 0) ! 20: return; ! 21: if (!terse) ! 22: wwputs("New window (upper left corner): ", cmdwin); ! 23: col = 0; ! 24: row = 1; ! 25: wwadd(boxwin, framewin->ww_back); ! 26: for (;;) { ! 27: wwbox(boxwin, row - 1, col - 1, 3, 3); ! 28: wwsetcursor(row, col); ! 29: while (wwpeekc() < 0) ! 30: wwiomux(); ! 31: switch (getpos(&row, &col, row > 1, 0, ! 32: wwnrow - 1, wwncol - 1)) { ! 33: case 3: ! 34: wwunbox(boxwin); ! 35: wwdelete(boxwin); ! 36: return; ! 37: case 2: ! 38: wwunbox(boxwin); ! 39: break; ! 40: case 1: ! 41: wwunbox(boxwin); ! 42: case 0: ! 43: continue; ! 44: } ! 45: break; ! 46: } ! 47: if (!terse) ! 48: wwputs("\nNew window (lower right corner): ", cmdwin); ! 49: xcol = col; ! 50: xrow = row; ! 51: for (;;) { ! 52: wwbox(boxwin, row - 1, col - 1, ! 53: xrow - row + 3, xcol - col + 3); ! 54: wwsetcursor(xrow, xcol); ! 55: wwflush(); ! 56: while (wwpeekc() < 0) ! 57: wwiomux(); ! 58: switch (getpos(&xrow, &xcol, row, col, wwnrow - 1, wwncol - 1)) ! 59: { ! 60: case 3: ! 61: wwunbox(boxwin); ! 62: wwdelete(boxwin); ! 63: return; ! 64: case 2: ! 65: wwunbox(boxwin); ! 66: break; ! 67: case 1: ! 68: wwunbox(boxwin); ! 69: case 0: ! 70: continue; ! 71: } ! 72: break; ! 73: } ! 74: wwdelete(boxwin); ! 75: if (!terse) ! 76: wwputc('\n', cmdwin); ! 77: wwcurtowin(cmdwin); ! 78: (void) openwin(id, row, col, xrow-row+1, xcol-col+1, nbufline, ! 79: (char *) 0, 1, 1, shellfile, shell); ! 80: } ! 81: ! 82: getpos(row, col, minrow, mincol, maxrow, maxcol) ! 83: register int *row, *col; ! 84: int minrow, mincol; ! 85: int maxrow, maxcol; ! 86: { ! 87: static int scount; ! 88: int count; ! 89: char c; ! 90: int oldrow = *row, oldcol = *col; ! 91: ! 92: while ((c = wwgetc()) >= 0) { ! 93: switch (c) { ! 94: case '0': case '1': case '2': case '3': case '4': ! 95: case '5': case '6': case '7': case '8': case '9': ! 96: scount = scount * 10 + c - '0'; ! 97: continue; ! 98: } ! 99: count = scount ? scount : 1; ! 100: scount = 0; ! 101: switch (c) { ! 102: case 'h': ! 103: if ((*col -= count) < mincol) ! 104: *col = mincol; ! 105: break; ! 106: case 'H': ! 107: *col = mincol; ! 108: break; ! 109: case 'l': ! 110: if ((*col += count) > maxcol) ! 111: *col = maxcol; ! 112: break; ! 113: case 'L': ! 114: *col = maxcol; ! 115: break; ! 116: case 'j': ! 117: if ((*row += count) > maxrow) ! 118: *row = maxrow; ! 119: break; ! 120: case 'J': ! 121: *row = maxrow; ! 122: break; ! 123: case 'k': ! 124: if ((*row -= count) < minrow) ! 125: *row = minrow; ! 126: break; ! 127: case 'K': ! 128: *row = minrow; ! 129: break; ! 130: case ctrl([): ! 131: if (!terse) ! 132: wwputs("\nCanceled. ", cmdwin); ! 133: return 3; ! 134: case '\r': ! 135: return 2; ! 136: default: ! 137: if (!terse) ! 138: wwputs("\nType [hjklHJKL] to move, return to enter position, escape to cancel.", cmdwin); ! 139: wwbell(); ! 140: } ! 141: } ! 142: return oldrow != *row || oldcol != *col; ! 143: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.