# my tail is 16 inches long # and its between my legs fn file_lines(path) -> table | :nil do const size = vfs:size(path) if (size < 0) return :nil const contents = if (size > 0) vfs:read_bytes(path, 0, size) else "" const raw_lines = contents:split("\n") let result = {} for index in 0..raw_lines:len() do if (index < raw_lines:len() - 1 or raw_lines[index]:len() > 0) result:push(raw_lines[index]) end return result end const context = env.ctx if context.argv:len() < 2 do fail("usage: tail [n] \n") end else do let limit = 10 let path_arg = context.argv[1] if context.argv:len() >= 3 and parse_pid(context.argv[1]) >= 0 do limit = parse_pid(context.argv[1]) path_arg = context.argv[2] end const lines = file_lines(expand_path(path_arg)) if lines == :nil do fail("tail: no such file\n") end else do let start = lines:len() - limit if (start < 0) start = 0 for index in start..lines:len() do puts("#{lines[index]}\n") end end end