91 lines
1.6 KiB
C
91 lines
1.6 KiB
C
#include "page.h"
|
|
|
|
void init_page(PAGE *p, int size)
|
|
{
|
|
p->text = (LINE *)malloc(size * sizeof(LINE));
|
|
|
|
int i;
|
|
for(i = 0; i < size; i++)
|
|
{
|
|
init_line(p->text + i);
|
|
}
|
|
p->numlines = 0;
|
|
p->size = size;
|
|
} // init_page
|
|
|
|
void dest_page(PAGE *p)
|
|
{
|
|
int i;
|
|
for(i = 0; i < p->numlines; i++)
|
|
{
|
|
free(p->text[i].line); // maybe replace with dest_line()
|
|
}
|
|
free(p->text);
|
|
} // dest_page
|
|
|
|
|
|
|
|
// WARNING: Expansion function implemented but not tested
|
|
void insert_line(PAGE *p, int index)
|
|
{
|
|
if( p->numlines >= p->size ) expand_page(p);
|
|
|
|
LINE newline;
|
|
init_line(&newline);
|
|
newline.line[0] = '\0';
|
|
|
|
int i;
|
|
|
|
for(i = p->numlines - 1; i >= index; i--)
|
|
p->text[i + 1] = p->text[i];
|
|
|
|
p->text[index] = newline;
|
|
(p->numlines)++;
|
|
} // insert_line
|
|
|
|
|
|
|
|
void remove_line(PAGE *p, int index)
|
|
{
|
|
if( p->numlines > 1 )
|
|
{
|
|
free(p->text[index].line);
|
|
|
|
int i;
|
|
for(i = index; i < p->numlines - 1; i++)
|
|
{
|
|
p->text[i] = p->text[i + 1];
|
|
}
|
|
(p->numlines)--;
|
|
}
|
|
} // remove_line
|
|
|
|
void expand_page(PAGE *p)
|
|
{
|
|
int newsize = p->size * 2;
|
|
LINE *newline = malloc(newsize * sizeof(LINE));
|
|
|
|
int i;
|
|
for(i = 0; i < p->size; i++) // copy old lines
|
|
newline[i] = p->text[i];
|
|
for(i = p->size; i < newsize; i++) // init new lines
|
|
init_line(newline + i);
|
|
|
|
p->text = newline;
|
|
p->size = newsize;
|
|
} // expand_page
|
|
|
|
// NOTE: This moves the cursor to the end of the displayed text
|
|
void print_page(const PAGE *p, int start, int end)
|
|
{
|
|
int i, line;
|
|
for(i = start, line = 0; i < p->numlines && i < end; i++, line++)
|
|
{
|
|
move(line, 0);
|
|
clrtoeol();
|
|
printw(" %s", p->text[i].line);
|
|
}
|
|
refresh();
|
|
} // print_page
|
|
|