|
- 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()
|