packages feed

miniplex-0.2.1: bin/plox-write.hs

import qualified System.Miniplex as MP
import System.Environment
import System.Exit
import System.IO
import System.Posix.Process
import System.Posix.Signals

usage :: IO ()
usage = do
    self <- getProgName
    hPutStr stderr $ "Usage: " ++ self ++ " TAG\n"
    exitFailure

main :: IO ()
main = do
    installHandler floatingPointException (Catch (raiseSignal internalAbort)) Nothing
    installHandler openEndedPipe Ignore Nothing
    args <- getArgs
    case args of
        [tag] -> MP.withSink tag service
        _ -> usage

service :: MP.Sink -> IO ()
service s = do
    mapM_ (\x -> installHandler x (Catch (hdl x)) Nothing) signals
    t <- getContents
    mapM_ (MP.write s) (lines t)
    where
    hdl sig = do
        MP.destroy s
        installHandler sig Default Nothing
        raiseSignal sig
        exitImmediately (ExitFailure 127)
    signals = [sigINT, sigALRM, sigTERM, sigUSR1, sigUSR2]