summaryrefslogtreecommitdiff
path: root/src/user/meminfo/meminfo.cpp
blob: 2b035a4dd4d1c05defe044b29969cae118250719 (plain) (blame)
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
#include <raleigh/w/padding.h>
#include <raleigh/w/vbox.h>
#include <raleigh/w/label.h>

#include <raleigh/runtime.h>
#include <raleigh/window.h>

#include <pland/syscall.h>
#include <knob/format.h>
#include <pland/pcrt.h>

using namespace raleigh;

label *kmem;
label *umem;

void refresh(window &w) {
  char *const kstr = format("kernel memory free: %uk", _kernel_dynamic_area_left() * 4);
  char *const ustr = format("userspace memory free: %uk / %uk", _total_userspace_left() * 4, _total_userspace_size() * 4);

  kmem->change_value(kstr);
  umem->change_value(ustr);

  free_block(kstr);
  free_block(ustr);
}

void main() {
  kmem = new label("");
  umem = new label("");
  label msg("press Alt+F4 to quit, or F5 to refresh");

  padding pkmem(*kmem, 1);
  padding pumem(*umem, 1);
  padding pmsg(msg, 1);

  dllist<widget &> ll;
  ll.add_front(pmsg);
  ll.add_front(pumem);
  ll.add_front(pkmem);
  vbox box(ll);

  padding pbox(box, 3);
  window w(pbox, RGB(bf, bf, bf), (bool (*)(window &))&__pcrt_quit);
  w.add_keybind((struct key_packet){.key_id = key_packet::KEY_F5, .modifiers = key_packet::NO_MODS}, &refresh);

  refresh(w);

  w.show();
  start_runtime();
}