diff options
author | pommicket <pommicket@gmail.com> | 2023-01-01 22:56:36 -0500 |
---|---|---|
committer | pommicket <pommicket@gmail.com> | 2023-01-01 22:56:36 -0500 |
commit | a3971fd612813c6544dbe63cb3d7e5d9c0b7b778 (patch) | |
tree | 4c89464fca8366301b121ef597dfee826d37a8bd /session.c | |
parent | e06b040fad63fe729de60781658778a0b008ca16 (diff) |
move functions from io.c to session.c
Diffstat (limited to 'session.c')
-rw-r--r-- | session.c | 153 |
1 files changed, 153 insertions, 0 deletions
@@ -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); |