local cgi={} cgi.newline=false function cgi.tag(key,value,attrib) local ret_str="<"..key if (attrib) then for a_key,a_val in pairs(attrib) do ret_str=ret_str.." "..a_key..'="'..a_val..'"' end end ret_str=ret_str..">" if cgi.newline==true then ret_str=ret_str.."\n" end ret_str=ret_str..value if cgi.newline==true then ret_str=ret_str.."\n" end ret_str=ret_str.."" if cgi.newline==true then ret_str=ret_str.."\n" end return ret_str end local function get_phrase(code) local cases={ [200]="OK", [401]="Unauthorized", } if(cases[code]) then return cases[code] else return "" end end function cgi.header(code,headers) print("Status: "..code.." "..get_phrase(code)) for h_name,header in pairs(headers) do print(h_name..": "..header) end print() end function cgi.render(content,headers,code) headers["Content-Length"] = tostring(content:len()+1) cgi.header(code,headers) print(content); end _G.m = cgi.tag return cgi