hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/gils/tail.rv
blob: c1ca1246b1cfcf29fa435f78b8437e792091f81d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# my tail is 16 inches long
# and its between my legs

fn file_lines(path) do
  const size = fs:size(path)
  if size < 0 return :nil
  const contents = if size > 0 fs: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] <path>\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 do start = 0 end
    for index in start..lines:len() do puts("#{lines[index]}\n") end
  end
end