Save input buffer contents
parent
da1b943fcc
commit
78ff548b93
2
chat.h
2
chat.h
|
@ -334,6 +334,8 @@ void inputUpdate(void);
|
||||||
bool inputPending(uint id);
|
bool inputPending(uint id);
|
||||||
void inputRead(void);
|
void inputRead(void);
|
||||||
void inputCompleteAdd(void);
|
void inputCompleteAdd(void);
|
||||||
|
int inputSave(FILE *file);
|
||||||
|
void inputLoad(FILE *file, size_t version);
|
||||||
|
|
||||||
enum Scroll {
|
enum Scroll {
|
||||||
ScrollOne,
|
ScrollOne,
|
||||||
|
|
39
input.c
39
input.c
|
@ -586,3 +586,42 @@ void inputRead(void) {
|
||||||
}
|
}
|
||||||
inputUpdate();
|
inputUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int writeString(FILE *file, const char *str) {
|
||||||
|
return (fwrite(str, strlen(str) + 1, 1, file) ? 0 : -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int inputSave(FILE *file) {
|
||||||
|
int error;
|
||||||
|
for (uint id = 0; id < IDCap; ++id) {
|
||||||
|
if (!edits[id].len) continue;
|
||||||
|
char *ptr = editString(&edits[id], &buf, &cap, NULL);
|
||||||
|
if (!ptr) return -1;
|
||||||
|
error = 0
|
||||||
|
|| writeString(file, idNames[id])
|
||||||
|
|| writeString(file, ptr);
|
||||||
|
if (error) return error;
|
||||||
|
}
|
||||||
|
return writeString(file, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t readString(FILE *file, char **buf, size_t *cap) {
|
||||||
|
ssize_t len = getdelim(buf, cap, '\0', file);
|
||||||
|
if (len < 0 && !feof(file)) err(EX_IOERR, "getdelim");
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
void inputLoad(FILE *file, size_t version) {
|
||||||
|
if (version < 8) return;
|
||||||
|
while (0 < readString(file, &buf, &cap) && buf[0]) {
|
||||||
|
uint id = idFor(buf);
|
||||||
|
readString(file, &buf, &cap);
|
||||||
|
size_t max = strlen(buf);
|
||||||
|
int error = editReserve(&edits[id], 0, max);
|
||||||
|
if (error) err(EX_OSERR, "editReserve");
|
||||||
|
size_t len = mbstowcs(edits[id].buf, buf, max);
|
||||||
|
assert(len != (size_t)-1);
|
||||||
|
edits[id].len = len;
|
||||||
|
edits[id].pos = len;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
7
ui.c
7
ui.c
|
@ -288,7 +288,8 @@ static const uint64_t Signatures[] = {
|
||||||
0x6C72696774616305, // no URLs
|
0x6C72696774616305, // no URLs
|
||||||
0x6C72696774616306, // no thresh
|
0x6C72696774616306, // no thresh
|
||||||
0x6C72696774616307, // no window time
|
0x6C72696774616307, // no window time
|
||||||
0x6C72696774616308,
|
0x6C72696774616308, // no input
|
||||||
|
0x6C72696774616309,
|
||||||
};
|
};
|
||||||
|
|
||||||
static size_t signatureVersion(uint64_t signature) {
|
static size_t signatureVersion(uint64_t signature) {
|
||||||
|
@ -305,9 +306,10 @@ static int writeUint64(FILE *file, uint64_t u) {
|
||||||
int uiSave(void) {
|
int uiSave(void) {
|
||||||
return 0
|
return 0
|
||||||
|| ftruncate(fileno(saveFile), 0)
|
|| ftruncate(fileno(saveFile), 0)
|
||||||
|| writeUint64(saveFile, Signatures[7])
|
|| writeUint64(saveFile, Signatures[8])
|
||||||
|| writeUint64(saveFile, self.pos)
|
|| writeUint64(saveFile, self.pos)
|
||||||
|| windowSave(saveFile)
|
|| windowSave(saveFile)
|
||||||
|
|| inputSave(saveFile)
|
||||||
|| urlSave(saveFile)
|
|| urlSave(saveFile)
|
||||||
|| fclose(saveFile);
|
|| fclose(saveFile);
|
||||||
}
|
}
|
||||||
|
@ -350,5 +352,6 @@ void uiLoad(const char *name) {
|
||||||
self.pos = readUint64(saveFile);
|
self.pos = readUint64(saveFile);
|
||||||
}
|
}
|
||||||
windowLoad(saveFile, version);
|
windowLoad(saveFile, version);
|
||||||
|
inputLoad(saveFile, version);
|
||||||
urlLoad(saveFile, version);
|
urlLoad(saveFile, version);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue