Monadoro-0.2.0.0: src/FullScreen.lhs
> module FullScreen where
>
> import Timer (secToTimestamp)
> import Control.Concurrent (threadDelay)
> import UI.NCurses
> import System.IO (
> hFlush,
> stdout)
> import System.Console.ANSI (clearLine,
> clearFromCursorToScreenEnd,
> setCursorColumn,
> hideCursor,
> showCursor,
> saveCursor,
> restoreCursor,
> )
>
> main :: IO ()
> main = ncurses_clock
>
> wait_seconds :: Int -> IO()
> wait_seconds 0 = do
> putStr ""
> wait_seconds n = do
> restoreCursor
> putStr $ secToTimestamp $ n - 1
> hFlush stdout
> delay 1
> wait_seconds $ n - 1
> delay :: Int -> IO()
> delay n = del n
>
> del :: Int -> IO()
> del n = do
> threadDelay $ n * 1000 * 1000
> ncurses_clock :: IO ()
> ncurses_clock = runCurses $ do
> setEcho False
> w <- defaultWindow
> updateWindow w $ do
> moveCursor 1 10
> drawString "Hello world!"
> moveCursor 3 10
> drawString "(press q to quit)"
> moveCursor 0 0
> render
> waitFor w (\ev -> ev == EventCharacter 'q' || ev == EventCharacter 'Q')
>
> waitFor :: Window -> (Event -> Bool) -> Curses ()
> waitFor w p = loop where
> loop = do
> ev <- getEvent w Nothing
> case ev of
> Nothing -> loop
> Just ev' -> if p ev' then return () else loop
>