#include "page.h" void init_page(PAGE *p, char *filename, int size) { p->text = (LINE *)malloc(size * sizeof(LINE)); int i; for(i = 0; i < size; i++) { init_line(p->text + i); } strcpy(p->filename, filename); p->numlines = 0; p->size = size; p->x = 0; p->y = 0; p->saved = 1; } // 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(WINDOW *win, WINDOW *lnos, const PAGE *p, int start) { int i, line; for(i = start, line = 0; i < p->numlines && line < EDITOR_SIZE; i++) { for (int j=0;j < p->text[i].lines_in_screen; j++) { wmove(lnos, line, 0); wclrtoeol(lnos); if (j == 0) { wprintw(lnos, "%5d", i + 1); } wmove(win, line++, 0); wprintw(win, "%.*s", strlen(&p->text[i].line[j * 75]) < 75 ? strlen(&p->text[i].line[j * 75]) : 75, &p->text[i].line[j * 75]); wclrtoeol(win); } } for (int j=line; j < EDITOR_SIZE; j++) { wmove(lnos, j, 0); wclrtoeol(lnos); wmove(win, j, 0); wclrtoeol(win); } wrefresh(lnos); //refresh(); } // print_page