summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--buffer.c15
-rw-r--r--filesystem.h4
-rw-r--r--io.c135
-rw-r--r--main.c1
-rw-r--r--session.c153
5 files changed, 155 insertions, 153 deletions
diff --git a/buffer.c b/buffer.c
index 353f565..441f3f5 100644
--- a/buffer.c
+++ b/buffer.c
@@ -169,21 +169,6 @@ static bool buffer_pos_valid(TextBuffer *buffer, BufferPos p) {
return p.line < buffer->nlines && p.index <= buffer->lines[p.line].len;
}
-// write a buffer position to a file
-void buffer_pos_write(BufferPos pos, FILE *fp) {
- write_u32(fp, pos.line);
- write_u32(fp, pos.index);
-}
-
-// read a buffer position from a file, and validate it
-BufferPos buffer_pos_read(TextBuffer *buffer, FILE *fp) {
- BufferPos pos = {0};
- pos.line = read_u32(fp);
- pos.index = read_u32(fp);
- buffer_pos_validate(buffer, &pos);
- return pos;
-}
-
// are there any unsaved changes?
bool buffer_unsaved_changes(TextBuffer *buffer) {
if (buffer_is_untitled(buffer) && buffer_empty(buffer))
diff --git a/filesystem.h b/filesystem.h
index 0c18494..03ae04a 100644
--- a/filesystem.h
+++ b/filesystem.h
@@ -40,8 +40,8 @@ int fs_mkdir(char const *path);
// 0 if buf is too short to hold the cwd
// -1 if we can't get the cwd for whatever reason.
int fs_get_cwd(char *buf, size_t buflen);
-
-void fs_dir_entries_free(FsDirectoryEntry **entries) {
+// free the entries generated by fs_list_directory.s
+static void fs_dir_entries_free(FsDirectoryEntry **entries) {
for (int i = 0; entries[i]; ++i)
free(entries[i]);
free(entries);
diff --git a/io.c b/io.c
deleted file mode 100644
index bb0ced7..0000000
--- a/io.c
+++ /dev/null
@@ -1,135 +0,0 @@
-static void write_u8(FILE *fp, u8 x) {
- putc(x, fp);
-}
-
-static void write_u16(FILE *fp, u16 x) {
- fwrite(&x, sizeof x, 1, fp);
-}
-
-static void write_u32(FILE *fp, u32 x) {
- fwrite(&x, sizeof x, 1, fp);
-}
-
-static void write_u64(FILE *fp, u64 x) {
- fwrite(&x, sizeof x, 1, fp);
-}
-
-static void write_i8(FILE *fp, i8 x) {
- fwrite(&x, sizeof x, 1, fp);
-}
-
-static void write_i16(FILE *fp, i16 x) {
- fwrite(&x, sizeof x, 1, fp);
-}
-
-static void write_i32(FILE *fp, i32 x) {
- fwrite(&x, sizeof x, 1, fp);
-}
-
-static void write_i64(FILE *fp, i64 x) {
- fwrite(&x, sizeof x, 1, fp);
-}
-
-static void write_float(FILE *fp, float x) {
- fwrite(&x, sizeof x, 1, fp);
-}
-
-static void write_double(FILE *fp, double x) {
- fwrite(&x, sizeof x, 1, fp);
-}
-
-static void write_char(FILE *fp, char x) {
- fwrite(&x, sizeof x, 1, fp);
-}
-
-static void write_bool(FILE *fp, bool x) {
- putc(x, fp);
-}
-
-static u8 read_u8(FILE *fp) {
- return (u8)getc(fp);
-}
-
-static u16 read_u16(FILE *fp) {
- u16 x = 0;
- fread(&x, sizeof x, 1, fp);
- return x;
-}
-
-static u32 read_u32(FILE *fp) {
- u32 x = 0;
- fread(&x, sizeof x, 1, fp);
- return x;
-}
-
-static u64 read_u64(FILE *fp) {
- u64 x = 0;
- fread(&x, sizeof x, 1, fp);
- return x;
-}
-
-static i8 read_i8(FILE *fp) {
- i8 x = 0;
- fread(&x, sizeof x, 1, fp);
- return x;
-}
-
-static i16 read_i16(FILE *fp) {
- i16 x = 0;
- fread(&x, sizeof x, 1, fp);
- return x;
-}
-
-static i32 read_i32(FILE *fp) {
- i32 x = 0;
- fread(&x, sizeof x, 1, fp);
- return x;
-}
-
-static i64 read_i64(FILE *fp) {
- i64 x = 0;
- fread(&x, sizeof x, 1, fp);
- return x;
-}
-
-static float read_float(FILE *fp) {
- float x = 0;
- fread(&x, sizeof x, 1, fp);
- return x;
-}
-
-static double read_double(FILE *fp) {
- double x = 0;
- fread(&x, sizeof x, 1, fp);
- return x;
-}
-
-static char read_char(FILE *fp) {
- char x = 0;
- fread(&x, sizeof x, 1, fp);
- return x;
-}
-
-static bool read_bool(FILE *fp) {
- return (bool)getc(fp);
-}
-
-static void write_cstr(FILE *fp, char const *cstr) {
- fwrite(cstr, 1, strlen(cstr) + 1, fp);
-}
-
-static void read_cstr(FILE *fp, char *out, size_t out_sz) {
- char *p = out, *end = out + out_sz;
- while (1) {
- if (p >= end - 1) {
- *p = '\0';
- break;
- }
- int c = getc(fp);
- if (c == 0 || c == EOF) {
- *p = '\0';
- break;
- }
- *p++ = (char)c;
- }
-}
diff --git a/main.c b/main.c
index ad89340..4dd52af 100644
--- a/main.c
+++ b/main.c
@@ -104,7 +104,6 @@ no_warn_end
#error "Unrecognized operating system."
#endif
-#include "io.c"
#include "time.c"
#include "ted.h"
#include "gl.c"
diff --git a/session.c b/session.c
index a443392..c15985f 100644
--- a/session.c
+++ b/session.c
@@ -1,6 +1,159 @@
#define SESSION_FILENAME "session.txt"
#define SESSION_VERSION "\x7fTED0002"
+static void write_u8(FILE *fp, u8 x) {
+ putc(x, fp);
+}
+
+static void write_u16(FILE *fp, u16 x) {
+ fwrite(&x, sizeof x, 1, fp);
+}
+
+static void write_u32(FILE *fp, u32 x) {
+ fwrite(&x, sizeof x, 1, fp);
+}
+
+static void write_u64(FILE *fp, u64 x) {
+ fwrite(&x, sizeof x, 1, fp);
+}
+
+static void write_i8(FILE *fp, i8 x) {
+ fwrite(&x, sizeof x, 1, fp);
+}
+
+static void write_i16(FILE *fp, i16 x) {
+ fwrite(&x, sizeof x, 1, fp);
+}
+
+static void write_i32(FILE *fp, i32 x) {
+ fwrite(&x, sizeof x, 1, fp);
+}
+
+static void write_i64(FILE *fp, i64 x) {
+ fwrite(&x, sizeof x, 1, fp);
+}
+
+static void write_float(FILE *fp, float x) {
+ fwrite(&x, sizeof x, 1, fp);
+}
+
+static void write_double(FILE *fp, double x) {
+ fwrite(&x, sizeof x, 1, fp);
+}
+
+static void write_char(FILE *fp, char x) {
+ fwrite(&x, sizeof x, 1, fp);
+}
+
+static void write_bool(FILE *fp, bool x) {
+ putc(x, fp);
+}
+
+static u8 read_u8(FILE *fp) {
+ return (u8)getc(fp);
+}
+
+static u16 read_u16(FILE *fp) {
+ u16 x = 0;
+ fread(&x, sizeof x, 1, fp);
+ return x;
+}
+
+static u32 read_u32(FILE *fp) {
+ u32 x = 0;
+ fread(&x, sizeof x, 1, fp);
+ return x;
+}
+
+static u64 read_u64(FILE *fp) {
+ u64 x = 0;
+ fread(&x, sizeof x, 1, fp);
+ return x;
+}
+
+static i8 read_i8(FILE *fp) {
+ i8 x = 0;
+ fread(&x, sizeof x, 1, fp);
+ return x;
+}
+
+static i16 read_i16(FILE *fp) {
+ i16 x = 0;
+ fread(&x, sizeof x, 1, fp);
+ return x;
+}
+
+static i32 read_i32(FILE *fp) {
+ i32 x = 0;
+ fread(&x, sizeof x, 1, fp);
+ return x;
+}
+
+static i64 read_i64(FILE *fp) {
+ i64 x = 0;
+ fread(&x, sizeof x, 1, fp);
+ return x;
+}
+
+static float read_float(FILE *fp) {
+ float x = 0;
+ fread(&x, sizeof x, 1, fp);
+ return x;
+}
+
+static double read_double(FILE *fp) {
+ double x = 0;
+ fread(&x, sizeof x, 1, fp);
+ return x;
+}
+
+static char read_char(FILE *fp) {
+ char x = 0;
+ fread(&x, sizeof x, 1, fp);
+ return x;
+}
+
+static bool read_bool(FILE *fp) {
+ return (bool)getc(fp);
+}
+
+static void write_cstr(FILE *fp, char const *cstr) {
+ fwrite(cstr, 1, strlen(cstr) + 1, fp);
+}
+
+static void read_cstr(FILE *fp, char *out, size_t out_sz) {
+ char *p = out, *end = out + out_sz;
+ while (1) {
+ if (p >= end - 1) {
+ *p = '\0';
+ break;
+ }
+ int c = getc(fp);
+ if (c == 0 || c == EOF) {
+ *p = '\0';
+ break;
+ }
+ *p++ = (char)c;
+ }
+}
+
+
+// write a buffer position to a file
+static void buffer_pos_write(BufferPos pos, FILE *fp) {
+ write_u32(fp, pos.line);
+ write_u32(fp, pos.index);
+}
+
+// read a buffer position from a file, and validate it
+static BufferPos buffer_pos_read(TextBuffer *buffer, FILE *fp) {
+ BufferPos pos = {0};
+ pos.line = read_u32(fp);
+ pos.index = read_u32(fp);
+ buffer_pos_validate(buffer, &pos);
+ return pos;
+}
+
+
static void session_write_node(Ted *ted, FILE *fp, u16 node_idx) {
Node *node = &ted->nodes[node_idx];
write_u16(fp, node_idx);