@@ -1040,6 +1040,45 @@ function terminal_code()
10401040
10411041 return term
10421042end
1043+ function keyboard_init ()
1044+ local function onKeyDown (_ , address , char , code )
1045+ if keyboard .pressedChars [address ] then
1046+ keyboard .pressedChars [address ][char ] = true
1047+ keyboard .pressedCodes [address ][code ] = true
1048+ end
1049+ end
1050+
1051+ local function onKeyUp (_ , address , char , code )
1052+ if keyboard .pressedChars [address ] then
1053+ keyboard .pressedChars [address ][char ] = nil
1054+ keyboard .pressedCodes [address ][code ] = nil
1055+ end
1056+ end
1057+
1058+ local function onComponentAdded (_ , address , componentType )
1059+ if componentType == " keyboard" then
1060+ keyboard .pressedChars [address ] = {}
1061+ keyboard .pressedCodes [address ] = {}
1062+ end
1063+ end
1064+
1065+ local function onComponentRemoved (_ , address , componentType )
1066+ if componentType == " keyboard" then
1067+ keyboard .pressedChars [address ] = nil
1068+ keyboard .pressedCodes [address ] = nil
1069+ end
1070+ end
1071+
1072+ for address in component .list (" keyboard" , true ) do
1073+ onComponentAdded (" component_added" , address , " keyboard" )
1074+ end
1075+
1076+ event .listen (" key_down" , onKeyDown )
1077+ event .listen (" key_up" , onKeyUp )
1078+ event .listen (" component_added" , onComponentAdded )
1079+ event .listen (" component_removed" , onComponentRemoved )
1080+ end
1081+
10431082local function printProcess (...)
10441083 local args = table.pack (... )
10451084 local argstr = " "
@@ -1160,9 +1199,10 @@ text = text_code()
11601199filesystem = fs_code ()
11611200fs = filesystem
11621201keyboard = dofile (" keyboard.lua" )
1202+ keyboard_init ()
11631203term = terminal_code ()
11641204
1165- -- set up other libraries ...
1205+ -- set up other functions ...
11661206os .sleep = function (timeout )
11671207 checkArg (1 , timeout , " number" , " nil" )
11681208 local deadline = computer .uptime () + (timeout or 0 )
0 commit comments