hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/kernel/shell.rv
blob: 562f3c465862b5e3d4d4c957092416c5763cc378 (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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# this is just a simple prompt to test that shit is working
fn cmd_help() puts("commands: help, clear, bars, echo <text>, time, run, zoom in|out\n")

fn zoom_by(d) do
  let s = con.scale + d
  if s < 1 do s = 1 end
  if s > 6 do s = 6 end
  con.scale = s
  cmd_clear()
  puts("zoom " ~ s ~ "x\n")
end

fn cmd_zoom(words) do
  const dir = if words:len() > 1 words[1] else ""
  if dir == "in" do zoom_by(1) end
  else if dir == "out" do zoom_by(-1) end
  else do puts("usage: zoom in | zoom out\n") end
end

fn cmd_clear() do
  fill_rect(0, 0, fb_width(), fb_height(), CON_BG)
  con.col = 0
  con.row = 0
end

fn cmd_bars() do
  const bars = { 0xff5555, 0xffaa00, 0xffff55, 0x55ff55, 0x55ffff, 0x5599ff, 0xaa55ff, 0xffffff }
  const bw = fb_width() / 8
  for i in 0..8 do fill_rect(i * bw, 0, bw, 40, bars[i]) end
  puts("painted 8 bars from revo\n")
end

fn bcd(b) (b shr 4) * 10 + (b band 15)
fn rtc(reg) do
  outb(0x70, reg)
  inb(0x71)
end
fn cmd_time() puts("utc " ~ bcd(rtc(4)) ~ ":" ~ bcd(rtc(2)) ~ ":" ~ bcd(rtc(0)) ~ "\n")

fn run(line) do
  const words = line:split(" ")
  const cmd = words[0]
  if cmd == "help" do cmd_help() end
  else if cmd == "clear" do cmd_clear() end
  else if cmd == "bars" do cmd_bars() end
  else if cmd == "time" do cmd_time() end
  else if cmd == "run" do cmd_run() end
  else if cmd == "zoom" do cmd_zoom(words) end
  else if cmd == "echo" do
    if line:len() > 5 puts(line:sub(5, line:len() - 5) ~ "\n") else puts("\n")
  end
  else if line:len() == 0 do :nil end
  else do puts("unknown command: " ~ cmd ~ "\n") end
  puts("> ")
end