static void tputtab(int);
static void tputc(char *, int);
static void treset(void);
-static int tresize(int, int);
+static void tresize(int, int);
static void tscrollup(int, int);
static void tscrolldown(int, int);
static void tsetattr(int *, int);
void
sigchld(int a) {
- int stat = 0;
+ int stat, ret;
if(waitpid(pid, &stat, 0) < 0)
die("Waiting for pid %hd failed: %s\n", pid, strerror(errno));
- if(WIFEXITED(stat)) {
- exit(WEXITSTATUS(stat));
- } else {
- exit(EXIT_FAILURE);
- }
+ ret = WIFEXITED(stat) ? WEXITSTATUS(stat) : EXIT_FAILURE;
+ if (ret != EXIT_SUCCESS)
+ die("child finished with error '%d'\n", stat);
+ exit(EXIT_SUCCESS);
}
void
void
tclearregion(int x1, int y1, int x2, int y2) {
int x, y, temp;
+ Glyph *gp;
if(x1 > x2)
temp = x1, x1 = x2, x2 = temp;
for(y = y1; y <= y2; y++) {
term.dirty[y] = 1;
for(x = x1; x <= x2; x++) {
+ gp = &term.line[y][x];
if(selected(x, y))
selclear(NULL);
- term.line[y][x] = term.c.attr;
- memcpy(term.line[y][x].c, " ", 2);
+ gp->fg = term.c.attr.fg;
+ gp->bg = term.c.attr.bg;
+ gp->mode = 0;
+ memcpy(gp->c, " ", 2);
}
}
}
for(; len > 0; buf++, len--) {
char c = *buf;
- if(ISCONTROL(c)) { /* control code */
+ if(ISCONTROL((uchar) c)) { /* control code */
if(c & 0x80) {
c &= 0x7f;
tputc("^", 1);
tputc("[", 1);
} else if(c != '\n' && c != '\r' && c != '\t') {
- c ^= '\x40';
+ c ^= 0x40;
tputc("^", 1);
}
tputc(&c, 1);
}
}
-int
+void
tresize(int col, int row) {
int i;
int minrow = MIN(row, term.row);
Line *orig;
TCursor c;
- if(col < 1 || row < 1)
- return 0;
+ if(col < 1 || row < 1) {
+ fprintf(stderr,
+ "tresize: error resizing to %dx%d\n", col, row);
+ return;
+ }
/* free unneeded rows */
i = 0;
/* resize each row to new width, zero-pad if needed */
for(i = 0; i < minrow; i++) {
- term.dirty[i] = 1;
term.line[i] = xrealloc(term.line[i], col * sizeof(Glyph));
term.alt[i] = xrealloc(term.alt[i], col * sizeof(Glyph));
}
/* allocate any new rows */
for(/* i == minrow */; i < row; i++) {
- term.dirty[i] = 1;
term.line[i] = xmalloc(col * sizeof(Glyph));
term.alt[i] = xmalloc(col * sizeof(Glyph));
}
tsetscroll(0, row-1);
/* make use of the LIMIT in tmoveto */
tmoveto(term.c.x, term.c.y);
- /* Clearing both screens */
+ /* Clearing both screens (it makes dirty all lines) */
orig = term.line;
c = term.c;
do {
tcursor(CURSOR_LOAD);
} while(orig != term.line);
term.c = c;
-
- return (slide > 0);
}
void