DMCRN3CEDMPBFFQA37BSGYQCUVLFDETXSS3NFJ3U4K6XSFPPDC2AC
WAQFRM2UWDNWO3QZB2KXBEMFUSLMDMDDJ6GAYCYEOXVZ6UG7QIQAC
M3F33OYQJ6NDWXXLMQ7P3ZS6F3YCHGWY433G3DDDE3FPCOOKWYYQC
PHN2H24FBVZGS3EARPE7FCU65CUIC3GRVZA4AV6EIQJW4Q4DYSCQC
WVKFFN6FAJVKUL6NGAOWSS33WFD63GPOPSLDQ7JT4WM27KV7H65QC
MISEW25VIMXQ6ID37VQ365KAMPQ5O4COYWEIK6M4JXKIG7L5DVSQC
R5QXEHUIZLELJGGCZAE7ATNS3CLRJ7JFRENMGH4XXH24C5WABZDQC
FS2ITYYHBLFT66YUC3ENPFYI2HOYHOVEPQIN7NQR6KF5MEK4NKZAC
L2HMMGZPLQTMRPSHKIZZA77KOKKNVREUOWNSUKTIMS2GPMLJL4BAC
GDBDGLRHJSMN527PHXGZVSGF55EYT4X3GFNF4LF6363JE2FGBQXQC
SGZ44T7WGWSQ27MZ6CSCHTGBOLQTIECJIP6KBSTP7A55DZCUBLHAC
BPYWIU627AGHPXJ7KAZEYFJMUEVTCHQ624UHTLZ4VMAVOLZM255AC
PNBKVYZ4ANUAZNQN6KEWYNDF7552ROZPNAPRJE7Q6O7ZZJMJ3S3QC
CZRMAMSBRVX26IXKHNPG6M3YSWMOZTM73X3XHAMBDSNETTFVRCUQC
2DVVKKVA6PJ7VKYLGPQ22AXUB6ZWFMPWB445PRDZJDNLURUFDNDQC
D4FEFHQCSILZFQ5VLWNXAIRZNUMCDNGJSM4UJ6T6FDMMIWYRYILQC
KQWIMWJ5VRAXM7SFNWDSBZMQ6ZE3CZQTKZHVM5ZQCW4RHPTI64MQC
VY24DRY6CZGUUURGPIYSL63HYTE22D573G5UX4MN55JORJ5GNW6AC
MD3W5IRAC6UQALQE4LJC52VQNDO3I3HXF3XE2XHDABXBYJBUVAXQC
ZTMRQZSWUL6FJRI4C4H37MR2IMV22DB6KRGEOUNYRWW5CTAVQFKAC
IDGP4BJZTKAD6ZO4RLAWYVN6IFCMIM76G6HJGPTE27K4D6CDBUHQC
json = require 'json'
function main(args)
local infile = io.open(args[1])
local manifest_s = infile:read('*a')
infile:close()
local manifest = json.decode(manifest_s)
local core_filenames = {}
for k,v in pairs(manifest) do
if not starts_with(k, 'fw_') then
table.insert(core_filenames, k)
end
end
table.sort(core_filenames)
for _,core in ipairs(core_filenames) do
local filename = ('%04d'):format(manifest[core])..'-'..core
local f = io.open(filename)
if f then
print(f:read('*a'))
print('')
end
end
end
function starts_with(s, prefix)
if #s < #prefix then
return false
end
for i=1,#prefix do
if s:sub(i,i) ~= prefix:sub(i,i) then
return false
end
end
return true
end
main(arg)
Run this app from the terminal, [passing its directory to LÖVE](https://love2d.org/wiki/Getting_Started#Running_Games)
You'll see a page that's currently hard-coded in the app.
![initial view](assets/1.png)
All text is currently editable. There's a table on the right that will grow
and shrink as you add and delete text.
Changes you make are currently not saved. This is just a demo.
To pan, drag the surface around. To increase/decrease zoom, press `ctrl+=`,
`ctrl+-` respectively. To reset zoom press `ctrl+0`.
this live without restarting the app each time, install [the driver
app](https://codeberg.org/akkartik/driver.love). Here's an example session
using a fork of this repo:
To run from the terminal, [pass this directory to LÖVE](https://love2d.org/wiki/Getting_Started#Running_Games).
Run this app from the terminal, [passing its directory to LÖVE](https://love2d.org/wiki/Getting_Started#Running_Games)
[More information about the on-disk representation of freewheeling apps.](representation.md)
* Don't give up your other tools just yet. It's easy to make a mistake that
the app doesn't recover from when you fix it. Try restarting the app, and if
it still doesn't work, perhaps you need to fix the initial load. This isn't
yet a tool you can keep open for months on end. (And I'm ambivalent about
making it such a tool since your programs might stop working for others.)
* Both freewheeling apps and the driver for them currently benefit from being
launched in terminal windows rather than by being clicked on in a desktop
OS. See [the driver app](https://codeberg.org/akkartik/driver.love/src/branch/main/README.md)
for details.
* I still see driver and the app being driven occasionally crash. When I do I
try to make things more robust. If you do you'll quite possibly crash again
if you try to restart. In such a situation you'll have to bump down to
editing the underlying version files by other means. See [representation.md](representation.md)
for details of the underlying representation on disk.
* Given the above issues, both this driver and its client freewheeling app
benefit from being launched in terminal windows rather than by being clicked
on in a desktop OS.