aboutsummaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
authorgotmor <gotmor@f2baff5b-bf2c-0410-a398-912abdc3d8b2>2007-06-10 17:27:42 +0000
committergotmor <gotmor@f2baff5b-bf2c-0410-a398-912abdc3d8b2>2007-06-10 17:27:42 +0000
commit8c0d0ee9ed9f4b7814df1b8168be4b8c6e3d5ccb (patch)
tree9aa115d3950842ea65ca4e38f70bdfe99a948758 /main.c
parentf56eb1958726097b75ea13370188a9d8d2031591 (diff)
downloaddzen-8c0d0ee9ed9f4b7814df1b8168be4b8c6e3d5ccb.tar.gz
dzen-8c0d0ee9ed9f4b7814df1b8168be4b8c6e3d5ccb.zip
improved buffer handling:
malloc buffer buffer size is multiplier of dzen.slave_win.max_lines git-svn-id: http://dzen.googlecode.com/svn/trunk@77 f2baff5b-bf2c-0410-a398-912abdc3d8b2
Diffstat (limited to 'main.c')
-rw-r--r--main.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/main.c b/main.c
index 75780e3..2a1af5d 100644
--- a/main.c
+++ b/main.c
@@ -113,15 +113,19 @@ chomp(char *inbuf, char *outbuf, int start, int len) {
void
free_buffer(void) {
int i;
- for(i=0; i<BUF_SIZE; i++)
+ for(i=0; i<dzen.slave_win.tsize; i++) {
free(dzen.slave_win.tbuf[i]);
- dzen.slave_win.tcnt = 0;
- last_cnt = 0;
+ dzen.slave_win.tbuf[i] = NULL;
+ }
+ dzen.slave_win.tcnt =
+ dzen.slave_win.last_line_vis =
+ last_cnt = 0;
}
static int
read_stdin(void *ptr) {
- char buf[1024], retbuf[2048];
+ char buf[MAX_LINE_LEN],
+ retbuf[MAX_LINE_LEN];
ssize_t n, n_off=0;
if(!(n = read(STDIN_FILENO, buf, sizeof buf))) {
@@ -139,7 +143,7 @@ read_stdin(void *ptr) {
drawheader(retbuf);
else if(!dzen.slave_win.ishmenu
&& !dzen.tsupdate
- && !dzen.cur_line || !dzen.slave_win.max_lines)
+ && ((dzen.cur_line == 0) || !dzen.slave_win.max_lines))
drawheader(retbuf);
else
drawbody(retbuf);
@@ -553,6 +557,19 @@ set_alignment(void) {
}
}
+static void
+init_input_buffer() {
+
+ if(MIN_BUF_SIZE % dzen.slave_win.max_lines)
+ dzen.slave_win.tsize = MIN_BUF_SIZE + (dzen.slave_win.max_lines - (MIN_BUF_SIZE % dzen.slave_win.max_lines));
+ else
+ dzen.slave_win.tsize = MIN_BUF_SIZE;
+
+ printf("Buffer: %d\n", dzen.slave_win.tsize);
+ fflush(stdout);
+ dzen.slave_win.tbuf = emalloc(dzen.slave_win.tsize);
+}
+
int
main(int argc, char *argv[]) {
int i;
@@ -578,7 +595,10 @@ main(int argc, char *argv[]) {
/* cmdline args */
for(i = 1; i < argc; i++)
if(!strncmp(argv[i], "-l", 3)){
- if(++i < argc) dzen.slave_win.max_lines = atoi(argv[i]);
+ if(++i < argc) {
+ dzen.slave_win.max_lines = atoi(argv[i]);
+ init_input_buffer();
+ }
}
else if(!strncmp(argv[i], "-u", 3)){
dzen.tsupdate = True;