static int read_stdin(void) { char buf[MAX_LINE_LEN], retbuf[MAX_LINE_LEN]; ssize_t n, n_off=0; if(!(n = read(STDIN_FILENO, buf, sizeof buf))) { if(!dzen.ispersistent) { dzen.running = False; return -1; } else return -2; } else { while((n_off = chomp(buf, retbuf, n_off, n))) { if(!dzen.slave_win.ishmenu && dzen.tsupdate && dzen.slave_win.max_lines && ((dzen.cur_line == 0) || !(dzen.cur_line % (dzen.slave_win.max_lines+1)))) drawheader(retbuf); else if(!dzen.slave_win.ishmenu && !dzen.tsupdate && ((dzen.cur_line == 0) || !dzen.slave_win.max_lines)) drawheader(retbuf); else drawbody(retbuf); dzen.cur_line++; } } return 0; }
//TODO (PM) The check for `ispersistent' is outside the logical scope of this // function static int read_stdin(void) { char buf[MAX_LINE_LEN], retbuf[MAX_LINE_LEN]; ssize_t n, n_off=0; n = read(STDIN_FILENO, buf, sizeof buf); if(n == 0) { // If 0 bits are read if(!dzen.ispersistent) { // And dzen is not persistent dzen.running = False; // Stop running //TODO (PM) The value of `running' will never be checked since the // event loop returns if this function returns -1 return -1; } else return -2; // Is persistent } else if (n > 0) { while((n_off = chomp(buf, retbuf, n_off, n))) { if(!dzen.slave_win.ishmenu && dzen.tsupdate && dzen.slave_win.max_lines && ((dzen.cur_line == 0) || !(dzen.cur_line % (dzen.slave_win.max_lines+1)))) drawheader(retbuf); else if(!dzen.slave_win.ishmenu && !dzen.tsupdate && ((dzen.cur_line == 0) || !dzen.slave_win.max_lines)) drawheader(retbuf); else drawbody(retbuf); dzen.cur_line++; } } else { perror("read"); //TODO (PM) Consolidate error handling exit(EXIT_FAILURE); } return 0; }
void drawbody(char * text) { char *ec; int i, write_buffer=1; if(dzen.slave_win.tcnt == -1) { dzen.slave_win.tcnt = 0; drawheader(text); return; } if((ec = strstr(text, "^tw()")) && (*(ec-1) != '^')) { drawheader(ec+5); return; } if(dzen.slave_win.tcnt == dzen.slave_win.tsize) free_buffer(); write_buffer = parse_non_drawing_commands(text); if(text[0] == '^' && text[1] == 'c' && text[2] == 's') { free_buffer(); for(i=0; i < dzen.slave_win.max_lines; i++) XFillRectangle(dzen.dpy, dzen.slave_win.drawable[i], dzen.rgc, 0, 0, dzen.slave_win.width, dzen.line_height); x_draw_body(); return; } if( write_buffer && (dzen.slave_win.tcnt < dzen.slave_win.tsize) ) { dzen.slave_win.tbuf[dzen.slave_win.tcnt] = estrdup(text); dzen.slave_win.tcnt++; } }
static void x_redraw(Window w) { int i; if(!dzen.slave_win.ishmenu && w == dzen.title_win.win) drawheader(NULL); if(!dzen.tsupdate && w == dzen.slave_win.win) { for(i=0; i < dzen.slave_win.max_lines; i++) XCopyArea(dzen.dpy, dzen.slave_win.drawable[i], dzen.slave_win.line[i], dzen.gc, 0, 0, dzen.slave_win.width, dzen.line_height, 0, 0); } else { for(i=0; i < dzen.slave_win.max_lines; i++) if(w == dzen.slave_win.line[i]) { XCopyArea(dzen.dpy, dzen.slave_win.drawable[i], dzen.slave_win.line[i], dzen.gc, 0, 0, dzen.slave_win.width, dzen.line_height, 0, 0); } } }