Implemented the buffer for windows resizing
This commit is contained in:
@@ -23,6 +23,15 @@ buffer_create() {
|
||||
return new_buff;
|
||||
}
|
||||
|
||||
int buffer_size(ProfBuff* buffer) {
|
||||
if(buffer->wrap == 1) {
|
||||
return BUFF_SIZE;
|
||||
}
|
||||
else {
|
||||
return buffer->current;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
buffer_free(ProfBuff* buffer) {
|
||||
int i = 0;
|
||||
@@ -33,29 +42,32 @@ buffer_free(ProfBuff* buffer) {
|
||||
for(i = 0; i < imax; i++) {
|
||||
free(buffer->entry[i].message);
|
||||
free(buffer->entry[i].from);
|
||||
free(buffer->entry[i].date_fmt);
|
||||
}
|
||||
free(buffer);
|
||||
}
|
||||
|
||||
void
|
||||
buffer_push(ProfBuff* buffer, const char show_char, GTimeVal *tstamp, int flags, int attrs, const char * const from, const char * const message) {
|
||||
buffer_push(ProfBuff* buffer, const char show_char, const char * const date_fmt, int flags, int attrs, const char * const from, const char * const message) {
|
||||
int *current = &(buffer->current);
|
||||
ProfBuffEntry e = buffer->entry[*current];
|
||||
ProfBuffEntry* e = &(buffer->entry[buffer->current]);
|
||||
|
||||
if(buffer->wrap == 1) {
|
||||
free(e.message);
|
||||
free(e.from);
|
||||
free(e->message);
|
||||
free(e->from);
|
||||
}
|
||||
e.show_char = show_char;
|
||||
e.tstamp = *tstamp;
|
||||
e.flags = flags;
|
||||
e.attrs = attrs;
|
||||
e->show_char = show_char;
|
||||
e->flags = flags;
|
||||
e->attrs = attrs;
|
||||
|
||||
e.from = malloc(strlen(from)+1);
|
||||
strcpy(e.from, from);
|
||||
e->date_fmt = malloc(strlen(date_fmt)+1);
|
||||
strcpy(e->date_fmt, date_fmt);
|
||||
|
||||
e.message = malloc(strlen(message)+1);
|
||||
strcpy(e.message, message);
|
||||
e->from = malloc(strlen(from)+1);
|
||||
strcpy(e->from, from);
|
||||
|
||||
e->message = malloc(strlen(message)+1);
|
||||
strcpy(e->message, message);
|
||||
|
||||
*current += 1;
|
||||
if(*current >= BUFF_SIZE) {
|
||||
@@ -64,11 +76,22 @@ buffer_push(ProfBuff* buffer, const char show_char, GTimeVal *tstamp, int flags,
|
||||
}
|
||||
}
|
||||
|
||||
ProfBuffEntry
|
||||
buffer_yield_entry(ProfBuff* buffer, int entry) {
|
||||
return (buffer->entry)[entry];
|
||||
if(buffer->wrap == 1) {
|
||||
return buffer->entry[(buffer->current + entry) % BUFF_SIZE];
|
||||
}
|
||||
else {
|
||||
return buffer->entry[entry % (buffer->current)];
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
buffer_yield(ProfBuff* buffer, int line, ProfBuffEntry** list) {
|
||||
//Returns the (line+1)-th last line
|
||||
//Returns the size of the (line+1)-th last line, and list contains the line
|
||||
//e.g. if line == 0, returns the last line
|
||||
//To correct for splitted lines...
|
||||
//bug if the wrap happens in the middle of a line
|
||||
int current = buffer->current;
|
||||
int imax = current;
|
||||
if(buffer->wrap == 1) {
|
||||
|
||||
Reference in New Issue
Block a user