diff --git a/extra/key-logger/authors.txt b/extra/key-logger/authors.txt new file mode 100644 index 0000000000..7c1b2f2279 --- /dev/null +++ b/extra/key-logger/authors.txt @@ -0,0 +1 @@ +Doug Coleman diff --git a/extra/key-logger/deploy.factor b/extra/key-logger/deploy.factor new file mode 100644 index 0000000000..f2651642fd --- /dev/null +++ b/extra/key-logger/deploy.factor @@ -0,0 +1,15 @@ +USING: tools.deploy.config ; +H{ + { deploy-name "key-logger" } + { deploy-ui? f } + { deploy-c-types? f } + { deploy-console? f } + { deploy-unicode? f } + { "stop-after-last-window?" t } + { deploy-io 3 } + { deploy-reflection 1 } + { deploy-word-props? f } + { deploy-math? t } + { deploy-threads? t } + { deploy-word-defs? f } +} diff --git a/extra/key-logger/key-logger.factor b/extra/key-logger/key-logger.factor new file mode 100644 index 0000000000..471c86cbfd --- /dev/null +++ b/extra/key-logger/key-logger.factor @@ -0,0 +1,35 @@ +! Copyright (C) 2010 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: accessors alarms bit-arrays calendar game.input io +io.binary io.encodings.binary io.files kernel literals math +namespaces system threads ; +IN: key-logger + +CONSTANT: frequency $[ 1/30 seconds ] + +CONSTANT: path "resource:key-log.txt" + +: update-key-caps-state ( -- ) + read-keyboard keys>> + path binary [ + [ gmt unix-1970 time- duration>nanoseconds >integer ] + [ bit-array>integer ] bi* + [ 8 >be write ] bi@ flush + ] with-file-appender ; + +SYMBOL: key-logger + +: start-key-logger ( -- ) + key-logger get-global [ + [ + open-game-input + [ update-key-caps-state ] frequency every key-logger set-global + ] in-thread + ] unless ; + +: stop-key-logger ( -- ) + key-logger get-global [ stop-alarm ] when* + f key-logger set-global + close-game-input ; + +MAIN: start-key-logger