commit 943d145cb581bcc2a5945e779fac2c2ae9bf7155
parent 551df9960b8d98ef506f000e5133c90380907813
Author: ssnf <ssnf@ssnf.xyz>
Date: Tue, 28 Jan 2025 17:02:59 +0000
improve dirty file check
Diffstat:
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();
}