/*
-This file is part of the visor text editor and text editor framework
+visor - lightweight system-independent text editor and framework
Copyright (C) 2019 John Tsiombikas <nuclear@member.fsf.org>
This program is free software: you can redistribute it and/or modify
typedef long vi_addr;
typedef long vi_motion;
+typedef void vi_file;
struct visor;
struct vi_buffer;
struct vi_span {
- vi_addr beg, end;
+ vi_addr beg;
+ unsigned long size;
};
enum vi_motdir {
#define VI_MOTION(d, n) (((long)(n) << 8) | ((long)(d)))
+struct vi_alloc {
+ void *(*malloc)(unsigned long);
+ void (*free)(void*);
+ void *(*realloc)(void*, unsigned long); /* can be null, will use malloc/free */
+};
struct vi_fileops {
- void *(*open)(const char *path);
- long (*size)(void *file);
- void (*close)(void *file);
- void *(*map)(void *file);
- void (*unmap)(void *file);
- long (*read)(void *file, void *buf, long count);
- long (*write)(void *file, void *buf, long count);
+ vi_file *(*open)(const char *path);
+ long (*size)(vi_file *file);
+ void (*close)(vi_file *file);
+ void *(*map)(vi_file *file);
+ void (*unmap)(vi_file *file);
+ long (*read)(vi_file *file, void *buf, long count);
+ long (*write)(vi_file *file, void *buf, long count);
+ long (*seek)(vi_file *file, long offs, int whence);
};
struct vi_ttyops {
void (*status)(char *s, void *cls);
};
-
-struct visor *vi_init(void);
-void vi_cleanup(struct visor *vi);
+/* Create a new instance of the visor editor.
+ * The alloc argument can be used to provide custom memory allocation
+ * functions. It can be null in a hosted build, or if you set the HAVE_LIBC
+ * preprocessor macro, in which case the standard library allocator will be
+ * used.
+ */
+struct visor *vi_create(struct vi_alloc *mm);
+void vi_destroy(struct visor *vi);
void vi_set_fileops(struct visor *vi, struct vi_fileops *fop);
+void vi_set_ttyops(struct visor *vi, struct vi_ttyops *tty);
/* vi_new_buf creates a new buffer and inserts it in the buffer list. If the
* path pointer is null, the new buffer will be empty, otherwise it's as if it
int vi_num_buf(struct visor *vi);
struct vi_buffer *vi_getcur_buf(struct visor *vi);
-int vi_setcur_buf(struct visor *vi, struct vi_buffer *vb);
+void vi_setcur_buf(struct visor *vi, struct vi_buffer *vb);
struct vi_buffer *vi_next_buf(struct visor *vi);
struct vi_buffer *vi_prev_buf(struct visor *vi);
+/* reset a buffer to the newly created state, freeing all resources */
+void vi_buf_reset(struct vi_buffer *vb);
+
/* Read a file into the buffer.
* Returns 0 on success, -1 on failure.
*/