home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2004 July
/
CHIP_CD_2004-07.iso
/
software
/
nncron_hit
/
files
/
nncron189.exe
/
plugins
/
winlirc.spf
< prev
Wrap
Text File
|
2003-06-26
|
3KB
|
128 lines
\ File: winlirc.spf
\ Author: Nicholas Nemtsev
\ Date: 08.04.03
\ Modified: 17.04.03 (LIRC-TASK waits winlirc start)
\ Description: Monitors remote control commands from winlirc (http://winlirc.sourceforge.net/).
\ Words: WatchLirc:
\ Usage: WatchLirc: <command-pattern>
\ <command-pattern> is wild card or regexp
\ Example:
\ * <%
\ * : SEND2WINAMP ( n -- )
\ * WIN-EXIST: "Winamp v1.x"
\ * IF
\ * 0 SWAP 273 WIN-HWND SendMessageA DROP
\ * ELSE
\ * DROP
\ * THEN
\ * ;
\ * %>
\ * #( play-winamp
\ * WatchLirc: play
\ * Action:
\ * 40045 SEND2WINAMP
\ * )#
\ * Others WinAmp's codes:
\ * Next track button 40048
\ * Play button 40045
\ * Pause/Unpause button 40046
\ * Stop button 40047
\ * ...
DECIMAL
8765 CONSTANT LIRC-PORT
VARIABLE LIRC-LIST
: WATCH-LIRC-START ( a u -- h )
GLOBAL WATCH-OBJECT-S! LOCAL
GLOBAL CUR-WATCH LIRC-LIST AppendNode LOCAL
0
;
: WatchLirc:
POSTPONE WATCH:
eval-string, POSTPONE WATCH-LIRC-START
POSTPONE END-WATCH
; IMMEDIATE
SocketLine POINTER sLIRC \ socket
CREATE LIRC-WORD 64 ALLOT
: LIRC-READ ( -- )
BEGIN
[NONAME sLIRC ReadLine NONAME] CATCH ?DUP
IF
DUP 10060 ( WSAETIMEDOUT) =
IF DROP FALSE ELSE THROW THEN
ELSE TRUE THEN
UNTIL
DBG( ." LIRC: " 2DUP TYPE )
LIRC-WORD 0!
<TIB
NextWord 2DROP
NextWord 2DROP
NextWord LIRC-WORD ZPLACE
TIB>
;
: LIRC-FIT? { w -- ? }
LIRC-WORD ASCIIZ>
w WATCH-OBJECT @ ASCIIZ>
WC|RE-COMPARE
;
: LIRC-LAUNCH ( w -- )
WATCH-CRON-NODE @ SP@ LAUNCH DROP
;
: LIRC-TEST
[NONAME
NodeValue DUP LIRC-FIT?
IF
LIRC-LAUNCH
ELSE DROP THEN
NONAME] LIRC-LIST DoList
;
:NONAME
DBG( ." LIRC start" CR )
SocketLine NEW TO sLIRC
[NONAME
S" 127.0.0.1" sLIRC Addr!
LIRC-PORT sLIRC vPort !
sLIRC Create
\ sLIRC Connect
BEGIN
sLIRC IPAddr sLIRC vPort @ sLIRC Sock ConnectSocket DUP
10061 = \ WSAECONNREFUSED Connection refused.
WHILE
DROP
10000 PAUSE
REPEAT
THROW
BEGIN
LIRC-READ
LIRC-TEST
AGAIN
NONAME] CATCH
DBG( ." LIRC stop=" DUP . CR )
DROP
; TASK: LIRC-TASK
WARNING @ WARNING 0!
: AfterCrontabLoading
LIRC-LIST @ 0<>
IF
LIRC-TASK START
THEN
AfterCrontabLoading
;
: BeforeCrontabLoading
LIRC-LIST @ 0<>
IF
sLIRC Close
GLOBAL LIRC-LIST FreeList LOCAL
LIRC-LIST 0!
THEN
BeforeCrontabLoading
;
WARNING !