commit a05b03e150a70a77670adb5e8720e6b5518d66fb Author: Michael Stapelberg Date: Fri Feb 6 04:44:56 2009 +0100 Initial commit diff --git a/main.c b/main.c new file mode 100644 index 00000000..db0b54e9 --- /dev/null +++ b/main.c @@ -0,0 +1,161 @@ +#include +#include +#include + +enum { move, snap, select }; + +struct foo { + int width; + int height; + int x; + int y; +}; + + +int main() { + int c; + int mode; + struct termios tbuf, obuf; + if (tcgetattr(STDIN_FILENO, &obuf) < 0 || + tcgetattr(STDIN_FILENO, &tbuf) < 0) + perror("tcgetattr()"); + tbuf.c_lflag &= ~ICANON; + tbuf.c_cc[VMIN] = 1; + tbuf.c_cc[VTIME] = 0; + tcsetattr(STDIN_FILENO, TCSANOW, &tbuf); + + int table[10][10]; + int colspan[10]; + int rowspan[10]; + int current_row = 0; + int current_col = 0; + int current = -1; + int created_terms = 0; + + for (c = 0; c < 10; c++) { + int i; + for (i = 0; i < 10; i++) + table[c][i] = -1; + colspan[c] = 1; + rowspan[c] = 1; + } + + mode = select; + while (printf("%s> ", (mode == move ? "move" : (mode == select ? "select" : "snap"))), c = getchar()) { + + printf("char %c, %d\n", c, c); + if (c == 'm') + mode = move; + else if (c == 's') + mode = snap; + else if (c == 'u') { + /* insert new 'terminal' below current one */ + int i; + printf("current row = %d\n", current_row); + printf("current col = %d\n", current_col); + for (i = current_row; i < 10; i++) { + if (table[current_col][i] == -1) { + printf("found empty entry at %d\n", i); + created_terms++; + table[current_col][i] = created_terms; + current_row = i; + printf("created terminal %d\n", created_terms); + printf("current_row = %d\n", current_row); + break; + } + } + } + else if (c == 'n') { + if (mode == move) { + printf("move window left\n"); + table[current_col-1][current_row] = table[current_col][current_row]; + table[current_col][current_row] = -1; + + } else if (mode == snap) { + printf("snap window left\n"); + } else if (mode == select) { + printf("go to left window\n"); + if (current_col > 0) + current_col--; + printf("col now: %d\n", current_col); + } + mode = select; + + } + else if (c == 'r') { + if (mode == move) { + printf("move window down\n"); + table[current_col][current_row+1] = table[current_col][current_row]; + table[current_col][current_row] = -1; + + } else if (mode == snap) { + printf("snap window down\n"); + } else if (mode == select) { + printf("go to window below\n"); + if (current_row < 9) + current_row++; + printf("row now: %d\n", current_row); + } + mode = select; + + } + else if (c == 't') { + if (mode == move) { + printf("move window up\n"); + table[current_col][current_row-1] = table[current_col][current_row]; + table[current_col][current_row] = -1; + } else if (mode == snap) { + printf("snap window up\n"); + } else if (mode == select) { + printf("go to upper window\n"); + if (current_row > 0) + current_row--; + printf("row now: %d\n", current_row); + } + mode = select; + + } + else if (c == 'd') { + if (mode == move) { + printf("move window right\n"); + table[current_col+1][current_row] = table[current_col][current_row]; + table[current_col][current_row] = -1; + current_col++; + } else if (mode == snap) { + printf("snap window right\n"); + colspan[table[current_col][current_row]]++; + printf("colspan now is: %d\n", colspan[table[current_col][current_row]]++); + + } else if (mode == select) { + printf("go to right window\n"); + if (current_col < 9) + current_col++; + printf("col now: %d\n", current_col); + } + mode = select; + + } + + int rows, cols; + printf("your windows are as following:\n"); + system("/tmp/killgeom.sh"); + for (rows = 0; rows < 10; rows++) + for (cols = 0; cols < 10; cols++) { + if (table[cols][rows] != -1) { + printf("client %d, x = %d, y = %d, width = %d, height = %d", + table[cols][rows], cols * 60, rows * 60, 15 * 1, 15 * 1); + if (cols == current_col && rows == current_row) + printf(" < ===== YOU ARE HERE\n"); + else printf("\n"); + char *buffer; + asprintf(&buffer, "/bin/sh -c \"urxvt -geometry %dx%d+%d+%d %s&\"", + 15 * colspan[table[cols][rows]], 15, cols * 200, rows * 200, (cols == current_col && rows == current_row ? "-bg white" : "-bg gray")); + printf("executing %s\n", buffer); + + system(buffer); + free(buffer); + } + } + printf("that's all\n"); + } +}