57,8 → 57,8 |
}; |
|
|
|
void line_add(struct linedb *db, const char *line) { |
/* returns non-zero on error */ |
int line_add(struct linedb *db, const char *line) { |
unsigned short slen = strlen(line); |
struct line *l; |
|
70,6 → 70,8 |
} |
|
l = calloc(1, sizeof(struct line) + slen + 1); |
if (l == NULL) return(-1); |
|
l->prev = db->cursor; |
if (db->cursor) { |
l->next = db->cursor->next; |
79,6 → 81,8 |
db->cursor = l; |
memmove(l->payload, line, slen); |
l->len = slen; |
|
return(0); |
} |
|
|
227,8 → 231,6 |
unsigned char count = 0; |
char *argv[4]; |
|
mdr_coutraw_puts(tail); |
|
while (count < 4) { |
/* jump to nearest arg */ |
while (*tail == ' ') { |
254,41 → 256,24 |
} |
|
|
int main(void) { |
static int loadfile(struct linedb *db, const char *fname) { |
char buff[1024]; |
unsigned int prevlen = 0, len, llen; |
int fd; |
const char *fname; |
char buff[1024]; |
struct linedb 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 */ |
int r = 0; |
|
bzero(&db, sizeof(db)); |
|
svarlang_autoload_nlspath("sved"); |
|
fname = parseargv(); |
|
if (fname == NULL) { |
mdr_coutraw_puts("usage: sved file.txt"); |
return(0); |
} |
|
mdr_coutraw_puts(""); |
|
if (_dos_open(fname, O_RDONLY, &fd) != 0) { |
mdr_coutraw_puts("Failed to open file:"); |
mdr_coutraw_puts(fname); |
return(1); |
return(-1); |
} |
|
/* load file */ |
{ |
unsigned int prevlen = 0, len, llen; |
|
do { |
if (_dos_read(fd, buff + prevlen, sizeof(buff) - prevlen, &len) != 0) break; |
if (_dos_read(fd, buff + prevlen, sizeof(buff) - prevlen, &len) == 0) { |
len += prevlen; |
} else { |
len = prevlen; |
} |
|
/* look for nearest \n and replace with 0*/ |
for (llen = 0; buff[llen] != '\n'; llen++) { |
296,7 → 281,11 |
} |
buff[llen] = 0; |
if ((llen > 0) && (buff[llen - 1])) buff[llen - 1] = 0; /* trim \r if line ending is cr/lf */ |
line_add(&db, buff); |
if (line_add(db, buff) != 0) { |
mdr_coutraw_puts("out of memory"); |
r = -1; |
break; |
} |
|
len -= llen + 1; |
memmove(buff, buff + llen + 1, len); |
303,13 → 292,36 |
prevlen = len; |
} while (len > 0); |
|
_dos_close(fd); |
|
return(r); |
} |
|
|
int main(void) { |
const char *fname; |
struct linedb 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 */ |
|
bzero(&db, sizeof(db)); |
|
svarlang_autoload_nlspath("sved"); |
|
fname = parseargv(); |
|
if (fname == NULL) { |
mdr_coutraw_puts("usage: sved file.txt"); |
return(0); |
} |
|
/* load file */ |
if (loadfile(&db, fname) != 0) return(1); |
|
/* add an empty line at end if not present already */ |
if (db.cursor->len != 0) line_add(&db, ""); |
|
_dos_close(fd); |
|
if (mdr_cout_init(&screenw, &screenh)) load_colorscheme(); |
ui_basic(screenw, screenh, fname); |
|