Merge branch 'mikethe223-patch-1'
This commit was merged in pull request #27.
This commit is contained in:
@@ -2,7 +2,9 @@ local agregistry = {
|
|||||||
["halyde"] = "https://raw.githubusercontent.com/Team-Cerulean-Blue/Halyde/refs/heads/main/",
|
["halyde"] = "https://raw.githubusercontent.com/Team-Cerulean-Blue/Halyde/refs/heads/main/",
|
||||||
["edit"] = "https://raw.githubusercontent.com/Team-Cerulean-Blue/Halyde/refs/heads/main/",
|
["edit"] = "https://raw.githubusercontent.com/Team-Cerulean-Blue/Halyde/refs/heads/main/",
|
||||||
["argentum"] = "https://raw.githubusercontent.com/Team-Cerulean-Blue/Halyde/refs/heads/main/",
|
["argentum"] = "https://raw.githubusercontent.com/Team-Cerulean-Blue/Halyde/refs/heads/main/",
|
||||||
["donut"] = "https://raw.githubusercontent.com/Ponali/donut/refs/heads/master/"
|
["donut"] = "https://raw.githubusercontent.com/Ponali/ArgentumPackages/refs/heads/master/",
|
||||||
|
["libocif"] = "https://raw.githubusercontent.com/Ponali/ArgentumPackages/refs/heads/master/",
|
||||||
|
["ocif-tools"] = "https://raw.githubusercontent.com/Ponali/ArgentumPackages/refs/heads/master/"
|
||||||
}
|
}
|
||||||
|
|
||||||
return agregistry
|
return agregistry
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ All default Halyde shell commands:
|
|||||||
fetch Displays system information.
|
fetch Displays system information.
|
||||||
help Shows this.
|
help Shows this.
|
||||||
ls Lists files.
|
ls Lists files.
|
||||||
|
lscor Lists coroutines.
|
||||||
lua Starts the Lua shell.
|
lua Starts the Lua shell.
|
||||||
mkdir Makes a directory.
|
mkdir Makes a directory.
|
||||||
mv Moves/renames a file.
|
mv Moves/renames a file.
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
local loadfile = ...
|
local loadfile = ...
|
||||||
local filesystem = loadfile("/halyde/lib/filesystem.lua")(loadfile)
|
local filesystem = loadfile("/halyde/lib/filesystem.lua")(loadfile)
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
_G._OSVERSION = "Halyde 1.11.1"
|
_G._OSVERSION = "Halyde 1.11.1"
|
||||||
|
=======
|
||||||
|
_G._OSVERSION = "Halyde 1.11.0"
|
||||||
|
>>>>>>> mikethe223-patch-1
|
||||||
_G._OSLOGO = ""
|
_G._OSLOGO = ""
|
||||||
local handle, tmpdata = filesystem.open("/halyde/config/oslogo.ans", "r"), nil
|
local handle, tmpdata = filesystem.open("/halyde/config/oslogo.ans", "r"), nil
|
||||||
repeat
|
repeat
|
||||||
|
|||||||
@@ -69,12 +69,60 @@ function filesystem.exists(path) -- check if path exists
|
|||||||
return component.invoke(address, "exists", absPath)
|
return component.invoke(address, "exists", absPath)
|
||||||
end
|
end
|
||||||
|
|
||||||
function filesystem.open(path, mode) -- opens a file and returns its handle
|
local function readUniChar(readByte)
|
||||||
|
local function inRange(min,max,...)
|
||||||
|
for _,v in ipairs({...}) do
|
||||||
|
if not (v and v>=min and v<max) then return false end
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
local function readByte0() return readByte() or 0 end
|
||||||
|
|
||||||
|
local byte = readByte()
|
||||||
|
|
||||||
|
if byte < 0x80 then
|
||||||
|
-- ASCII character (0xxxxxxx)
|
||||||
|
return byte
|
||||||
|
elseif byte < 0xC0 then
|
||||||
|
-- Continuation byte (10xxxxxx), invalid at start position
|
||||||
|
return nil
|
||||||
|
elseif byte < 0xE0 then
|
||||||
|
-- 2-byte sequence (110xxxxx 10xxxxxx)
|
||||||
|
local byte2 = readByte0()
|
||||||
|
if inRange(0x80,0xC0,byte2) then
|
||||||
|
local code_point = ((byte & 0x1F) << 6) | (byte2 & 0x3F)
|
||||||
|
return code_point
|
||||||
|
end
|
||||||
|
elseif byte < 0xF0 then
|
||||||
|
-- 3-byte sequence (1110xxxx 10xxxxxx 10xxxxxx)
|
||||||
|
local byte2, byte3 = readByte0(), readByte0()
|
||||||
|
if inRange(0x80,0xC0,byte2,byte3)then
|
||||||
|
local code_point = ((byte & 0x0F) << 12) | ((byte2 & 0x3F) << 6) | (byte3 & 0x3F)
|
||||||
|
return code_point
|
||||||
|
end
|
||||||
|
elseif byte < 0xF8 then
|
||||||
|
-- 4-byte sequence (11110xxx 10xxxxxx 10xxxxxx 10xxxxxx)
|
||||||
|
local byte2, byte3, byte4 = readByte0(), readByte0(), readByte0()
|
||||||
|
if inRange(0x80,0xC0,byte2,byte3,byte4) then
|
||||||
|
local code_point = ((byte & 0x07) << 18) | ((byte2 & 0x3F) << 12) | ((byte3 & 0x3F) << 6) | (byte4 & 0x3F)
|
||||||
|
return code_point
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Invalid UTF-8 byte sequence
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
function filesystem.open(path, mode, buffered) -- opens a file and returns its handle
|
||||||
checkArg(1, path, "string")
|
checkArg(1, path, "string")
|
||||||
checkArg(2, mode, "string", "nil")
|
checkArg(2, mode, "string", "nil")
|
||||||
|
checkArg(3, buffered, "boolean", "nil")
|
||||||
if not mode then
|
if not mode then
|
||||||
mode = "r"
|
mode = "r"
|
||||||
end
|
end
|
||||||
|
if not buffered then
|
||||||
|
buffered = true
|
||||||
|
end
|
||||||
if not (mode == "r" or mode == "w" or mode == "rb" or mode == "wb") then
|
if not (mode == "r" or mode == "w" or mode == "rb" or mode == "wb") then
|
||||||
return nil, "invalid handle type"
|
return nil, "invalid handle type"
|
||||||
end
|
end
|
||||||
@@ -88,17 +136,63 @@ function filesystem.open(path, mode) -- opens a file and returns its handle
|
|||||||
local properHandle = {}
|
local properHandle = {}
|
||||||
properHandle.handle = handle
|
properHandle.handle = handle
|
||||||
properHandle.address = address
|
properHandle.address = address
|
||||||
|
local content = nil
|
||||||
|
local readcursor = 1
|
||||||
|
if buffered and mode:sub(1,1)=="r" then
|
||||||
|
content=""
|
||||||
|
repeat
|
||||||
|
tmpdata = component.invoke(address, "read", handle, math.huge or math.maxinteger)
|
||||||
|
content = content .. (tmpdata or "")
|
||||||
|
until not tmpdata
|
||||||
|
component.invoke(address, "close", handle)
|
||||||
|
end
|
||||||
function properHandle.read(self, amount)
|
function properHandle.read(self, amount)
|
||||||
checkArg(2, amount, "number")
|
checkArg(2, amount, "number")
|
||||||
|
if buffered then
|
||||||
|
local limit = string.len(content)+1
|
||||||
|
local out = nil
|
||||||
|
-- error("amount "..amount..", limit "..limit)
|
||||||
|
if readcursor<limit then
|
||||||
|
if amount==math.huge then
|
||||||
|
out = string.sub(content,math.min(readcursor,limit))
|
||||||
|
else
|
||||||
|
out = string.sub(content,math.min(readcursor,limit),math.min(readcursor+amount-1,limit))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
readcursor=readcursor+amount
|
||||||
|
if out=="" then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
return out
|
||||||
|
else
|
||||||
return component.invoke(self.address, "read", self.handle, amount)
|
return component.invoke(self.address, "read", self.handle, amount)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
function properHandle.readBytes(self,n)
|
||||||
|
n = n or 1
|
||||||
|
if n==1 then return string.byte(self:read(1)) end
|
||||||
|
local bytes, res = {string.byte(self:read(n),1,n)}, 0
|
||||||
|
for i=1,#bytes do
|
||||||
|
res = (res<<8)&0xFFFFFFFF | bytes[i]
|
||||||
|
end
|
||||||
|
return res
|
||||||
|
end
|
||||||
|
function properHandle.readUnicodeChar(self)
|
||||||
|
return unicode.char(readUniChar(function()
|
||||||
|
return self:readBytes(1)
|
||||||
|
end))
|
||||||
|
end
|
||||||
function properHandle.write(self, data)
|
function properHandle.write(self, data)
|
||||||
checkArg(2, data, "string")
|
checkArg(2, data, "string")
|
||||||
return component.invoke(self.address, "write", self.handle, data)
|
return component.invoke(self.address, "write", self.handle, data)
|
||||||
end
|
end
|
||||||
function properHandle.close(self)
|
function properHandle.close(self)
|
||||||
|
if buffered then
|
||||||
|
content = nil
|
||||||
|
else
|
||||||
return component.invoke(self.address, "close", self.handle)
|
return component.invoke(self.address, "close", self.handle)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
return properHandle
|
return properHandle
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user