| #ifndef LINE_H_ |
| #define LINE_H_ |
| |
| /* |
| * All text is kept in circularly linked lists of "struct line" structures. These |
| * begin at the header line (which is the blank line beyond the end of the |
| * buffer). This line is pointed to by the "struct buffer". Each line contains a the |
| * number of bytes in the line (the "used" size), the size of the text array, |
| * and the text. The end of line is not stored as a byte; it's implied. Future |
| * additions will include update hints, and a list of marks into the line. |
| */ |
| struct line { |
| struct line *l_fp; /* Link to the next line */ |
| struct line *l_bp; /* Link to the previous line */ |
| short l_size; /* Allocated size */ |
| short l_used; /* Used size */ |
| char l_text[1]; /* A bunch of characters. */ |
| }; |
| |
| #define lforw(lp) ((lp)->l_fp) |
| #define lback(lp) ((lp)->l_bp) |
| #define lgetc(lp, n) ((lp)->l_text[(n)]&0xFF) |
| #define lputc(lp, n, c) ((lp)->l_text[(n)]=(c)) |
| #define llength(lp) ((lp)->l_used) |
| |
| extern void lfree(struct line *lp); |
| extern void lchange(int flag); |
| extern int insspace(int f, int n); |
| extern int linstr(char *instr); |
| extern int linsert(int n, int c); |
| extern int lowrite(int c); |
| extern int lover(char *ostr); |
| extern int lnewline(void); |
| extern int ldelete(long n, int kflag); |
| extern char *getctext(void); |
| extern int putctext(char *iline); |
| extern int ldelnewline(void); |
| extern void kdelete(void); |
| extern int kinsert(int c); |
| extern int yank(int f, int n); |
| extern struct line *lalloc(int); /* Allocate a line. */ |
| |
| #endif /* LINE_H_ */ |