Send clicks to monitor panel to Lua (for instance for mouse emulation)
[jpcrr.git] / lua / generic-watch.lua
blob846daf395f0cacd0882702af68a38a14b6735ee6
1 win = jpcrr.window.create("Generic watch");
3 y = 0;
5 fieldpair = function(fname, label)
6 win:create_component({gridx = 0, gridy = y, gridwidth = 1, gridheight = 1, name = fname .. "_LABEL", type = "label", text = label,
7 fill = win:HORIZONTAL(), weightx = 0, weighty = 1});
8 win:create_component({gridx = 1, gridy = y, gridwidth = 1, gridheight = 1, name = fname, type = "label", text = "N/A",
9 fill = win:HORIZONTAL(), weightx = 1, weighty = 1, insets_left = 16});
10 y = y + 1;
11 end
13 update_field = function(fname, newval)
14 win:set_text(fname, tostring(newval));
15 end
18 fieldnames = {};
19 fieldupdates = {};
20 keys = {};
21 keys.LEFT = 128 + 75;
22 keys.RIGHT = 128 + 77;
23 keys.UP = 128 + 72;
24 keys.DOWN = 128 + 80;
25 keys.SPACE = 57;
26 keys.LCTRL = 29;
27 keys.LALT = 56;
28 keys.LSHIFT = 42;
29 keys.RCTRL = 128 + 29;
30 keys.RALT = 128 + 56;
31 keys.RSHIFT = 54;
32 keys.ENTER = 28;
33 keys.ESC = 1;
35 add_field = function(name, update_fn)
36 fieldpair(name, name);
37 table.insert(fieldnames, name);
38 fieldupdates[name] = update_fn;
39 end
41 do_update = function()
42 for k, v in ipairs(fieldnames) do
43 update_field(v, fieldupdates[v]());
44 end
45 end
48 add_field("System time: ", function()
49 return tostring(jpcrr.clock_time());
50 end);
52 add_field("Frame number: ", function()
53 return tostring(jpcrr.frame_number());
54 end);
56 add_field("Keyboard queue: ", function()
57 nextchar = jpcrr.read_word(0x41A) - 30;
58 lastchar = jpcrr.read_word(0x41C) - 30;
59 if lastchar < nextchar then
60 lastchar = lastchar + 32;
61 end
62 return tostring((lastchar-nextchar)/2);
63 end);
65 for k, v in pairs(keys) do
66 local v2 = v;
67 add_field("Keyboard " .. k .. ":", function()
68 if jpcrr.keypressed(v) then
69 return "Pressed";
70 else
71 return "Released";
72 end
73 end);
74 end
76 fmt_jaxis = function(val)
77 if not val then
78 return "<not present>";
79 else
80 return tostring(val);
81 end
82 end
84 fmt_jbutton = function(val)
85 if val == nil then
86 return "<not present>";
87 elseif val then
88 return "held";
89 else
90 return "released";
91 end
92 end
94 add_field("Joystick axis X1: ", function() return fmt_jaxis(hA); end);
95 add_field("Joystick axis Y1: ", function() return fmt_jaxis(hB); end);
96 add_field("Joystick axis X2: ", function() return fmt_jaxis(hC); end);
97 add_field("Joystick axis Y2: ", function() return fmt_jaxis(hD); end);
98 add_field("Joystick button 1-1: ", function() return fmt_jbutton(bA); end);
99 add_field("Joystick button 1-2: ", function() return fmt_jbutton(bB); end);
100 add_field("Joystick button 2-1: ", function() return fmt_jbutton(bC); end);
101 add_field("Joystick button 2-2: ", function() return fmt_jbutton(bD); end);
102 win:show();
104 while true do
105 a, b = jpcrr.wait_event();
106 if a == "lock" then
107 hA, hB, hC, hD, bA, bB, bC, bD = jpcrr.joystick_state();
108 do_update();
109 jpcrr.release_vga();
110 elseif a == "message" then
111 print("Message: " .. b);