mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 08:01:30 -07:00
Revert "WASM: move save file encoding from JS into C."
Now that save files are (even more) officially ASCII, it's perfectly safe to pass them to JavaScript as UTF-8 strings. This means that the form in which save files are shipped from C to JavaScript is the same is the form in which they're shipped from JavaScript to C. That allows for doing new things with them, like writing them to local storage. This reverts commit f729f51e475ff98d0caf529f0723ef810b1c88ef.
This commit is contained in:
49
emcc.c
49
emcc.c
@ -773,53 +773,12 @@ struct savefile_write_ctx {
|
||||
size_t pos;
|
||||
};
|
||||
|
||||
static void savefile_write(void *vctx, const void *vbuf, int len)
|
||||
static void savefile_write(void *vctx, const void *buf, int len)
|
||||
{
|
||||
static const unsigned char length[256] = {
|
||||
/*
|
||||
* Assign a length of 1 to any printable ASCII character that
|
||||
* can be written literally in URI-encoding, i.e.
|
||||
*
|
||||
* A-Z a-z 0-9 - _ . ! ~ * ' ( )
|
||||
*
|
||||
* Assign length 3 (for % and two hex digits) to all other
|
||||
* byte values.
|
||||
*/
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 1, 3, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 3,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3,
|
||||
3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1,
|
||||
3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
};
|
||||
static const char hexdigits[] = "0123456789ABCDEF";
|
||||
|
||||
struct savefile_write_ctx *ctx = (struct savefile_write_ctx *)vctx;
|
||||
const unsigned char *buf = (const unsigned char *)vbuf;
|
||||
for (int i = 0; i < len; i++) {
|
||||
unsigned char c = buf[i];
|
||||
int clen = length[c];
|
||||
if (ctx->buffer) {
|
||||
if (clen == 1) {
|
||||
ctx->buffer[ctx->pos] = c;
|
||||
} else {
|
||||
ctx->buffer[ctx->pos] = '%';
|
||||
ctx->buffer[ctx->pos+1] = hexdigits[c >> 4];
|
||||
ctx->buffer[ctx->pos+2] = hexdigits[c & 0xF];
|
||||
}
|
||||
}
|
||||
ctx->pos += clen;
|
||||
}
|
||||
if (ctx->buffer)
|
||||
memcpy(ctx->buffer + ctx->pos, buf, len);
|
||||
ctx->pos += len;
|
||||
}
|
||||
|
||||
char *get_save_file(void)
|
||||
|
@ -363,7 +363,8 @@ function initPuzzle() {
|
||||
"Click to download the "));
|
||||
var a = document.createElement("a");
|
||||
a.download = "puzzle.sav";
|
||||
a.href = "data:application/octet-stream," + savefile_text;
|
||||
a.href = "data:application/octet-stream," +
|
||||
encodeURIComponent(savefile_text);
|
||||
a.appendChild(document.createTextNode("saved-game file"));
|
||||
dlg_form.appendChild(a);
|
||||
dlg_form.appendChild(document.createTextNode("."));
|
||||
|
Reference in New Issue
Block a user