Ben Harris 36c282aaa9 js: Load save files into the C side incrementally
Before this commit, JavaScript Puzzles loaded a save file by pushing the
entire file onto the Emscripten stack and then reading it from there.
This worked tolerably for typical save files, but Emscripten's stack
defaults to only having 64 kiB of space.  That meant that trying to load
something that wasn't a real save file tended to cause a stack overflow.
I expect that at least some real save files would suffer from the same
problem.

The stack overflow would generally cause a JavaScript exception and then
leave the stack pointer outside the stack, so that any future attempt to
call into C would fail as well.

To fix this, arrange that the C function for reading data from the save
file calls out to JavaScript.  The JavaScript can then copy just the
requested data into the caller's buffer.  We can't pass a JavaScript
function pointer to C, but since only one file can be loaded at a time,
we can just have a global variable that's the current loading callback.

There might still be a problem if you try to load a stupendously large
file, since I think FileReader.readAsArrayBuffer() reads the whole file
into the browser's RAM.  It works on my laptop with files up to a few
hundred megabytes, though.
2023-04-03 21:09:57 +01:00
2021-04-25 09:59:15 +01:00
2018-11-13 21:48:24 +00:00
2023-03-22 16:06:18 +00:00
2023-01-15 20:59:22 +00:00
2023-03-26 20:32:38 +01:00
2023-03-10 18:46:06 +00:00
2023-04-02 14:35:12 +01:00
2023-03-26 20:32:38 +01:00
2018-11-13 21:48:24 +00:00
2023-02-13 21:23:58 +00:00
2023-04-02 14:35:12 +01:00
2023-04-02 14:35:12 +01:00
2017-09-20 18:03:44 +01:00
2021-05-21 09:10:53 +01:00
2021-03-29 19:02:23 +01:00
2018-11-13 21:48:24 +00:00
2023-02-18 23:14:12 +00:00
2017-05-07 16:25:56 +01:00
2023-03-22 16:06:18 +00:00

This is the README accompanying the source code to Simon Tatham's
puzzle collection. The collection's web site is at
<https://www.chiark.greenend.org.uk/~sgtatham/puzzles/>.

The puzzle collection is built using CMake <https://cmake.org/>. To
compile in the simplest way (on any of Linux, Windows or Mac), run
these commands in the source directory:

  cmake .
  cmake --build .

The manual is provided in Windows Help format for the Windows build;
in text format for anyone who needs it; and in HTML for the Mac OS X
application and for the web site. It is generated from a Halibut
source file (puzzles.but), which is the preferred form for
modification. To generate the manual in other formats, rebuild it,
or learn about Halibut, visit the Halibut website at
<https://www.chiark.greenend.org.uk/~sgtatham/halibut/>.
Description
No description provided
Readme 26 MiB
Languages
C 93.3%
JavaScript 1.4%
Objective-C 1.1%
CMake 1.1%
HTML 0.8%
Other 2.2%