mirror of
https://github.com/Adorable-Catgirl/Zorya-NEO.git
synced 2024-11-23 10:48:06 +11:00
Plenty of tweaks and changes and additions.
This commit is contained in:
parent
2a9eec0ad8
commit
4559069d08
0
lib/fs_foxfs/dirent.lua
Normal file
0
lib/fs_foxfs/dirent.lua
Normal file
15
lib/fs_foxfs/geometry.lua
Normal file
15
lib/fs_foxfs/geometry.lua
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
local function foxfs_getgroups(prox)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
local function foxfs_getnodespergroup(prox)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
local function foxfs_getnodes(prox)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
local function foxfs_getgrouploc(prox, id)
|
||||||
|
|
||||||
|
end
|
0
lib/fs_foxfs/init.lua
Normal file
0
lib/fs_foxfs/init.lua
Normal file
11
lib/fs_foxfs/inode.lua
Normal file
11
lib/fs_foxfs/inode.lua
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
local function foxfs_getnodes(prox, sec)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
local function foxfs_readnode(prox, sec)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
local function foxfs_update(prox, sec, data)
|
||||||
|
|
||||||
|
end
|
0
lib/fs_proxfs/init.lua
Normal file
0
lib/fs_proxfs/init.lua
Normal file
40
lib/util_osdi/init.lua
Normal file
40
lib/util_osdi/init.lua
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
local component = component
|
||||||
|
local osdi = {}
|
||||||
|
|
||||||
|
local function decode_entry(ent)
|
||||||
|
local start, size, ptype, flags, name = string.unpack("<i4i4c8i3c13", ent)
|
||||||
|
return {
|
||||||
|
start = start,
|
||||||
|
size = size,
|
||||||
|
type = ptype,
|
||||||
|
flags = flags,
|
||||||
|
name = name:sub(1, name:match("\0")-1)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
local function encode_entry(ent)
|
||||||
|
ent.name = ent.name:sub(1, 12)
|
||||||
|
ent.name = ent.name .. string.rep("\0", 13-#ent.name)
|
||||||
|
ent.type = ent.type:sub(1, 8)
|
||||||
|
ent.type = ent.type .. string.rep("\0", 8-#ent.type)
|
||||||
|
return string.pack("<i4i4c8i3c13", ent.start, ent.size, ent.type, ent.flags, ent.name)
|
||||||
|
end
|
||||||
|
|
||||||
|
function osdi.read_table(addr)
|
||||||
|
local sec = component.invoke(addr, "readSector", 1)
|
||||||
|
local tbl = {}
|
||||||
|
for i=0, 15 do
|
||||||
|
tbl[i+1] = decode_entry(sec:sub((i*32)+1, (i+1)*32))
|
||||||
|
end
|
||||||
|
return tbl
|
||||||
|
end
|
||||||
|
|
||||||
|
function osdi.write_entry(addr, i, tbl)
|
||||||
|
i = i - 1
|
||||||
|
local sec = component.invoke(addr, "readSector", 1)
|
||||||
|
local dat1, dat2 = sec:sub(1, (i*32)), sec:sub(((i+1)*32)+1)
|
||||||
|
component.invoke(addr, "writeSector", 1, dat1..encode_entry(tbl)..dat2)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
return osdi
|
@ -1,8 +1,8 @@
|
|||||||
-- P A I N
|
-- P A I N
|
||||||
|
|
||||||
local flag_crit = 1 << 6
|
local flag_crit = 1 << 5
|
||||||
local flag_required = 1 << 7
|
local flag_required = 1 << 6
|
||||||
local flag_ext = 1 << 8
|
local flag_ext = 1 << 7
|
||||||
|
|
||||||
local function read_ali(fs, h)
|
local function read_ali(fs, h)
|
||||||
local tmp = 0
|
local tmp = 0
|
||||||
@ -51,7 +51,7 @@ local xdec = {
|
|||||||
end,
|
end,
|
||||||
["ATIM"] = function(fs, h)
|
["ATIM"] = function(fs, h)
|
||||||
return read_int(fs, h, 8)
|
return read_int(fs, h, 8)
|
||||||
end,,
|
end,
|
||||||
["SCOS"] = function(fs, h)
|
["SCOS"] = function(fs, h)
|
||||||
return read_string(fs, h)
|
return read_string(fs, h)
|
||||||
end
|
end
|
||||||
@ -88,7 +88,7 @@ local decode = {
|
|||||||
end,
|
end,
|
||||||
["Z"] = function(fs, h, size)
|
["Z"] = function(fs, h, size)
|
||||||
return {
|
return {
|
||||||
type="eoh"
|
type="eoh",
|
||||||
size = read_ali(fs, h)
|
size = read_ali(fs, h)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
@ -4,18 +4,27 @@ local utils = krequire("utils")
|
|||||||
local thd = krequire("thd")
|
local thd = krequire("thd")
|
||||||
--local vdev = krequire("zorya").loadmod("util_vdev")
|
--local vdev = krequire("zorya").loadmod("util_vdev")
|
||||||
local oefi = zy.loadmod("util_oefiv2")
|
local oefi = zy.loadmod("util_oefiv2")
|
||||||
-- No low-level loading yet.
|
local fuchas = {}
|
||||||
|
|
||||||
return function(addr, args)
|
return function(addr, args)
|
||||||
--oefi.getExtensions().ZyNeo_ExecOEFIApp(addr, ".efi/fuchas.efi2", ...)
|
--oefi.getExtensions().ZyNeo_ExecOEFIApp(addr, ".efi/fuchas.efi2", ...)
|
||||||
--We don't do that here.
|
--We don't do that here.
|
||||||
local env = oefi.getExtensions().ZyNeo_GetOEFIEnv(addr)
|
fuch.env = oefi.getExtensions().ZyNeo_GetOEFIEnv(addr)
|
||||||
env.computer.supportsOEFI = function()
|
fuch.env.computer.supportsOEFI = function()
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
env.os_arguments = args
|
fuch.env.os_arguments = fuch.args
|
||||||
env.loadfile = env.oefi.loadfile
|
fuch.env.loadfile = fuch.env.oefi.loadfile
|
||||||
|
return setmetatable(fuch, {__index=fuchas})
|
||||||
|
end
|
||||||
|
|
||||||
|
function fuchas:karg(key, value)
|
||||||
|
self.args[key] = value
|
||||||
|
end
|
||||||
|
|
||||||
|
function fuchas:boot()
|
||||||
thd.add("fuchas", function()
|
thd.add("fuchas", function()
|
||||||
env.loadfile("Fuchas/Kernel/boot.lua")() --This is how we do.
|
self.env.loadfile("Fuchas/Kernel/boot.lua")() --This is how we do.
|
||||||
computer.pushSignal("fuchas_dead")
|
computer.pushSignal("fuchas_dead")
|
||||||
end)
|
end)
|
||||||
while true do if computer.pullSignal() == "fuchas_dead" then break end end
|
while true do if computer.pullSignal() == "fuchas_dead" then break end end
|
||||||
|
@ -3,7 +3,7 @@ return function(filter)
|
|||||||
return function()
|
return function()
|
||||||
for f in component.list("filesystem") do
|
for f in component.list("filesystem") do
|
||||||
if (filter(f) and component.invoke(f, "spaceTotal") ) then
|
if (filter(f) and component.invoke(f, "spaceTotal") ) then
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -0,0 +1,42 @@
|
|||||||
|
local tsuki = {}
|
||||||
|
|
||||||
|
local zy = krequire("zorya")
|
||||||
|
local thd = krequire("thd")
|
||||||
|
local utils = krequire("utils")
|
||||||
|
local arcfs = zy.loadmod("util_arcfs")
|
||||||
|
local cpio = krequire("util_cpio")
|
||||||
|
|
||||||
|
local function kernel(drive, part, name)
|
||||||
|
local fs = krequire("fs_foxfs").osdi_proxy(drive, part)
|
||||||
|
local stat = fs.stat("/boot/kernel/"..name..".tknl")
|
||||||
|
local h = fs.open("/boot/kernel/"..name..".tknl", "r")
|
||||||
|
local knl = fs.read(h, stat.size)
|
||||||
|
fs.close(h)
|
||||||
|
local func = utils.load_lua(knl)
|
||||||
|
return setmetatable({
|
||||||
|
kernel = func,
|
||||||
|
args = {root={drive, part}},
|
||||||
|
fs = fs,
|
||||||
|
}, {__index=tsuki})
|
||||||
|
end
|
||||||
|
|
||||||
|
function tsuki:initramfs(path)
|
||||||
|
local hand = self.fs.open(path, "r")
|
||||||
|
local arc = cpio.read_h(fs, hand)
|
||||||
|
local fs = arcfs.proxy(arc)
|
||||||
|
self:karg("initramfs", fs)
|
||||||
|
end
|
||||||
|
|
||||||
|
function tsuki:karg(key, value)
|
||||||
|
self.args[key] = value
|
||||||
|
end
|
||||||
|
|
||||||
|
function tsuki:boot()
|
||||||
|
thd.add("tsuki", function()
|
||||||
|
self.kernel(self.args) --This is how we do.
|
||||||
|
computer.pushSignal("tsuki_dead")
|
||||||
|
end)
|
||||||
|
while true do if computer.pullSignal() == "tsuki_dead" then break end end
|
||||||
|
end
|
||||||
|
|
||||||
|
return kernel
|
@ -1,4 +1,4 @@
|
|||||||
local function gen_proto(drive)
|
local function gen_proto()
|
||||||
return {
|
return {
|
||||||
methods = {
|
methods = {
|
||||||
get = function()
|
get = function()
|
||||||
|
@ -14,8 +14,12 @@ local unpack = unpack or table.unpack
|
|||||||
local function load_oefi_env(file, envx)
|
local function load_oefi_env(file, envx)
|
||||||
utils.debug_log(file, envx.fs)
|
utils.debug_log(file, envx.fs)
|
||||||
local cpio = krequire("util_cpio")
|
local cpio = krequire("util_cpio")
|
||||||
local vdev = zy.loadmod("util_vdev")
|
local urf = krequire("util_urf")
|
||||||
local arc = cpio.read(envx.fs, file)
|
local vdev = zy.loadmod("util_vcomponent")
|
||||||
|
local arc = urf.read(envx.fs, file)
|
||||||
|
if not arc then
|
||||||
|
arc = cpio.read(envx.fs, file)
|
||||||
|
end
|
||||||
local oefi_env = {}
|
local oefi_env = {}
|
||||||
local env = {}
|
local env = {}
|
||||||
utils.deepcopy(_G, env)
|
utils.deepcopy(_G, env)
|
||||||
@ -25,6 +29,9 @@ local function load_oefi_env(file, envx)
|
|||||||
env._ZVSTR = nil
|
env._ZVSTR = nil
|
||||||
env._ZPAT = nil
|
env._ZPAT = nil
|
||||||
env.oefi = setmetatable(oefi_env, {__index=oefi})
|
env.oefi = setmetatable(oefi_env, {__index=oefi})
|
||||||
|
local p = gen_proto()
|
||||||
|
vdev.install(env)
|
||||||
|
vdev.register("zbios", "eeprom", p.methods)
|
||||||
local fs = component.proxy(envx.fs)
|
local fs = component.proxy(envx.fs)
|
||||||
function oefi_env.loadfile(path)
|
function oefi_env.loadfile(path)
|
||||||
local h = fs.open(path)
|
local h = fs.open(path)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
local zy = krequire("zorya")
|
local zy = krequire("zorya")
|
||||||
local vdev = zy.loadmod("util_vdev")
|
local vdev = zy.loadmod("util_vcomponent")
|
||||||
vdev.register_type("zybios", {
|
vdev.register("ZORYA_BIOS", "zybios", {
|
||||||
methods = {
|
{
|
||||||
get_threads_info = function()
|
get_threads_info = function()
|
||||||
local threads = {}
|
local threads = {}
|
||||||
for i=1, zy.lkthdn() do
|
for i=1, zy.lkthdn() do
|
||||||
@ -20,12 +20,11 @@ vdev.register_type("zybios", {
|
|||||||
return _ZGIT
|
return _ZGIT
|
||||||
end
|
end
|
||||||
},
|
},
|
||||||
docs = {
|
{
|
||||||
get_threads_info = "get_threads_info():table -- Returns the BIOS thread information.",
|
get_threads_info = "get_threads_info():table -- Returns the BIOS thread information.",
|
||||||
get_version = "get_version():string -- Returns the Zorya NEO version.",
|
get_version = "get_version():string -- Returns the Zorya NEO version.",
|
||||||
get_git_revision = "get_git_revision():string -- Returns the git revision of the build."
|
get_git_revision = "get_git_revision():string -- Returns the git revision of the build."
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
vdev.add_device("ZORYA_BIOS", "zybios")
|
|
||||||
|
|
||||||
return true
|
return true
|
@ -21,14 +21,14 @@ status("\n\nBuilding modules.")
|
|||||||
if (os.execute("stat mods 1>/dev/null 2>&1")) then
|
if (os.execute("stat mods 1>/dev/null 2>&1")) then
|
||||||
for l in io.popen("ls mods"):lines() do
|
for l in io.popen("ls mods"):lines() do
|
||||||
status("MOD\t"..l)
|
status("MOD\t"..l)
|
||||||
os.execute("zsh -c 'cd mods/"..l.."; luacomp init.lua -mnone | lua ../../utils/zlua.lua > ../../pkg/mods/"..l..".zy2m'")
|
os.execute("zsh -c 'cd mods/"..l.."; luacomp init.lua -mluamin | lua ../../utils/zlua.lua > ../../pkg/mods/"..l..".zy2m'")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
status("Module build complete.\n\nBuilding libraries.")
|
status("Module build complete.\n\nBuilding libraries.")
|
||||||
if (os.execute("stat lib 1>/dev/null 2>&1")) then
|
if (os.execute("stat lib 1>/dev/null 2>&1")) then
|
||||||
for l in io.popen("ls lib"):lines() do
|
for l in io.popen("ls lib"):lines() do
|
||||||
status("LIB\t"..l)
|
status("LIB\t"..l)
|
||||||
os.execute("zsh -c 'cd lib/"..l.."; luacomp init.lua -mnone | lua ../../utils/zlua.lua > ../../pkg/lib/"..l..".zy2l'")
|
os.execute("zsh -c 'cd lib/"..l.."; luacomp init.lua -mluamin | lua ../../utils/zlua.lua > ../../pkg/lib/"..l..".zy2l'")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
status("Library build complete.\n\nBuilding installer...")
|
status("Library build complete.\n\nBuilding installer...")
|
||||||
|
@ -22,4 +22,4 @@ function status(msg)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
status("Decompressing image...")
|
status("Decompressing image...")
|
||||||
return load(lzss_decompress($[[luacomp src/zy-neo/zinit.lua -mluamin 2>/dev/null | sed "s/\]\]/]\ ]/g" | lua5.3 src/lzssc.lua | lua utils/mkluastring.lua ]]), "=bios.lua")(lzss_decompress)
|
return load(lzss_decompress($[[luacomp src/zy-neo/zinit.lua -mluamin 2>/dev/null | sed "s/\]\]/]\ ]/g" | lua5.3 utils/makezbios.lua ]]), "=bios.lua")(lzss_decompress)
|
@ -1 +1,12 @@
|
|||||||
--#error "Not implemented."
|
--#error "Not implemented."
|
||||||
|
local rfs = {}
|
||||||
|
|
||||||
|
local bfs = {}
|
||||||
|
|
||||||
|
function bfs.getfile(path)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function bfs.exists(path)
|
||||||
|
|
||||||
|
end
|
@ -30,6 +30,8 @@ function utils.readfile(f,h)
|
|||||||
return b
|
return b
|
||||||
end
|
end
|
||||||
|
|
||||||
|
utils.load_lua = load_lua
|
||||||
|
|
||||||
-- Hell yeah, deepcopy time.
|
-- Hell yeah, deepcopy time.
|
||||||
function utils.deepcopy(src, dest)
|
function utils.deepcopy(src, dest)
|
||||||
dest = dest or {}
|
dest = dest or {}
|
||||||
|
@ -14,11 +14,19 @@ local computer = computer
|
|||||||
local booted = false
|
local booted = false
|
||||||
local zcfg = {}
|
local zcfg = {}
|
||||||
function log(...)
|
function log(...)
|
||||||
component.proxy(component.list("ocemu")()).log(...)
|
component.proxy(component.list("ocemu")() or component.list("sandbox")()).log(...)
|
||||||
end
|
end
|
||||||
local th_i = 0
|
local th_i = 0
|
||||||
local function th_a(func)
|
local function th_a(func)
|
||||||
thd.add("zyneo$"..th_i, func)
|
thd.add("zyneo$"..th_i, func)
|
||||||
|
th_i = th_i + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
local function load_lua(src, ...)
|
||||||
|
if (src:sub(1, 4) == "\27ZLSS") then
|
||||||
|
src = lzss_decompress(src:sub(5))
|
||||||
|
end
|
||||||
|
return load(src, ...)
|
||||||
end
|
end
|
||||||
|
|
||||||
local builtins = {}
|
local builtins = {}
|
||||||
@ -70,13 +78,6 @@ end)())
|
|||||||
|
|
||||||
--#include "src/zy-neo/init.lua"
|
--#include "src/zy-neo/init.lua"
|
||||||
|
|
||||||
local function load_lua(src, ...)
|
|
||||||
if (src:sub(1, 4) == "\27ZLS") then
|
|
||||||
src = lzss_decompress(src:sub(5))
|
|
||||||
end
|
|
||||||
return load(src, ...)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Zorya's handler thread.
|
-- Zorya's handler thread.
|
||||||
th_a(function()
|
th_a(function()
|
||||||
local er
|
local er
|
||||||
|
139
utils/makezbios.lua
Normal file
139
utils/makezbios.lua
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
local f = io.stdin:read("*a")
|
||||||
|
|
||||||
|
--[[----------------------------------------------------------------------------
|
||||||
|
LZSS - encoder / decoder
|
||||||
|
This is free and unencumbered software released into the public domain.
|
||||||
|
Anyone is free to copy, modify, publish, use, compile, sell, or
|
||||||
|
distribute this software, either in source code form or as a compiled
|
||||||
|
binary, for any purpose, commercial or non-commercial, and by any
|
||||||
|
means.
|
||||||
|
In jurisdictions that recognize copyright laws, the author or authors
|
||||||
|
of this software dedicate any and all copyright interest in the
|
||||||
|
software to the public domain. We make this dedication for the benefit
|
||||||
|
of the public at large and to the detriment of our heirs and
|
||||||
|
successors. We intend this dedication to be an overt act of
|
||||||
|
relinquishment in perpetuity of all present and future rights to this
|
||||||
|
software under copyright law.
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||||
|
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
For more information, please refer to <http://unlicense.org/>
|
||||||
|
--]]----------------------------------------------------------------------------
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
local M = {}
|
||||||
|
local string, table = string, table
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
local POS_BITS = 12
|
||||||
|
local LEN_BITS = 16 - POS_BITS
|
||||||
|
local POS_SIZE = 1 << POS_BITS
|
||||||
|
local LEN_SIZE = 1 << LEN_BITS
|
||||||
|
local LEN_MIN = 3
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
function M.compress(input)
|
||||||
|
local offset, output = 1, {}
|
||||||
|
local window = ''
|
||||||
|
|
||||||
|
local function search()
|
||||||
|
for i = LEN_SIZE + LEN_MIN - 1, LEN_MIN, -1 do
|
||||||
|
local str = string.sub(input, offset, offset + i - 1)
|
||||||
|
local pos = string.find(window, str, 1, true)
|
||||||
|
if pos then
|
||||||
|
return pos, str
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
while offset <= #input do
|
||||||
|
local flags, buffer = 0, {}
|
||||||
|
|
||||||
|
for i = 0, 7 do
|
||||||
|
if offset <= #input then
|
||||||
|
local pos, str = search()
|
||||||
|
if pos and #str >= LEN_MIN then
|
||||||
|
local tmp = ((pos - 1) << LEN_BITS) | (#str - LEN_MIN)
|
||||||
|
buffer[#buffer + 1] = string.pack('>I2', tmp)
|
||||||
|
else
|
||||||
|
flags = flags | (1 << i)
|
||||||
|
str = string.sub(input, offset, offset)
|
||||||
|
buffer[#buffer + 1] = str
|
||||||
|
end
|
||||||
|
window = string.sub(window .. str, -POS_SIZE)
|
||||||
|
offset = offset + #str
|
||||||
|
else
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if #buffer > 0 then
|
||||||
|
output[#output + 1] = string.char(flags)
|
||||||
|
output[#output + 1] = table.concat(buffer)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return table.concat(output)
|
||||||
|
end
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
function M.decompress(input)
|
||||||
|
local offset, output = 1, {}
|
||||||
|
local window = ''
|
||||||
|
|
||||||
|
while offset <= #input do
|
||||||
|
local flags = string.byte(input, offset)
|
||||||
|
offset = offset + 1
|
||||||
|
|
||||||
|
for i = 1, 8 do
|
||||||
|
local str = nil
|
||||||
|
if (flags & 1) ~= 0 then
|
||||||
|
if offset <= #input then
|
||||||
|
str = string.sub(input, offset, offset)
|
||||||
|
offset = offset + 1
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if offset + 1 <= #input then
|
||||||
|
local tmp = string.unpack('>I2', input, offset)
|
||||||
|
offset = offset + 2
|
||||||
|
local pos = (tmp >> LEN_BITS) + 1
|
||||||
|
local len = (tmp & (LEN_SIZE - 1)) + LEN_MIN
|
||||||
|
str = string.sub(window, pos, pos + len - 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
flags = flags >> 1
|
||||||
|
if str then
|
||||||
|
output[#output + 1] = str
|
||||||
|
window = string.sub(window .. str, -POS_SIZE)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return table.concat(output)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function mkstr(d)
|
||||||
|
local dat = "\""
|
||||||
|
for i=1, #f do
|
||||||
|
if (d:byte(i) == 0) then
|
||||||
|
dat = dat .. "\0"
|
||||||
|
elseif (d:sub(i,i) == "\\") then
|
||||||
|
dat = dat .. ("\\\\")
|
||||||
|
elseif (d:sub(i,i) == "\"") then
|
||||||
|
dat = dat .. ("\\\"")
|
||||||
|
elseif (d:sub(i,i) == "\n") then
|
||||||
|
dat = dat .. ("\\n")
|
||||||
|
elseif (d:sub(i,i) == "\r") then
|
||||||
|
dat = dat .. ("\\r")
|
||||||
|
else
|
||||||
|
dat = dat .. (d:sub(i,i))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
dat = dat .. ("\"")
|
||||||
|
return dat
|
||||||
|
end
|
||||||
|
|
||||||
|
io.stdout:write(mkstr(M.compress(f)))
|
Loading…
Reference in New Issue
Block a user