Subversion Repositories SvarDOS

Compare Revisions

Ignore whitespace Rev 1314 → Rev 1315

/sved/trunk/sved.c
53,7 → 53,7
char payload[1];
};
 
struct linedb {
struct file {
struct line far *cursor;
unsigned short xoffset;
char lfonly; /* set if line endings are LF (CR/LF otherwise) */
61,7 → 61,7
 
 
/* returns non-zero on error */
static int line_add(struct linedb *db, const char far *line) {
static int line_add(struct file *db, const char far *line) {
unsigned short slen;
struct line far *l;
 
92,7 → 92,7
}
 
 
static void db_rewind(struct linedb *db) {
static void db_rewind(struct file *db) {
if (db->cursor == NULL) return;
while (db->cursor->prev) db->cursor = db->cursor->prev;
}
106,7 → 106,7
}
 
 
static void ui_basic(unsigned char screenw, unsigned char screenh, const char *fname, const struct linedb *db) {
static void ui_basic(unsigned char screenw, unsigned char screenh, const char *fname, const struct file *db) {
unsigned char i;
const char *s = svarlang_strid(0); /* HELP */
unsigned char helpcol = screenw - (strlen(s) + 4);
169,7 → 169,7
}
 
 
static void ui_refresh(const struct linedb *db, unsigned char screenw, unsigned char screenh, unsigned char uidirtyfrom, unsigned char uidirtyto, unsigned char y) {
static void ui_refresh(const struct file *db, unsigned char screenw, unsigned char screenh, unsigned char uidirtyfrom, unsigned char uidirtyto, unsigned char y) {
unsigned char len;
const struct line far *l;
 
206,7 → 206,7
}
 
 
static void check_cursor_not_after_eol(struct linedb *db, unsigned char *cursorpos, unsigned char *uidirtyfrom, unsigned char *uidirtyto) {
static void check_cursor_not_after_eol(struct file *db, unsigned char *cursorpos, unsigned char *uidirtyfrom, unsigned char *uidirtyto) {
if (db->xoffset + *cursorpos <= db->cursor->len) return;
 
if (db->cursor->len < db->xoffset) {
220,7 → 220,7
}
 
 
static void cursor_up(struct linedb *db, unsigned char *cursorposy, unsigned char *uidirtyfrom, unsigned char *uidirtyto) {
static void cursor_up(struct file *db, unsigned char *cursorposy, unsigned char *uidirtyfrom, unsigned char *uidirtyto) {
if (db->cursor->prev != NULL) {
db->cursor = db->cursor->prev;
if (*cursorposy == 0) {
233,7 → 233,7
}
 
 
static void cursor_eol(struct linedb *db, unsigned char *cursorposx, unsigned char screenw, unsigned char *uidirtyfrom, unsigned char *uidirtyto) {
static void cursor_eol(struct file *db, unsigned char *cursorposx, unsigned char screenw, unsigned char *uidirtyfrom, unsigned char *uidirtyto) {
/* adjust xoffset to make sure eol is visible on screen */
if (db->xoffset > db->cursor->len) {
db->xoffset = db->cursor->len - 1;
250,7 → 250,7
}
 
 
static void cursor_down(struct linedb *db, unsigned char *cursorposy, unsigned char screenh, unsigned char *uidirtyfrom, unsigned char *uidirtyto) {
static void cursor_down(struct file *db, unsigned char *cursorposy, unsigned char screenh, unsigned char *uidirtyfrom, unsigned char *uidirtyto) {
if (db->cursor->next != NULL) {
db->cursor = db->cursor->next;
if (*cursorposy < screenh - 2) {
263,7 → 263,7
}
 
 
static void cursor_left(struct linedb *db, unsigned char *cursorposx, unsigned char *cursorposy, unsigned char screenw, unsigned char *uidirtyfrom, unsigned char *uidirtyto) {
static void cursor_left(struct file *db, unsigned char *cursorposx, unsigned char *cursorposy, unsigned char screenw, unsigned char *uidirtyfrom, unsigned char *uidirtyto) {
if (*cursorposx > 0) {
*cursorposx -= 1;
} else if (db->xoffset > 0) {
277,7 → 277,7
}
 
 
static void cursor_home(struct linedb *db, unsigned char *cursorposx, unsigned char *uidirtyfrom, unsigned char *uidirtyto) {
static void cursor_home(struct file *db, unsigned char *cursorposx, unsigned char *uidirtyfrom, unsigned char *uidirtyto) {
*cursorposx = 0;
if (db->xoffset != 0) {
db->xoffset = 0;
287,7 → 287,7
}
 
 
static void cursor_right(struct linedb *db, unsigned char *cursorposx, unsigned char *cursorposy, unsigned char screenw, unsigned char screenh, unsigned char *uidirtyfrom, unsigned char *uidirtyto) {
static void cursor_right(struct file *db, unsigned char *cursorposx, unsigned char *cursorposy, unsigned char screenw, unsigned char screenh, unsigned char *uidirtyfrom, unsigned char *uidirtyto) {
if (db->cursor->len > db->xoffset + *cursorposx) {
if (*cursorposx < screenw - 2) {
*cursorposx += 1;
303,7 → 303,7
}
 
 
static void del(struct linedb *db, unsigned char cursorposx, unsigned char cursorposy, unsigned char *uidirtyfrom, unsigned char *uidirtyto) {
static void del(struct file *db, unsigned char cursorposx, unsigned char cursorposy, unsigned char *uidirtyfrom, unsigned char *uidirtyto) {
if (cursorposx + db->xoffset < db->cursor->len) {
_fmemmove(db->cursor->payload + cursorposx + db->xoffset, db->cursor->payload + cursorposx + db->xoffset + 1, db->cursor->len - cursorposx - db->xoffset);
db->cursor->len -= 1; /* do this AFTER memmove so the copy includes the nul terminator */
329,7 → 329,7
}
 
 
static void bkspc(struct linedb *db, unsigned char *cursorposx, unsigned char *cursorposy, unsigned char screenw, unsigned char *uidirtyfrom, unsigned char *uidirtyto) {
static void bkspc(struct file *db, unsigned char *cursorposx, unsigned char *cursorposy, unsigned char screenw, unsigned char *uidirtyfrom, unsigned char *uidirtyto) {
 
/* backspace is basically "left + del", not applicable only if cursor is on 1st byte of the file */
if ((*cursorposx == 0) && (db->xoffset == 0) && (db->cursor->prev == NULL)) return;
371,7 → 371,7
}
 
 
static int loadfile(struct linedb *db, const char *fname) {
static int loadfile(struct file *db, const char *fname) {
char buff[1024];
unsigned int prevlen = 0, len, llen;
int fd;
418,7 → 418,7
}
 
 
static int savefile(const struct linedb *db, const char *fname) {
static int savefile(const struct file *db, const char *fname) {
int fd;
const struct line far *l;
unsigned bytes;
455,7 → 455,7
 
int main(void) {
const char *fname;
struct linedb db;
struct file db;
unsigned char screenw = 0, screenh = 0;
unsigned char cursorposx = 0, cursorposy = 0;
unsigned char uidirtyfrom = 0, uidirtyto = 0xff; /* make sure to redraw entire UI at first run */