Advertisement
CapsAdmin

Untitled

Feb 13th, 2013
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.19 KB | None | 0 0
  1. do -- _G
  2.     function loadstring(str)
  3.         local var = CompileString(str, "loadstring", false)
  4.         if type(var) == "string" then
  5.             return nil, var, 2
  6.         end
  7.         return var
  8.     end
  9.        
  10.     function loadfile(str)
  11.         if not file.Exists(str, "GAME") then
  12.             return nil, str .. ": No such file", 2
  13.         end
  14.         local str = file.Read(str, "GAME")
  15.         return loadstring(str)
  16.     end
  17.    
  18.     function dofile(filename)
  19.         local f = assert(loadfile(filename))
  20.         return f()
  21.     end
  22. end
  23.  
  24. do -- require
  25.     local stdlibs =
  26.     {
  27.         table = table,
  28.         math = math,
  29.         string = string,
  30.         debug = debug,
  31.         io = io,
  32.         -- fill the rest
  33.     }
  34.        
  35.     old_gmod_require = old_gmod_require or require
  36.    
  37.     function require(str, ...)
  38.         local args = {old_gmod_require(str, ...)}
  39.        
  40.         if args[1] == nil then
  41.             return stdlibs[str]
  42.         end
  43.        
  44.         return unpack(args)
  45.     end
  46. end
  47.  
  48. do -- os
  49.     os = os or {}
  50.    
  51.     function os.getenv(var)
  52.         var = tostring(var):lower()
  53.        
  54.         if var == "path" then
  55.             return (util.RelativePathToFull("lua/includes/init.lua"):gsub("\\", "/"):gsub("lua/includes/init.lua", ""))
  56.         end
  57.        
  58.         if var == "username" then
  59.             return LocalPlayer():Nick()
  60.         end
  61.     end
  62.    
  63.     function os.setlocale(...)
  64.         print("os.setlocale: ", ...)
  65.     end
  66.    
  67.     function os.execute(...)
  68.         print("os.execute: ", ...)
  69.     end
  70.    
  71.     function os.exit(...)
  72.         print("os.exit: ", ...)
  73.     end
  74.    
  75.     function os.remove(filename)
  76.         if file.Exists(filename, "DATA") then
  77.             file.Delete(filename, "DATA")
  78.             return true
  79.         end
  80.        
  81.         return nil, "data/" .. filename .. ": No such file or directory", 2
  82.     end
  83.    
  84.     function os.rename(a, b)
  85.         if file.Exists(filename, "DATA") then
  86.             local str = file.Read(a, "DATA")
  87.             file.Delete(b, "DATA")
  88.             file.Write(b, str, "DATA")
  89.             return true
  90.         end
  91.        
  92.         return nil, "data/" .. a .. ": No such file or directory", 2
  93.     end
  94.    
  95.     function os.tmpname()
  96.         return "data/temp/" .. util.CRC(RealTime()) .. ".txt"
  97.     end
  98. end
  99.  
  100. do -- io
  101.     io = io or {}
  102.    
  103.     local META = {}
  104.     META.__index = META
  105.    
  106.     function META:__tostring()
  107.         return ("file (%p)"):format(self)
  108.     end
  109.    
  110.     function META:write(...)
  111.        
  112.         local str = ""
  113.        
  114.         for i = 1, select("#", ...) do
  115.             str = str .. tostring(select(i, ...))
  116.         end
  117.        
  118.         self.__data = str
  119.        
  120.         if self.__path:sub(0, 5) == "data/" then
  121.             file.Write(self.__path:sub(6), self.__data)
  122.         else
  123.             file.Write(self.__path, self.__data, "GAME")
  124.         end
  125.     end
  126.    
  127.     local function read(self, format)
  128.         format = format or "*line"
  129.        
  130.         if format == "*all" then
  131.             return self.__data
  132.         elseif format == "*line" then
  133.             if not self.__data:find("\n", nil, true) then
  134.                 if self.__data == "" then return nil end
  135.            
  136.                 local str = self.__data
  137.                 self.__data = ""
  138.                
  139.                 return str
  140.             else
  141.                 local val = self.__data:match("(.-)\n")
  142.                 self.__data = self.__data:match(".-\n(.+)")
  143.                
  144.                 return val
  145.             end        
  146.         elseif format == "*number" then
  147.             local str = read("*line")
  148.             if str then
  149.                 local numbers = {}
  150.                 str:gsub("(%S+)", function(str) table.insert(numbers, tonumber(str)) end)
  151.                 return unpack(numbers)
  152.             end
  153.         end
  154.     end
  155.    
  156.     function META:read(...)
  157.         local args = {...}
  158.        
  159.         for k, v in pairs(args) do 
  160.             args[k] = read(self, v) or nil
  161.         end
  162.        
  163.         return unpack(args) or nil
  164.     end
  165.    
  166.     function META:close()
  167.        
  168.     end
  169.    
  170.     function META:flush()
  171.        
  172.     end
  173.    
  174.     function META:seek()
  175.        
  176.     end
  177.    
  178.     function META:lines()
  179.        
  180.     end
  181.    
  182.     function META:setvbuf()
  183.        
  184.     end
  185.    
  186.     function io.open(filename, mode)
  187.         if not file.Exists(filename, "GAME") then
  188.             error("No such file or directory", 2)
  189.         end
  190.    
  191.         mode = mode or "r"
  192.        
  193.         local self = setmetatable({}, META)
  194.        
  195.         self.__data = file.Read(filename, "GAME")
  196.         self.__path = filename
  197.         self.__mode = mode
  198.        
  199.         return self
  200.     end
  201.    
  202.     io.stdin = setmetatable({}, META)
  203.     io.stdin.__data = ""
  204.    
  205.     io.stdout = setmetatable({}, META)
  206.     io.stdout.__data = ""
  207.    
  208.     local current_file = io.stdin
  209.    
  210.     function io.input(var)
  211.         if io.type(var) == "file" then
  212.             current_file = var
  213.         else
  214.             current_file = io.open(var)
  215.         end
  216.        
  217.         return current_file
  218.     end
  219.    
  220.     function io.type(var)
  221.         if getmetatable(var) == META then
  222.             return file
  223.         end
  224.        
  225.         return nil
  226.     end
  227.    
  228.     function io.read(...)
  229.         return current_file:read(...)
  230.     end
  231. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement