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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
#!bin/lem
--
-- This file is part of LEM, a Lua Event Machine.
-- Copyright 2011-2012 Emil Renner Berthing
--
-- LEM is free software: you can redistribute it and/or
-- modify it under the terms of the GNU General Public License as
-- published by the Free Software Foundation, either version 3 of
-- the License, or (at your option) any later version.
--
-- LEM is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with LEM. If not, see <http://www.gnu.org/licenses/>.
--
local utils = require 'lem.utils'
local streams = require 'lem.streams'
local queue = require 'lem.streams.queue'
local exit = false
local ticker = utils.sleeper()
local stdout = queue.wrap(streams.stdout)
do
local format = string.format
function queue.QOStream:printf(...)
return self:write(format(...))
end
end
-- this function just reads lines from a
-- stream and prints them to stdout
local function poll(stream, name)
repeat
local line, err = stream:read('*l')
if not line then
stdout:printf('%s: %s\n', name, err)
break
end
stdout:printf('%s: %s\n', name, line)
until line == 'quit'
exit = true
ticker:wakeup()
end
-- type 'mkfifo pipe' to create a named pipe for this script
-- and do 'cat > pipe' (in another terminal) to write to it
local pipe = assert(streams.open(arg[1] or 'pipe', 'r'))
-- spawn coroutines to read from stdin and the pipe
utils.spawn(poll, streams.stdin, 'stdin')
utils.spawn(poll, pipe, 'pipe')
do
--local out = streams.stderr
local out = stdout
local sound
repeat
if sound == 'tick\n' then
sound = 'tock\n'
else
sound = 'tick\n'
end
out:write(sound)
ticker:sleep(1.0)
until exit
end
streams.stdin:close()
pipe:close()
-- vim: syntax=lua ts=2 sw=2 noet:
|