sim

the sim text editor
git clone git://ssnf.xyz/sim
Log | Files | Refs | README

commit 943d145cb581bcc2a5945e779fac2c2ae9bf7155
parent 551df9960b8d98ef506f000e5133c90380907813
Author: ssnf <ssnf@ssnf.xyz>
Date:   Tue, 28 Jan 2025 17:02:59 +0000

improve dirty file check

Diffstat:
Mconfig.def.h | 5+++--
Msim.c | 16+++++++---------
2 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/config.def.h b/config.def.h @@ -1,8 +1,9 @@ -#define STATUS "%lu 0x%02x %s%c -%lu- %u" \ +#define STATUS "%lu,%u 0x%02x %s%c -%lu- %u" \ , f->dot.p1 \ + , curpos() \ , f->s->s[f->dot.p1] \ , f->name->n ? f->name->s : "-unnamed-" \ - , f->dirty \ + , ISDIRTY(*f) \ , f - file \ , counter diff --git a/sim.c b/sim.c @@ -10,6 +10,7 @@ #define MAXEMPTY 256 #define FILECOUNT 8 #define LENGTH(a) (sizeof(a)/sizeof(a[0])) +#define ISDIRTY(f) (((f).di == (f).i) ? 0 : '*') typedef long Posn; @@ -63,7 +64,7 @@ typedef struct { String* name; Address dot; short i; /*buffer index*/ - uchar dirty; + short di; /*disk buffer index*/ } File; typedef struct { @@ -247,7 +248,6 @@ buf_add( b->arg[f->i] = arg; b->count[f->i] = count; b->p0[f->i] = p0; - f->dirty = '*'; fr_zero(fr); } @@ -410,7 +410,6 @@ redo(int arg) if (buf->is[f->i].n) str_insert(f->s, &buf->is[f->i], buf->p0[f->i]); f->dot.p0 = f->dot.p1 = buf->p0[f->i]; - f->dirty = '*'; fr_zero(fr); fr_update(); } @@ -544,7 +543,7 @@ file_close(int arg) { if (arg == -1) arg = f - file; - if (file[arg].dirty) { + if (ISDIRTY(file[arg])) { printf( CSI "%uH" EL CSI "31mSave %s?" CSI "0m [y/n]", w.wy/2, file[arg].name->n ? file[arg].name->s : "-unnamed-" @@ -564,8 +563,8 @@ file_init(File* f) f->name = emalloc(sizeof(String)); str_init(f->s); str_init(f->name); - f->dirty = f->dot.p0 = f->dot.p1 = 0; - f->i = -1; + f->dot.p0 = f->dot.p1 = 0; + f->i = f->di = -1; } static void @@ -590,7 +589,7 @@ file_load(File* f) static void file_open(int c) { - if (f->dirty) { + if (ISDIRTY(*f)) { printf( CSI "%uH" EL CSI "31mSave %s?" CSI "0m [y/n]", w.wy/2, f->name->s @@ -617,7 +616,7 @@ file_save(int arg) disk = fopen(file[arg].name->s, "w"); fwrite(file[arg].s->s, file[arg].s->n, 1, disk); fclose(disk); - file[arg].dirty = 0; + file[arg].di = file[arg].i; } static void @@ -1121,7 +1120,6 @@ undo(int arg) if (buf->ds[f->i].n) str_insert(f->s, &buf->ds[f->i], buf->p0[f->i]); f->dot.p0 = f->dot.p1 = buf->p0[f->i--]; - f->dirty = '*'; fr_zero(fr); fr_update(); }