forked from izaya/OC-PsychOS2
41 lines
998 B
Lua
41 lines
998 B
Lua
local minitel = require "minitel"
|
|
|
|
local tA = {...}
|
|
|
|
local function parseURL(url)
|
|
local proto,addr = url:match("(.-)://(.+)")
|
|
addr = addr or url
|
|
local hp, path = addr:match("(.-)(/.*)")
|
|
hp, path = hp or addr, path or "/"
|
|
local host, port = hp:match("(.+):(.+)")
|
|
host = host or hp
|
|
return proto, host, port, path
|
|
end
|
|
|
|
local proto, host, port, path = parseURL(tA[1])
|
|
proto,port = proto or "fget", port or 70
|
|
local fname, rtype = tA[2] or "-", tA[3] or "t"
|
|
|
|
local sock = minitel.open(host,port)
|
|
local f = nil
|
|
if fname ~= "-" then
|
|
f = io.open(fname,"w")
|
|
if not f then error("couldn't open file for writing") end
|
|
else
|
|
f = io.open(os.getenv("t"))
|
|
f.close = function() end
|
|
end
|
|
if not sock then error("couldn't open connection to host") end
|
|
sock:write(string.format("%s%s\n",rtype,path))
|
|
local rtype, buf = "", ""
|
|
repeat
|
|
coroutine.yield()
|
|
rtype = sock:read(1)
|
|
until rtype ~= ""
|
|
repeat
|
|
coroutine.yield()
|
|
buf = sock:read("*a")
|
|
f:write(buf)
|
|
until sock.state == "closed" and buf == ""
|
|
f:close()
|