{-# LINE 1 "System/Posix/Terminal/Common.hsc" #-}{-# LANGUAGE CApiFFI #-}{-# LANGUAGE GeneralizedNewtypeDeriving #-}{-# LANGUAGE PatternSynonyms #-}{-# LANGUAGE Trustworthy #-}------------------------------------------------------------------------------- |-- Module : System.Posix.Terminal.Common-- Copyright : (c) The University of Glasgow 2002-- License : BSD-style (see the file libraries/base/LICENSE)---- Maintainer : libraries@haskell.org-- Stability : provisional-- Portability : non-portable (requires POSIX)---- POSIX Terminal support--------------------------------------------------------------------------------- see https://android.googlesource.com/platform/bionic/+/9ae59c0/libc/bionic/pathconf.c#37{-# LINE 24 "System/Posix/Terminal/Common.hsc" #-}moduleSystem.Posix.Terminal.Common(-- * Terminal support-- ** Terminal attributesTerminalAttributes ,getTerminalAttributes ,TerminalState (..),setTerminalAttributes ,CTermios,TerminalMode (..),withoutMode ,withMode ,terminalMode ,bitsPerByte ,withBits ,ControlCharacter (..),controlChar ,withCC ,withoutCC ,inputTime ,withTime ,minInput ,withMinInput ,BaudRate (..,B0 ,B50 ,B75 ,B110 ,B134 ,B150 ,B200 ,B300 ,B600 ,B1200 ,B1800 ,B2400 ,B4800 ,B9600 ,B19200 ,B38400 {-# LINE 74 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 77 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 80 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 81 "System/Posix/Terminal/Common.hsc" #-},B57600{-# LINE 83 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 86 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 87 "System/Posix/Terminal/Common.hsc" #-},B115200{-# LINE 89 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 90 "System/Posix/Terminal/Common.hsc" #-},B230400{-# LINE 92 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 93 "System/Posix/Terminal/Common.hsc" #-},B460800{-# LINE 95 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 96 "System/Posix/Terminal/Common.hsc" #-},B500000{-# LINE 98 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 99 "System/Posix/Terminal/Common.hsc" #-},B576000{-# LINE 101 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 102 "System/Posix/Terminal/Common.hsc" #-},B921600{-# LINE 104 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 105 "System/Posix/Terminal/Common.hsc" #-},B1000000{-# LINE 107 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 108 "System/Posix/Terminal/Common.hsc" #-},B1152000{-# LINE 110 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 111 "System/Posix/Terminal/Common.hsc" #-},B1500000{-# LINE 113 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 114 "System/Posix/Terminal/Common.hsc" #-},B2000000{-# LINE 116 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 117 "System/Posix/Terminal/Common.hsc" #-},B2500000{-# LINE 119 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 120 "System/Posix/Terminal/Common.hsc" #-},B3000000{-# LINE 122 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 123 "System/Posix/Terminal/Common.hsc" #-},B3500000{-# LINE 125 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 126 "System/Posix/Terminal/Common.hsc" #-},B4000000{-# LINE 128 "System/Posix/Terminal/Common.hsc" #-}),inputSpeed ,withInputSpeed ,outputSpeed ,withOutputSpeed ,-- ** Terminal operationssendBreak ,drainOutput ,QueueSelector (..),discardData ,FlowAction (..),controlFlow ,-- ** Process groupsgetTerminalProcessGroupID ,setTerminalProcessGroupID ,-- ** Testing a file descriptorqueryTerminal ,)whereimportData.BitsimportData.CharimportForeign.C.Error(throwErrnoIfMinus1,throwErrnoIfMinus1_)importForeign.C.TypesimportForeign.ForeignPtr(ForeignPtr,withForeignPtr,mallocForeignPtrBytes)importForeign.Marshal.Utils(copyBytes)importForeign.Ptr(Ptr,plusPtr)importForeign.Storable(Storable(..))importSystem.IO.Unsafe(unsafePerformIO)importSystem.Posix.TypesimportSystem.Posix.Internals(CTermios){-# LINE 169 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 171 "System/Posix/Terminal/Common.hsc" #-}-- ------------------------------------------------------------------------------- Terminal attributesnewtypeTerminalAttributes =TerminalAttributes (ForeignPtrCTermios)makeTerminalAttributes ::ForeignPtrCTermios->TerminalAttributes makeTerminalAttributes :: ForeignPtr CTermios -> TerminalAttributes
makeTerminalAttributes =ForeignPtr CTermios -> TerminalAttributes
TerminalAttributes withTerminalAttributes ::TerminalAttributes ->(PtrCTermios->IOa )->IOa withTerminalAttributes :: forall a. TerminalAttributes -> (Ptr CTermios -> IO a) -> IO a
withTerminalAttributes (TerminalAttributes ForeignPtr CTermios
termios )=ForeignPtr CTermios -> (Ptr CTermios -> IO a) -> IO a
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtrForeignPtr CTermios
termios {-# LINE 188 "System/Posix/Terminal/Common.hsc" #-}dataTerminalMode -- input flags=InterruptOnBreak -- ^ @BRKINT@ - Signal interrupt on break|MapCRtoLF -- ^ @ICRNL@ - Map CR to NL on input|IgnoreBreak -- ^ @IGNBRK@ - Ignore break condition|IgnoreCR -- ^ @IGNCR@ - Ignore CR|IgnoreParityErrors -- ^ @IGNPAR@ - Ignore characters with parity errors|MapLFtoCR -- ^ @INLCR@ - Map NL to CR on input|CheckParity -- ^ @INPCK@ - Enable input parity check|StripHighBit -- ^ @ISTRIP@ - Strip character|RestartOnAny -- ^ @IXANY@ - Enable any character to restart output|StartStopInput -- ^ @IXOFF@ - Enable start/stop input control|StartStopOutput -- ^ @IXON@ - Enable start/stop output control|MarkParityErrors -- ^ @PARMRK@ - Mark parity errors-- output flags|ProcessOutput -- ^ @OPOST@ - Post-process output|MapLFtoCRLF -- ^ @ONLCR@ - (XSI) Map NL to CR-NL on output---- @since 2.8.0.0|OutputMapCRtoLF -- ^ @OCRNL@ - (XSI) Map CR to NL on output---- @since 2.8.0.0|NoCRAtColumnZero -- ^ @ONOCR@ - (XSI) No CR output at column 0---- @since 2.8.0.0|ReturnMeansLF -- ^ @ONLRET@ - (XSI) NL performs CR function---- @since 2.8.0.0{-# LINE 220 "System/Posix/Terminal/Common.hsc" #-}|TabDelayMask0-- ^ @TABDLY(TAB0)@ - (XSI) Select horizontal-tab delays: type 0---- @since 2.8.0.0{-# LINE 224 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 225 "System/Posix/Terminal/Common.hsc" #-}|TabDelayMask3-- ^ @TABDLY(TAB3)@ - (XSI) Select horizontal-tab delays: type 3---- @since 2.8.0.0{-# LINE 229 "System/Posix/Terminal/Common.hsc" #-}-- control flags|LocalMode -- ^ @CLOCAL@ - Ignore modem status lines|ReadEnable -- ^ @CREAD@ - Enable receiver|TwoStopBits -- ^ @CSTOPB@ - Send two stop bits, else one|HangupOnClose -- ^ @HUPCL@ - Hang up on last close|EnableParity -- ^ @PARENB@ - Parity enable|OddParity -- ^ @PARODD@ - Odd parity, else even-- local modes|EnableEcho -- ^ @ECHO@ - Enable echo|EchoErase -- ^ @ECHOE@ - Echo erase character as error-correcting backspace|EchoKill -- ^ @ECHOK@ - Echo KILL|EchoLF -- ^ @ECHONL@ - Echo NL|ProcessInput -- ^ @ICANON@ - Canonical input (erase and kill processing)|ExtendedFunctions -- ^ @IEXTEN@ - Enable extended input character processing|KeyboardInterrupts -- ^ @ISIG@ - Enable signals|NoFlushOnInterrupt -- ^ @NOFLSH@ - Disable flush after interrupt or quit|BackgroundWriteInterrupt -- ^ @TOSTOP@ - Send @SIGTTOU@ for background output{-# LINE 276 "System/Posix/Terminal/Common.hsc" #-}withoutMode ::TerminalAttributes ->TerminalMode ->TerminalAttributes withoutMode :: TerminalAttributes -> TerminalMode -> TerminalAttributes
withoutMode TerminalAttributes
termios TerminalMode
InterruptOnBreak =CTcflag -> TerminalAttributes -> TerminalAttributes
clearInputFlag (CTcflag
2)TerminalAttributes
termios {-# LINE 279 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosMapCRtoLF=clearInputFlag(256)termios{-# LINE 280 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosIgnoreBreak=clearInputFlag(1)termios{-# LINE 281 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosIgnoreCR=clearInputFlag(128)termios{-# LINE 282 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosIgnoreParityErrors=clearInputFlag(4)termios{-# LINE 283 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosMapLFtoCR=clearInputFlag(64)termios{-# LINE 284 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosCheckParity=clearInputFlag(16)termios{-# LINE 285 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosStripHighBit=clearInputFlag(32)termios{-# LINE 286 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosRestartOnAny=clearInputFlag(2048)termios{-# LINE 287 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosStartStopInput=clearInputFlag(4096)termios{-# LINE 288 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosStartStopOutput=clearInputFlag(1024)termios{-# LINE 289 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosMarkParityErrors=clearInputFlag(8)termios{-# LINE 290 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosProcessOutput=clearOutputFlag(1)termios{-# LINE 291 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosMapLFtoCRLF=clearOutputFlag(4)termios{-# LINE 292 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosOutputMapCRtoLF=clearOutputFlag(8)termios{-# LINE 293 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosNoCRAtColumnZero=clearOutputFlag(16)termios{-# LINE 294 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosReturnMeansLF=clearOutputFlag(32)termios{-# LINE 295 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 296 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosTabDelayMask0=clearOutputFlag(0)termios{-# LINE 297 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 298 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 299 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosTabDelayMask3=clearOutputFlag(6144)termios{-# LINE 300 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 301 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosLocalMode=clearControlFlag(2048)termios{-# LINE 302 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosReadEnable=clearControlFlag(128)termios{-# LINE 303 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosTwoStopBits=clearControlFlag(64)termios{-# LINE 304 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosHangupOnClose=clearControlFlag(1024)termios{-# LINE 305 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosEnableParity=clearControlFlag(256)termios{-# LINE 306 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosOddParity=clearControlFlag(512)termios{-# LINE 307 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosEnableEcho=clearLocalFlag(8)termios{-# LINE 308 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosEchoErase=clearLocalFlag(16)termios{-# LINE 309 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosEchoKill=clearLocalFlag(32)termios{-# LINE 310 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosEchoLF=clearLocalFlag(64)termios{-# LINE 311 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosProcessInput=clearLocalFlag(2)termios{-# LINE 312 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosExtendedFunctions=clearLocalFlag(32768)termios{-# LINE 313 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosKeyboardInterrupts=clearLocalFlag(1)termios{-# LINE 314 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosNoFlushOnInterrupt=setLocalFlag(128)termios{-# LINE 315 "System/Posix/Terminal/Common.hsc" #-}withoutModetermiosBackgroundWriteInterrupt=clearLocalFlag(256)termios{-# LINE 316 "System/Posix/Terminal/Common.hsc" #-}withMode ::TerminalAttributes ->TerminalMode ->TerminalAttributes withMode :: TerminalAttributes -> TerminalMode -> TerminalAttributes
withMode TerminalAttributes
termios TerminalMode
InterruptOnBreak =CTcflag -> TerminalAttributes -> TerminalAttributes
setInputFlag (CTcflag
2)TerminalAttributes
termios {-# LINE 319 "System/Posix/Terminal/Common.hsc" #-} withModetermiosMapCRtoLF=setInputFlag(256)termios{-# LINE 320 "System/Posix/Terminal/Common.hsc" #-} withModetermiosIgnoreBreak=setInputFlag(1)termios{-# LINE 321 "System/Posix/Terminal/Common.hsc" #-} withModetermiosIgnoreCR=setInputFlag(128)termios{-# LINE 322 "System/Posix/Terminal/Common.hsc" #-} withModetermiosIgnoreParityErrors=setInputFlag(4)termios{-# LINE 323 "System/Posix/Terminal/Common.hsc" #-} withModetermiosMapLFtoCR=setInputFlag(64)termios{-# LINE 324 "System/Posix/Terminal/Common.hsc" #-} withModetermiosCheckParity=setInputFlag(16)termios{-# LINE 325 "System/Posix/Terminal/Common.hsc" #-} withModetermiosStripHighBit=setInputFlag(32)termios{-# LINE 326 "System/Posix/Terminal/Common.hsc" #-} withModetermiosRestartOnAny=setInputFlag(2048)termios{-# LINE 327 "System/Posix/Terminal/Common.hsc" #-} withModetermiosStartStopInput=setInputFlag(4096)termios{-# LINE 328 "System/Posix/Terminal/Common.hsc" #-} withModetermiosStartStopOutput=setInputFlag(1024)termios{-# LINE 329 "System/Posix/Terminal/Common.hsc" #-} withModetermiosMarkParityErrors=setInputFlag(8)termios{-# LINE 330 "System/Posix/Terminal/Common.hsc" #-} withModetermiosProcessOutput=setOutputFlag(1)termios{-# LINE 331 "System/Posix/Terminal/Common.hsc" #-} withModetermiosMapLFtoCRLF=setOutputFlag(4)termios{-# LINE 332 "System/Posix/Terminal/Common.hsc" #-} withModetermiosOutputMapCRtoLF=setOutputFlag(8)termios{-# LINE 333 "System/Posix/Terminal/Common.hsc" #-} withModetermiosNoCRAtColumnZero=setOutputFlag(16)termios{-# LINE 334 "System/Posix/Terminal/Common.hsc" #-} withModetermiosReturnMeansLF=setOutputFlag(32)termios{-# LINE 335 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 336 "System/Posix/Terminal/Common.hsc" #-} withModetermiosTabDelayMask0=setOutputFlag(0)termios{-# LINE 337 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 338 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 339 "System/Posix/Terminal/Common.hsc" #-} withModetermiosTabDelayMask3=setOutputFlag(6144)termios{-# LINE 340 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 341 "System/Posix/Terminal/Common.hsc" #-} withModetermiosLocalMode=setControlFlag(2048)termios{-# LINE 342 "System/Posix/Terminal/Common.hsc" #-} withModetermiosReadEnable=setControlFlag(128)termios{-# LINE 343 "System/Posix/Terminal/Common.hsc" #-} withModetermiosTwoStopBits=setControlFlag(64)termios{-# LINE 344 "System/Posix/Terminal/Common.hsc" #-} withModetermiosHangupOnClose=setControlFlag(1024)termios{-# LINE 345 "System/Posix/Terminal/Common.hsc" #-} withModetermiosEnableParity=setControlFlag(256)termios{-# LINE 346 "System/Posix/Terminal/Common.hsc" #-} withModetermiosOddParity=setControlFlag(512)termios{-# LINE 347 "System/Posix/Terminal/Common.hsc" #-} withModetermiosEnableEcho=setLocalFlag(8)termios{-# LINE 348 "System/Posix/Terminal/Common.hsc" #-} withModetermiosEchoErase=setLocalFlag(16)termios{-# LINE 349 "System/Posix/Terminal/Common.hsc" #-} withModetermiosEchoKill=setLocalFlag(32)termios{-# LINE 350 "System/Posix/Terminal/Common.hsc" #-} withModetermiosEchoLF=setLocalFlag(64)termios{-# LINE 351 "System/Posix/Terminal/Common.hsc" #-} withModetermiosProcessInput=setLocalFlag(2)termios{-# LINE 352 "System/Posix/Terminal/Common.hsc" #-} withModetermiosExtendedFunctions=setLocalFlag(32768)termios{-# LINE 353 "System/Posix/Terminal/Common.hsc" #-} withModetermiosKeyboardInterrupts=setLocalFlag(1)termios{-# LINE 354 "System/Posix/Terminal/Common.hsc" #-} withModetermiosNoFlushOnInterrupt=clearLocalFlag(128)termios{-# LINE 355 "System/Posix/Terminal/Common.hsc" #-} withModetermiosBackgroundWriteInterrupt=setLocalFlag(256)termios{-# LINE 356 "System/Posix/Terminal/Common.hsc" #-}terminalMode ::TerminalMode ->TerminalAttributes ->BoolterminalMode :: TerminalMode -> TerminalAttributes -> Bool
terminalMode TerminalMode
InterruptOnBreak =CTcflag -> TerminalAttributes -> Bool
testInputFlag (CTcflag
2){-# LINE 359 "System/Posix/Terminal/Common.hsc" #-}terminalModeMapCRtoLF=testInputFlag(256){-# LINE 360 "System/Posix/Terminal/Common.hsc" #-}terminalModeIgnoreBreak=testInputFlag(1){-# LINE 361 "System/Posix/Terminal/Common.hsc" #-}terminalModeIgnoreCR=testInputFlag(128){-# LINE 362 "System/Posix/Terminal/Common.hsc" #-}terminalModeIgnoreParityErrors=testInputFlag(4){-# LINE 363 "System/Posix/Terminal/Common.hsc" #-}terminalModeMapLFtoCR=testInputFlag(64){-# LINE 364 "System/Posix/Terminal/Common.hsc" #-}terminalModeCheckParity=testInputFlag(16){-# LINE 365 "System/Posix/Terminal/Common.hsc" #-}terminalModeStripHighBit=testInputFlag(32){-# LINE 366 "System/Posix/Terminal/Common.hsc" #-}terminalModeRestartOnAny=testInputFlag(2048){-# LINE 367 "System/Posix/Terminal/Common.hsc" #-}terminalModeStartStopInput=testInputFlag(4096){-# LINE 368 "System/Posix/Terminal/Common.hsc" #-}terminalModeStartStopOutput=testInputFlag(1024){-# LINE 369 "System/Posix/Terminal/Common.hsc" #-}terminalModeMarkParityErrors=testInputFlag(8){-# LINE 370 "System/Posix/Terminal/Common.hsc" #-}terminalModeProcessOutput=testOutputFlag(1){-# LINE 371 "System/Posix/Terminal/Common.hsc" #-}terminalModeMapLFtoCRLF=testOutputFlag(4){-# LINE 372 "System/Posix/Terminal/Common.hsc" #-}terminalModeOutputMapCRtoLF=testOutputFlag(8){-# LINE 373 "System/Posix/Terminal/Common.hsc" #-}terminalModeNoCRAtColumnZero=testOutputFlag(16){-# LINE 374 "System/Posix/Terminal/Common.hsc" #-}terminalModeReturnMeansLF=testOutputFlag(32){-# LINE 375 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 376 "System/Posix/Terminal/Common.hsc" #-}terminalModeTabDelayMask0=testOutputFlag(0){-# LINE 377 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 378 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 379 "System/Posix/Terminal/Common.hsc" #-}terminalModeTabDelayMask3=testOutputFlag(6144){-# LINE 380 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 381 "System/Posix/Terminal/Common.hsc" #-}terminalModeLocalMode=testControlFlag(2048){-# LINE 382 "System/Posix/Terminal/Common.hsc" #-}terminalModeReadEnable=testControlFlag(128){-# LINE 383 "System/Posix/Terminal/Common.hsc" #-}terminalModeTwoStopBits=testControlFlag(64){-# LINE 384 "System/Posix/Terminal/Common.hsc" #-}terminalModeHangupOnClose=testControlFlag(1024){-# LINE 385 "System/Posix/Terminal/Common.hsc" #-}terminalModeEnableParity=testControlFlag(256){-# LINE 386 "System/Posix/Terminal/Common.hsc" #-}terminalModeOddParity=testControlFlag(512){-# LINE 387 "System/Posix/Terminal/Common.hsc" #-}terminalModeEnableEcho=testLocalFlag(8){-# LINE 388 "System/Posix/Terminal/Common.hsc" #-}terminalModeEchoErase=testLocalFlag(16){-# LINE 389 "System/Posix/Terminal/Common.hsc" #-}terminalModeEchoKill=testLocalFlag(32){-# LINE 390 "System/Posix/Terminal/Common.hsc" #-}terminalModeEchoLF=testLocalFlag(64){-# LINE 391 "System/Posix/Terminal/Common.hsc" #-}terminalModeProcessInput=testLocalFlag(2){-# LINE 392 "System/Posix/Terminal/Common.hsc" #-}terminalModeExtendedFunctions=testLocalFlag(32768){-# LINE 393 "System/Posix/Terminal/Common.hsc" #-}terminalModeKeyboardInterrupts=testLocalFlag(1){-# LINE 394 "System/Posix/Terminal/Common.hsc" #-}terminalModeNoFlushOnInterrupt=not.testLocalFlag(128){-# LINE 395 "System/Posix/Terminal/Common.hsc" #-}terminalModeBackgroundWriteInterrupt=testLocalFlag(256){-# LINE 396 "System/Posix/Terminal/Common.hsc" #-}bitsPerByte ::TerminalAttributes ->IntbitsPerByte :: TerminalAttributes -> Int
bitsPerByte TerminalAttributes
termios =IO Int -> Int
forall a. IO a -> a
unsafePerformIO(IO Int -> Int) -> IO Int -> Int
forall a b. (a -> b) -> a -> b
$doTerminalAttributes -> (Ptr CTermios -> IO Int) -> IO Int
forall a. TerminalAttributes -> (Ptr CTermios -> IO a) -> IO a
withTerminalAttributes TerminalAttributes
termios ((Ptr CTermios -> IO Int) -> IO Int)
-> (Ptr CTermios -> IO Int) -> IO Int
forall a b. (a -> b) -> a -> b
$\Ptr CTermios
p ->doCTcflag
cflag <-((\Ptr CTermios
hsc_ptr ->Ptr CTermios -> Int -> IO CTcflag
forall b. Ptr b -> Int -> IO CTcflag
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOffPtr CTermios
hsc_ptr Int
8))Ptr CTermios
p {-# LINE 401 "System/Posix/Terminal/Common.hsc" #-}return$!(word2Bits(cflag.&.(48))){-# LINE 402 "System/Posix/Terminal/Common.hsc" #-}whereword2Bits ::CTcflag->Intword2Bits :: CTcflag -> Int
word2Bits CTcflag
x =ifCTcflag
x CTcflag -> CTcflag -> Bool
forall a. Eq a => a -> a -> Bool
==(CTcflag
0)thenInt
5{-# LINE 406 "System/Posix/Terminal/Common.hsc" #-}elseifCTcflag
x CTcflag -> CTcflag -> Bool
forall a. Eq a => a -> a -> Bool
==(CTcflag
16)thenInt
6{-# LINE 407 "System/Posix/Terminal/Common.hsc" #-}elseifCTcflag
x CTcflag -> CTcflag -> Bool
forall a. Eq a => a -> a -> Bool
==(CTcflag
32)thenInt
7{-# LINE 408 "System/Posix/Terminal/Common.hsc" #-}elseifCTcflag
x CTcflag -> CTcflag -> Bool
forall a. Eq a => a -> a -> Bool
==(CTcflag
48)thenInt
8{-# LINE 409 "System/Posix/Terminal/Common.hsc" #-}elseInt
0withBits ::TerminalAttributes ->Int->TerminalAttributes withBits :: TerminalAttributes -> Int -> TerminalAttributes
withBits TerminalAttributes
termios Int
bits =IO TerminalAttributes -> TerminalAttributes
forall a. IO a -> a
unsafePerformIO(IO TerminalAttributes -> TerminalAttributes)
-> IO TerminalAttributes -> TerminalAttributes
forall a b. (a -> b) -> a -> b
$doTerminalAttributes
-> (Ptr CTermios -> IO ()) -> IO TerminalAttributes
forall a.
TerminalAttributes
-> (Ptr CTermios -> IO a) -> IO TerminalAttributes
withNewTermios TerminalAttributes
termios ((Ptr CTermios -> IO ()) -> IO TerminalAttributes)
-> (Ptr CTermios -> IO ()) -> IO TerminalAttributes
forall a b. (a -> b) -> a -> b
$\Ptr CTermios
p ->doCTcflag
cflag <-((\Ptr CTermios
hsc_ptr ->Ptr CTermios -> Int -> IO CTcflag
forall b. Ptr b -> Int -> IO CTcflag
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOffPtr CTermios
hsc_ptr Int
8))Ptr CTermios
p {-# LINE 415 "System/Posix/Terminal/Common.hsc" #-}((\hsc_ptr->pokeByteOffhsc_ptr8))p{-# LINE 416 "System/Posix/Terminal/Common.hsc" #-}((cflag.&.complement(48)).|.maskbits){-# LINE 417 "System/Posix/Terminal/Common.hsc" #-}wheremask ::Int->CTcflagmask :: Int -> CTcflag
mask Int
5=(CTcflag
0){-# LINE 420 "System/Posix/Terminal/Common.hsc" #-}mask6=(16){-# LINE 421 "System/Posix/Terminal/Common.hsc" #-}mask7=(32){-# LINE 422 "System/Posix/Terminal/Common.hsc" #-}mask8=(48){-# LINE 423 "System/Posix/Terminal/Common.hsc" #-}mask_=error"withBits bit value out of range [5..8]"{-# LINE 426 "System/Posix/Terminal/Common.hsc" #-}dataControlCharacter =EndOfFile -- VEOF|EndOfLine -- VEOL|Erase -- VERASE|Interrupt -- VINTR|Kill -- VKILL|Quit -- VQUIT|Start -- VSTART|Stop -- VSTOP|Suspend -- VSUSP{-# LINE 532 "System/Posix/Terminal/Common.hsc" #-}controlChar ::TerminalAttributes ->ControlCharacter ->MaybeCharcontrolChar :: TerminalAttributes -> ControlCharacter -> Maybe Char
controlChar TerminalAttributes
termios ControlCharacter
cc =IO (Maybe Char) -> Maybe Char
forall a. IO a -> a
unsafePerformIO(IO (Maybe Char) -> Maybe Char) -> IO (Maybe Char) -> Maybe Char
forall a b. (a -> b) -> a -> b
$doTerminalAttributes
-> (Ptr CTermios -> IO (Maybe Char)) -> IO (Maybe Char)
forall a. TerminalAttributes -> (Ptr CTermios -> IO a) -> IO a
withTerminalAttributes TerminalAttributes
termios ((Ptr CTermios -> IO (Maybe Char)) -> IO (Maybe Char))
-> (Ptr CTermios -> IO (Maybe Char)) -> IO (Maybe Char)
forall a b. (a -> b) -> a -> b
$\Ptr CTermios
p ->doletc_cc :: Ptr b
c_cc =((\Ptr CTermios
hsc_ptr ->Ptr CTermios
hsc_ptr Ptr CTermios -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr`Int
17))Ptr CTermios
p {-# LINE 537 "System/Posix/Terminal/Common.hsc" #-}val<-peekElemOffc_cc(cc2Wordcc)ifCCc
val CCc -> CCc -> Bool
forall a. Eq a => a -> a -> Bool
==((CCc
0)::CCc){-# LINE 539 "System/Posix/Terminal/Common.hsc" #-}thenMaybe Char -> IO (Maybe Char)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
returnMaybe Char
forall a. Maybe a
NothingelseMaybe Char -> IO (Maybe Char)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(Char -> Maybe Char
forall a. a -> Maybe a
Just(Int -> Char
chr(CCc -> Int
forall a. Enum a => a -> Int
fromEnumCCc
val )))withCC ::TerminalAttributes ->(ControlCharacter ,Char)->TerminalAttributes withCC :: TerminalAttributes
-> (ControlCharacter, Char) -> TerminalAttributes
withCC TerminalAttributes
termios (ControlCharacter
cc ,Char
c )=IO TerminalAttributes -> TerminalAttributes
forall a. IO a -> a
unsafePerformIO(IO TerminalAttributes -> TerminalAttributes)
-> IO TerminalAttributes -> TerminalAttributes
forall a b. (a -> b) -> a -> b
$doTerminalAttributes
-> (Ptr CTermios -> IO ()) -> IO TerminalAttributes
forall a.
TerminalAttributes
-> (Ptr CTermios -> IO a) -> IO TerminalAttributes
withNewTermios TerminalAttributes
termios ((Ptr CTermios -> IO ()) -> IO TerminalAttributes)
-> (Ptr CTermios -> IO ()) -> IO TerminalAttributes
forall a b. (a -> b) -> a -> b
$\Ptr CTermios
p ->doletc_cc :: Ptr b
c_cc =((\Ptr CTermios
hsc_ptr ->Ptr CTermios
hsc_ptr Ptr CTermios -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr`Int
17))Ptr CTermios
p {-# LINE 548 "System/Posix/Terminal/Common.hsc" #-}pokeElemOffc_cc(cc2Wordcc)(fromIntegral(ordc)::CCc)withoutCC ::TerminalAttributes ->ControlCharacter ->TerminalAttributes withoutCC :: TerminalAttributes -> ControlCharacter -> TerminalAttributes
withoutCC TerminalAttributes
termios ControlCharacter
cc =IO TerminalAttributes -> TerminalAttributes
forall a. IO a -> a
unsafePerformIO(IO TerminalAttributes -> TerminalAttributes)
-> IO TerminalAttributes -> TerminalAttributes
forall a b. (a -> b) -> a -> b
$doTerminalAttributes
-> (Ptr CTermios -> IO ()) -> IO TerminalAttributes
forall a.
TerminalAttributes
-> (Ptr CTermios -> IO a) -> IO TerminalAttributes
withNewTermios TerminalAttributes
termios ((Ptr CTermios -> IO ()) -> IO TerminalAttributes)
-> (Ptr CTermios -> IO ()) -> IO TerminalAttributes
forall a b. (a -> b) -> a -> b
$\Ptr CTermios
p ->doletc_cc :: Ptr b
c_cc =((\Ptr CTermios
hsc_ptr ->Ptr CTermios
hsc_ptr Ptr CTermios -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr`Int
17))Ptr CTermios
p {-# LINE 556 "System/Posix/Terminal/Common.hsc" #-}pokeElemOffc_cc(cc2Wordcc)((0)::CCc){-# LINE 557 "System/Posix/Terminal/Common.hsc" #-}inputTime ::TerminalAttributes ->IntinputTime :: TerminalAttributes -> Int
inputTime TerminalAttributes
termios =IO Int -> Int
forall a. IO a -> a
unsafePerformIO(IO Int -> Int) -> IO Int -> Int
forall a b. (a -> b) -> a -> b
$doTerminalAttributes -> (Ptr CTermios -> IO Int) -> IO Int
forall a. TerminalAttributes -> (Ptr CTermios -> IO a) -> IO a
withTerminalAttributes TerminalAttributes
termios ((Ptr CTermios -> IO Int) -> IO Int)
-> (Ptr CTermios -> IO Int) -> IO Int
forall a b. (a -> b) -> a -> b
$\Ptr CTermios
p ->doCCc
c <-Ptr CCc -> Int -> IO CCc
forall a. Storable a => Ptr a -> Int -> IO a
peekElemOff(((\Ptr CTermios
hsc_ptr ->Ptr CTermios
hsc_ptr Ptr CTermios -> Int -> Ptr CCc
forall a b. Ptr a -> Int -> Ptr b
`plusPtr`Int
17))Ptr CTermios
p )(Int
5){-# LINE 562 "System/Posix/Terminal/Common.hsc" #-}return(fromEnum(c::CCc))withTime ::TerminalAttributes ->Int->TerminalAttributes withTime :: TerminalAttributes -> Int -> TerminalAttributes
withTime TerminalAttributes
termios Int
time =IO TerminalAttributes -> TerminalAttributes
forall a. IO a -> a
unsafePerformIO(IO TerminalAttributes -> TerminalAttributes)
-> IO TerminalAttributes -> TerminalAttributes
forall a b. (a -> b) -> a -> b
$doTerminalAttributes
-> (Ptr CTermios -> IO ()) -> IO TerminalAttributes
forall a.
TerminalAttributes
-> (Ptr CTermios -> IO a) -> IO TerminalAttributes
withNewTermios TerminalAttributes
termios ((Ptr CTermios -> IO ()) -> IO TerminalAttributes)
-> (Ptr CTermios -> IO ()) -> IO TerminalAttributes
forall a b. (a -> b) -> a -> b
$\Ptr CTermios
p ->doletc_cc :: Ptr b
c_cc =((\Ptr CTermios
hsc_ptr ->Ptr CTermios
hsc_ptr Ptr CTermios -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr`Int
17))Ptr CTermios
p {-# LINE 568 "System/Posix/Terminal/Common.hsc" #-}pokeElemOffc_cc(5)(fromIntegraltime::CCc){-# LINE 569 "System/Posix/Terminal/Common.hsc" #-}minInput ::TerminalAttributes ->IntminInput :: TerminalAttributes -> Int
minInput TerminalAttributes
termios =IO Int -> Int
forall a. IO a -> a
unsafePerformIO(IO Int -> Int) -> IO Int -> Int
forall a b. (a -> b) -> a -> b
$doTerminalAttributes -> (Ptr CTermios -> IO Int) -> IO Int
forall a. TerminalAttributes -> (Ptr CTermios -> IO a) -> IO a
withTerminalAttributes TerminalAttributes
termios ((Ptr CTermios -> IO Int) -> IO Int)
-> (Ptr CTermios -> IO Int) -> IO Int
forall a b. (a -> b) -> a -> b
$\Ptr CTermios
p ->doCCc
c <-Ptr CCc -> Int -> IO CCc
forall a. Storable a => Ptr a -> Int -> IO a
peekElemOff(((\Ptr CTermios
hsc_ptr ->Ptr CTermios
hsc_ptr Ptr CTermios -> Int -> Ptr CCc
forall a b. Ptr a -> Int -> Ptr b
`plusPtr`Int
17))Ptr CTermios
p )(Int
6){-# LINE 574 "System/Posix/Terminal/Common.hsc" #-}return(fromEnum(c::CCc))withMinInput ::TerminalAttributes ->Int->TerminalAttributes withMinInput :: TerminalAttributes -> Int -> TerminalAttributes
withMinInput TerminalAttributes
termios Int
count =IO TerminalAttributes -> TerminalAttributes
forall a. IO a -> a
unsafePerformIO(IO TerminalAttributes -> TerminalAttributes)
-> IO TerminalAttributes -> TerminalAttributes
forall a b. (a -> b) -> a -> b
$doTerminalAttributes
-> (Ptr CTermios -> IO ()) -> IO TerminalAttributes
forall a.
TerminalAttributes
-> (Ptr CTermios -> IO a) -> IO TerminalAttributes
withNewTermios TerminalAttributes
termios ((Ptr CTermios -> IO ()) -> IO TerminalAttributes)
-> (Ptr CTermios -> IO ()) -> IO TerminalAttributes
forall a b. (a -> b) -> a -> b
$\Ptr CTermios
p ->doletc_cc :: Ptr b
c_cc =((\Ptr CTermios
hsc_ptr ->Ptr CTermios
hsc_ptr Ptr CTermios -> Int -> Ptr b
forall a b. Ptr a -> Int -> Ptr b
`plusPtr`Int
17))Ptr CTermios
p {-# LINE 580 "System/Posix/Terminal/Common.hsc" #-}pokeElemOffc_cc(6)(fromIntegralcount::CCc){-# LINE 581 "System/Posix/Terminal/Common.hsc" #-}-- | Serial line baudrate. The set of supported speeds is system-dependent.-- Portable use of the provided pattern synonyms that are outside the list-- mandated by POSIX requires @#ifdef@ guards.---- Applications may need to be prepared to encounter speeds not known at-- compile time, these can be handled generically via the 'BaudRate'-- constructor. In other words, the provided pattern synonyms are not-- necessarily a @COMPLETE@ set.---- All non-zero /pseudo-terminal/ baud rates are functionally equivalent, and-- the @pty@ driver may accept any speed within a suitable range. Requested-- speeds may be rounded up or down to fit into the supported range.--newtypeBaudRate =BaudRate CSpeedderiving(BaudRate -> BaudRate -> Bool
(BaudRate -> BaudRate -> Bool)
-> (BaudRate -> BaudRate -> Bool) -> Eq BaudRate
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: BaudRate -> BaudRate -> Bool
== :: BaudRate -> BaudRate -> Bool
$c/= :: BaudRate -> BaudRate -> Bool
/= :: BaudRate -> BaudRate -> Bool
Eq,Eq BaudRate
Eq BaudRate =>
(BaudRate -> BaudRate -> Ordering)
-> (BaudRate -> BaudRate -> Bool)
-> (BaudRate -> BaudRate -> Bool)
-> (BaudRate -> BaudRate -> Bool)
-> (BaudRate -> BaudRate -> Bool)
-> (BaudRate -> BaudRate -> BaudRate)
-> (BaudRate -> BaudRate -> BaudRate)
-> Ord BaudRate
BaudRate -> BaudRate -> Bool
BaudRate -> BaudRate -> Ordering
BaudRate -> BaudRate -> BaudRate
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: BaudRate -> BaudRate -> Ordering
compare :: BaudRate -> BaudRate -> Ordering
$c< :: BaudRate -> BaudRate -> Bool
< :: BaudRate -> BaudRate -> Bool
$c<= :: BaudRate -> BaudRate -> Bool
<= :: BaudRate -> BaudRate -> Bool
$c> :: BaudRate -> BaudRate -> Bool
> :: BaudRate -> BaudRate -> Bool
$c>= :: BaudRate -> BaudRate -> Bool
>= :: BaudRate -> BaudRate -> Bool
$cmax :: BaudRate -> BaudRate -> BaudRate
max :: BaudRate -> BaudRate -> BaudRate
$cmin :: BaudRate -> BaudRate -> BaudRate
min :: BaudRate -> BaudRate -> BaudRate
Ord,Int -> BaudRate -> ShowS
[BaudRate] -> ShowS
BaudRate -> [Char]
(Int -> BaudRate -> ShowS)
-> (BaudRate -> [Char]) -> ([BaudRate] -> ShowS) -> Show BaudRate
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> BaudRate -> ShowS
showsPrec :: Int -> BaudRate -> ShowS
$cshow :: BaudRate -> [Char]
show :: BaudRate -> [Char]
$cshowList :: [BaudRate] -> ShowS
showList :: [BaudRate] -> ShowS
Show,Int -> BaudRate
BaudRate -> Int
BaudRate -> [BaudRate]
BaudRate -> BaudRate
BaudRate -> BaudRate -> [BaudRate]
BaudRate -> BaudRate -> BaudRate -> [BaudRate]
(BaudRate -> BaudRate)
-> (BaudRate -> BaudRate)
-> (Int -> BaudRate)
-> (BaudRate -> Int)
-> (BaudRate -> [BaudRate])
-> (BaudRate -> BaudRate -> [BaudRate])
-> (BaudRate -> BaudRate -> [BaudRate])
-> (BaudRate -> BaudRate -> BaudRate -> [BaudRate])
-> Enum BaudRate
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: BaudRate -> BaudRate
succ :: BaudRate -> BaudRate
$cpred :: BaudRate -> BaudRate
pred :: BaudRate -> BaudRate
$ctoEnum :: Int -> BaudRate
toEnum :: Int -> BaudRate
$cfromEnum :: BaudRate -> Int
fromEnum :: BaudRate -> Int
$cenumFrom :: BaudRate -> [BaudRate]
enumFrom :: BaudRate -> [BaudRate]
$cenumFromThen :: BaudRate -> BaudRate -> [BaudRate]
enumFromThen :: BaudRate -> BaudRate -> [BaudRate]
$cenumFromTo :: BaudRate -> BaudRate -> [BaudRate]
enumFromTo :: BaudRate -> BaudRate -> [BaudRate]
$cenumFromThenTo :: BaudRate -> BaudRate -> BaudRate -> [BaudRate]
enumFromThenTo :: BaudRate -> BaudRate -> BaudRate -> [BaudRate]
Enum,Num BaudRate
Ord BaudRate
(Num BaudRate, Ord BaudRate) =>
(BaudRate -> Rational) -> Real BaudRate
BaudRate -> Rational
forall a. (Num a, Ord a) => (a -> Rational) -> Real a
$ctoRational :: BaudRate -> Rational
toRational :: BaudRate -> Rational
Real,Integer -> BaudRate
BaudRate -> BaudRate
BaudRate -> BaudRate -> BaudRate
(BaudRate -> BaudRate -> BaudRate)
-> (BaudRate -> BaudRate -> BaudRate)
-> (BaudRate -> BaudRate -> BaudRate)
-> (BaudRate -> BaudRate)
-> (BaudRate -> BaudRate)
-> (BaudRate -> BaudRate)
-> (Integer -> BaudRate)
-> Num BaudRate
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
$c+ :: BaudRate -> BaudRate -> BaudRate
+ :: BaudRate -> BaudRate -> BaudRate
$c- :: BaudRate -> BaudRate -> BaudRate
- :: BaudRate -> BaudRate -> BaudRate
$c* :: BaudRate -> BaudRate -> BaudRate
* :: BaudRate -> BaudRate -> BaudRate
$cnegate :: BaudRate -> BaudRate
negate :: BaudRate -> BaudRate
$cabs :: BaudRate -> BaudRate
abs :: BaudRate -> BaudRate
$csignum :: BaudRate -> BaudRate
signum :: BaudRate -> BaudRate
$cfromInteger :: Integer -> BaudRate
fromInteger :: Integer -> BaudRate
Num)-- | Hang uppatternB0 ::BaudRate pattern$mB0 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB0 :: BaudRate
B0 =BaudRate (0){-# LINE 600 "System/Posix/Terminal/Common.hsc" #-}-- | 50 baudpatternB50 ::BaudRate pattern$mB50 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB50 :: BaudRate
B50 =BaudRate (1){-# LINE 603 "System/Posix/Terminal/Common.hsc" #-}-- | 75 baudpatternB75 ::BaudRate pattern$mB75 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB75 :: BaudRate
B75 =BaudRate (2){-# LINE 606 "System/Posix/Terminal/Common.hsc" #-}-- | 110 baudpatternB110 ::BaudRate pattern$mB110 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB110 :: BaudRate
B110 =BaudRate (3){-# LINE 609 "System/Posix/Terminal/Common.hsc" #-}-- | 134.5 baudpatternB134 ::BaudRate pattern$mB134 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB134 :: BaudRate
B134 =BaudRate (4){-# LINE 612 "System/Posix/Terminal/Common.hsc" #-}-- | 150 baudpatternB150 ::BaudRate pattern$mB150 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB150 :: BaudRate
B150 =BaudRate (5){-# LINE 615 "System/Posix/Terminal/Common.hsc" #-}-- | 200 baudpatternB200 ::BaudRate pattern$mB200 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB200 :: BaudRate
B200 =BaudRate (6){-# LINE 618 "System/Posix/Terminal/Common.hsc" #-}-- | 300 baudpatternB300 ::BaudRate pattern$mB300 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB300 :: BaudRate
B300 =BaudRate (7){-# LINE 621 "System/Posix/Terminal/Common.hsc" #-}-- | 600 baudpatternB600 ::BaudRate pattern$mB600 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB600 :: BaudRate
B600 =BaudRate (8){-# LINE 624 "System/Posix/Terminal/Common.hsc" #-}-- | 1200 baudpatternB1200 ::BaudRate pattern$mB1200 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB1200 :: BaudRate
B1200 =BaudRate (9){-# LINE 627 "System/Posix/Terminal/Common.hsc" #-}-- | 1800 baudpatternB1800 ::BaudRate pattern$mB1800 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB1800 :: BaudRate
B1800 =BaudRate (10){-# LINE 630 "System/Posix/Terminal/Common.hsc" #-}-- | 2400 baudpatternB2400 ::BaudRate pattern$mB2400 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB2400 :: BaudRate
B2400 =BaudRate (11){-# LINE 633 "System/Posix/Terminal/Common.hsc" #-}-- | 4800 baudpatternB4800 ::BaudRate pattern$mB4800 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB4800 :: BaudRate
B4800 =BaudRate (12){-# LINE 636 "System/Posix/Terminal/Common.hsc" #-}-- | 9600 baudpatternB9600 ::BaudRate pattern$mB9600 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB9600 :: BaudRate
B9600 =BaudRate (13){-# LINE 639 "System/Posix/Terminal/Common.hsc" #-}-- | 19200 baudpatternB19200 ::BaudRate pattern$mB19200 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB19200 :: BaudRate
B19200 =BaudRate (14){-# LINE 642 "System/Posix/Terminal/Common.hsc" #-}-- | 38400 baudpatternB38400 ::BaudRate pattern$mB38400 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB38400 :: BaudRate
B38400 =BaudRate (15){-# LINE 645 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 651 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 656 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 661 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 662 "System/Posix/Terminal/Common.hsc" #-}-- | 57600 baud, non-POSIX system-dependent extensionpatternB57600 ::BaudRate pattern$mB57600 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB57600 :: BaudRate
B57600 =BaudRate (4097){-# LINE 665 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 666 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 671 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 672 "System/Posix/Terminal/Common.hsc" #-}-- | 115200 baud, non-POSIX system-dependent extensionpatternB115200 ::BaudRate pattern$mB115200 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB115200 :: BaudRate
B115200 =BaudRate (4098){-# LINE 675 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 676 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 677 "System/Posix/Terminal/Common.hsc" #-}-- | 230400 baud, non-POSIX system-dependent extensionpatternB230400 ::BaudRate pattern$mB230400 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB230400 :: BaudRate
B230400 =BaudRate (4099){-# LINE 680 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 681 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 682 "System/Posix/Terminal/Common.hsc" #-}-- | 460800 baud, non-POSIX system-dependent extensionpatternB460800 ::BaudRate pattern$mB460800 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB460800 :: BaudRate
B460800 =BaudRate (4100){-# LINE 685 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 686 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 687 "System/Posix/Terminal/Common.hsc" #-}-- | 500000 baud, non-POSIX system-dependent extensionpatternB500000 ::BaudRate pattern$mB500000 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB500000 :: BaudRate
B500000 =BaudRate (4101){-# LINE 690 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 691 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 692 "System/Posix/Terminal/Common.hsc" #-}-- | 576000 baud, non-POSIX system-dependent extensionpatternB576000 ::BaudRate pattern$mB576000 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB576000 :: BaudRate
B576000 =BaudRate (4102){-# LINE 695 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 696 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 697 "System/Posix/Terminal/Common.hsc" #-}-- | 921600 baud, non-POSIX system-dependent extensionpatternB921600 ::BaudRate pattern$mB921600 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB921600 :: BaudRate
B921600 =BaudRate (4103){-# LINE 700 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 701 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 702 "System/Posix/Terminal/Common.hsc" #-}-- | 1000000 baud, non-POSIX system-dependent extensionpatternB1000000 ::BaudRate pattern$mB1000000 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB1000000 :: BaudRate
B1000000 =BaudRate (4104){-# LINE 705 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 706 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 707 "System/Posix/Terminal/Common.hsc" #-}-- | 1152000 baud, non-POSIX system-dependent extensionpatternB1152000 ::BaudRate pattern$mB1152000 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB1152000 :: BaudRate
B1152000 =BaudRate (4105){-# LINE 710 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 711 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 712 "System/Posix/Terminal/Common.hsc" #-}-- | 1500000 baud, non-POSIX system-dependent extensionpatternB1500000 ::BaudRate pattern$mB1500000 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB1500000 :: BaudRate
B1500000 =BaudRate (4106){-# LINE 715 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 716 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 717 "System/Posix/Terminal/Common.hsc" #-}-- | 2000000 baud, non-POSIX system-dependent extensionpatternB2000000 ::BaudRate pattern$mB2000000 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB2000000 :: BaudRate
B2000000 =BaudRate (4107){-# LINE 720 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 721 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 722 "System/Posix/Terminal/Common.hsc" #-}-- | 2500000 baud, non-POSIX system-dependent extensionpatternB2500000 ::BaudRate pattern$mB2500000 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB2500000 :: BaudRate
B2500000 =BaudRate (4108){-# LINE 725 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 726 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 727 "System/Posix/Terminal/Common.hsc" #-}-- | 3000000 baud, non-POSIX system-dependent extensionpatternB3000000 ::BaudRate pattern$mB3000000 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB3000000 :: BaudRate
B3000000 =BaudRate (4109){-# LINE 730 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 731 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 732 "System/Posix/Terminal/Common.hsc" #-}-- | 3500000 baud, non-POSIX system-dependent extensionpatternB3500000 ::BaudRate pattern$mB3500000 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB3500000 :: BaudRate
B3500000 =BaudRate (4110){-# LINE 735 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 736 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 737 "System/Posix/Terminal/Common.hsc" #-}-- | 4000000 baud, non-POSIX system-dependent extensionpatternB4000000 ::BaudRate pattern$mB4000000 :: forall {r}. BaudRate -> ((# #) -> r) -> ((# #) -> r) -> r
$bB4000000 :: BaudRate
B4000000 =BaudRate (4111){-# LINE 740 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 741 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 743 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 772 "System/Posix/Terminal/Common.hsc" #-}inputSpeed ::TerminalAttributes ->BaudRate inputSpeed :: TerminalAttributes -> BaudRate
inputSpeed TerminalAttributes
termios =IO BaudRate -> BaudRate
forall a. IO a -> a
unsafePerformIO(IO BaudRate -> BaudRate) -> IO BaudRate -> BaudRate
forall a b. (a -> b) -> a -> b
$doTerminalAttributes -> (Ptr CTermios -> IO BaudRate) -> IO BaudRate
forall a. TerminalAttributes -> (Ptr CTermios -> IO a) -> IO a
withTerminalAttributes TerminalAttributes
termios ((Ptr CTermios -> IO BaudRate) -> IO BaudRate)
-> (Ptr CTermios -> IO BaudRate) -> IO BaudRate
forall a b. (a -> b) -> a -> b
$\Ptr CTermios
p ->doCSpeed
w <-Ptr CTermios -> IO CSpeed
c_cfgetispeed Ptr CTermios
p BaudRate -> IO BaudRate
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(CSpeed -> BaudRate
BaudRate CSpeed
w )foreignimportcapiunsafe"termios.h cfgetispeed"c_cfgetispeed ::PtrCTermios->IOCSpeedwithInputSpeed ::TerminalAttributes ->BaudRate ->TerminalAttributes withInputSpeed :: TerminalAttributes -> BaudRate -> TerminalAttributes
withInputSpeed TerminalAttributes
termios (BaudRate CSpeed
br )=IO TerminalAttributes -> TerminalAttributes
forall a. IO a -> a
unsafePerformIO(IO TerminalAttributes -> TerminalAttributes)
-> IO TerminalAttributes -> TerminalAttributes
forall a b. (a -> b) -> a -> b
$doTerminalAttributes
-> (Ptr CTermios -> IO CInt) -> IO TerminalAttributes
forall a.
TerminalAttributes
-> (Ptr CTermios -> IO a) -> IO TerminalAttributes
withNewTermios TerminalAttributes
termios ((Ptr CTermios -> IO CInt) -> IO TerminalAttributes)
-> (Ptr CTermios -> IO CInt) -> IO TerminalAttributes
forall a b. (a -> b) -> a -> b
$\Ptr CTermios
p ->Ptr CTermios -> CSpeed -> IO CInt
c_cfsetispeed Ptr CTermios
p CSpeed
br foreignimportcapiunsafe"termios.h cfsetispeed"c_cfsetispeed ::PtrCTermios->CSpeed->IOCIntoutputSpeed ::TerminalAttributes ->BaudRate outputSpeed :: TerminalAttributes -> BaudRate
outputSpeed TerminalAttributes
termios =IO BaudRate -> BaudRate
forall a. IO a -> a
unsafePerformIO(IO BaudRate -> BaudRate) -> IO BaudRate -> BaudRate
forall a b. (a -> b) -> a -> b
$doTerminalAttributes -> (Ptr CTermios -> IO BaudRate) -> IO BaudRate
forall a. TerminalAttributes -> (Ptr CTermios -> IO a) -> IO a
withTerminalAttributes TerminalAttributes
termios ((Ptr CTermios -> IO BaudRate) -> IO BaudRate)
-> (Ptr CTermios -> IO BaudRate) -> IO BaudRate
forall a b. (a -> b) -> a -> b
$\Ptr CTermios
p ->doCSpeed
w <-Ptr CTermios -> IO CSpeed
c_cfgetospeed Ptr CTermios
p BaudRate -> IO BaudRate
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(CSpeed -> BaudRate
BaudRate CSpeed
w )foreignimportcapiunsafe"termios.h cfgetospeed"c_cfgetospeed ::PtrCTermios->IOCSpeedwithOutputSpeed ::TerminalAttributes ->BaudRate ->TerminalAttributes withOutputSpeed :: TerminalAttributes -> BaudRate -> TerminalAttributes
withOutputSpeed TerminalAttributes
termios (BaudRate CSpeed
br )=IO TerminalAttributes -> TerminalAttributes
forall a. IO a -> a
unsafePerformIO(IO TerminalAttributes -> TerminalAttributes)
-> IO TerminalAttributes -> TerminalAttributes
forall a b. (a -> b) -> a -> b
$doTerminalAttributes
-> (Ptr CTermios -> IO CInt) -> IO TerminalAttributes
forall a.
TerminalAttributes
-> (Ptr CTermios -> IO a) -> IO TerminalAttributes
withNewTermios TerminalAttributes
termios ((Ptr CTermios -> IO CInt) -> IO TerminalAttributes)
-> (Ptr CTermios -> IO CInt) -> IO TerminalAttributes
forall a b. (a -> b) -> a -> b
$\Ptr CTermios
p ->Ptr CTermios -> CSpeed -> IO CInt
c_cfsetospeed Ptr CTermios
p CSpeed
br foreignimportcapiunsafe"termios.h cfsetospeed"c_cfsetospeed ::PtrCTermios->CSpeed->IOCInt-- | @getTerminalAttributes fd@ calls @tcgetattr@ to obtain-- the @TerminalAttributes@ associated with @Fd@ @fd@.getTerminalAttributes ::Fd->IOTerminalAttributes getTerminalAttributes :: Fd -> IO TerminalAttributes
getTerminalAttributes (FdCInt
fd )=doForeignPtr CTermios
fp <-Int -> IO (ForeignPtr CTermios)
forall a. Int -> IO (ForeignPtr a)
mallocForeignPtrBytes(Int
60){-# LINE 811 "System/Posix/Terminal/Common.hsc" #-}withForeignPtrfp$\p->throwErrnoIfMinus1_"getTerminalAttributes"(c_tcgetattrfdp)TerminalAttributes -> IO TerminalAttributes
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(TerminalAttributes -> IO TerminalAttributes)
-> TerminalAttributes -> IO TerminalAttributes
forall a b. (a -> b) -> a -> b
$ForeignPtr CTermios -> TerminalAttributes
makeTerminalAttributes ForeignPtr CTermios
fp foreignimportcapiunsafe"termios.h tcgetattr"c_tcgetattr ::CInt->PtrCTermios->IOCInt{-# LINE 819 "System/Posix/Terminal/Common.hsc" #-}dataTerminalState =Immediately |WhenDrained |WhenFlushed {-# LINE 846 "System/Posix/Terminal/Common.hsc" #-}-- | @setTerminalAttributes fd attr ts@ calls @tcsetattr@ to change-- the @TerminalAttributes@ associated with @Fd@ @fd@ to-- @attr@, when the terminal is in the state indicated by @ts@.setTerminalAttributes ::Fd->TerminalAttributes ->TerminalState ->IO()setTerminalAttributes :: Fd -> TerminalAttributes -> TerminalState -> IO ()
setTerminalAttributes (FdCInt
fd )TerminalAttributes
termios TerminalState
state =doTerminalAttributes -> (Ptr CTermios -> IO ()) -> IO ()
forall a. TerminalAttributes -> (Ptr CTermios -> IO a) -> IO a
withTerminalAttributes TerminalAttributes
termios ((Ptr CTermios -> IO ()) -> IO ())
-> (Ptr CTermios -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$\Ptr CTermios
p ->[Char] -> IO CInt -> IO ()
forall a. (Eq a, Num a) => [Char] -> IO a -> IO ()
throwErrnoIfMinus1_[Char]
"setTerminalAttributes"(CInt -> CInt -> Ptr CTermios -> IO CInt
c_tcsetattr CInt
fd (TerminalState -> CInt
state2Int TerminalState
state )Ptr CTermios
p )wherestate2Int ::TerminalState ->CIntstate2Int :: TerminalState -> CInt
state2Int TerminalState
Immediately =(CInt
0){-# LINE 861 "System/Posix/Terminal/Common.hsc" #-}state2IntWhenDrained=(1){-# LINE 862 "System/Posix/Terminal/Common.hsc" #-}state2IntWhenFlushed=(2){-# LINE 863 "System/Posix/Terminal/Common.hsc" #-}foreignimportcapiunsafe"termios.h tcsetattr"c_tcsetattr ::CInt->CInt->PtrCTermios->IOCInt-- | @sendBreak fd duration@ calls @tcsendbreak@ to transmit a-- continuous stream of zero-valued bits on @Fd@ @fd@ for the-- specified implementation-dependent @duration@.sendBreak ::Fd->Int->IO()sendBreak :: Fd -> Int -> IO ()
sendBreak (FdCInt
fd )Int
duration =[Char] -> IO CInt -> IO ()
forall a. (Eq a, Num a) => [Char] -> IO a -> IO ()
throwErrnoIfMinus1_[Char]
"sendBreak"(CInt -> CInt -> IO CInt
c_tcsendbreak CInt
fd (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegralInt
duration ))foreignimportcapiunsafe"termios.h tcsendbreak"c_tcsendbreak ::CInt->CInt->IOCInt-- | @drainOutput fd@ calls @tcdrain@ to block until all output-- written to @Fd@ @fd@ has been transmitted.---- Throws 'IOError' (\"unsupported operation\") if platform does not-- provide @tcdrain(3)@ (use @#if HAVE_TCDRAIN@ CPP guard to-- detect availability).drainOutput ::Fd->IO(){-# LINE 885 "System/Posix/Terminal/Common.hsc" #-}drainOutput(Fdfd)=throwErrnoIfMinus1_"drainOutput"(c_tcdrainfd)foreignimportcapisafe"termios.h tcdrain"c_tcdrain ::CInt->IOCInt{-# LINE 894 "System/Posix/Terminal/Common.hsc" #-}{-# LINE 896 "System/Posix/Terminal/Common.hsc" #-}dataQueueSelector =InputQueue -- TCIFLUSH|OutputQueue -- TCOFLUSH|BothQueues -- TCIOFLUSH{-# LINE 910 "System/Posix/Terminal/Common.hsc" #-}-- | @discardData fd queues@ calls @tcflush@ to discard-- pending input and\/or output for @Fd@ @fd@,-- as indicated by the @QueueSelector@ @queues@.discardData ::Fd->QueueSelector ->IO()discardData :: Fd -> QueueSelector -> IO ()
discardData (FdCInt
fd )QueueSelector
queue =[Char] -> IO CInt -> IO ()
forall a. (Eq a, Num a) => [Char] -> IO a -> IO ()
throwErrnoIfMinus1_[Char]
"discardData"(CInt -> CInt -> IO CInt
c_tcflush CInt
fd (QueueSelector -> CInt
queue2Int QueueSelector
queue ))wherequeue2Int ::QueueSelector ->CIntqueue2Int :: QueueSelector -> CInt
queue2Int QueueSelector
InputQueue =(CInt
0){-# LINE 920 "System/Posix/Terminal/Common.hsc" #-}queue2IntOutputQueue=(1){-# LINE 921 "System/Posix/Terminal/Common.hsc" #-}queue2IntBothQueues=(2){-# LINE 922 "System/Posix/Terminal/Common.hsc" #-}foreignimportcapiunsafe"termios.h tcflush"c_tcflush ::CInt->CInt->IOCInt{-# LINE 927 "System/Posix/Terminal/Common.hsc" #-}dataFlowAction =SuspendOutput -- ^ TCOOFF|RestartOutput -- ^ TCOON|TransmitStop -- ^ TCIOFF|TransmitStart -- ^ TCION{-# LINE 952 "System/Posix/Terminal/Common.hsc" #-}-- | @controlFlow fd action@ calls @tcflow@ to control the-- flow of data on @Fd@ @fd@, as indicated by-- @action@.controlFlow ::Fd->FlowAction ->IO()controlFlow :: Fd -> FlowAction -> IO ()
controlFlow (FdCInt
fd )FlowAction
action =[Char] -> IO CInt -> IO ()
forall a. (Eq a, Num a) => [Char] -> IO a -> IO ()
throwErrnoIfMinus1_[Char]
"controlFlow"(CInt -> CInt -> IO CInt
c_tcflow CInt
fd (FlowAction -> CInt
action2Int FlowAction
action ))whereaction2Int ::FlowAction ->CIntaction2Int :: FlowAction -> CInt
action2Int FlowAction
SuspendOutput =(CInt
0){-# LINE 962 "System/Posix/Terminal/Common.hsc" #-}action2IntRestartOutput=(1){-# LINE 963 "System/Posix/Terminal/Common.hsc" #-}action2IntTransmitStop=(2){-# LINE 964 "System/Posix/Terminal/Common.hsc" #-}action2IntTransmitStart=(3){-# LINE 965 "System/Posix/Terminal/Common.hsc" #-}foreignimportcapiunsafe"termios.h tcflow"c_tcflow ::CInt->CInt->IOCInt-- | @getTerminalProcessGroupID fd@ calls @tcgetpgrp@ to-- obtain the @ProcessGroupID@ of the foreground process group-- associated with the terminal attached to @Fd@ @fd@.getTerminalProcessGroupID ::Fd->IOProcessGroupIDgetTerminalProcessGroupID :: Fd -> IO ProcessGroupID
getTerminalProcessGroupID (FdCInt
fd )=do[Char] -> IO ProcessGroupID -> IO ProcessGroupID
forall a. (Eq a, Num a) => [Char] -> IO a -> IO a
throwErrnoIfMinus1[Char]
"getTerminalProcessGroupID"(CInt -> IO ProcessGroupID
c_tcgetpgrp CInt
fd )foreignimportccallunsafe"tcgetpgrp"c_tcgetpgrp ::CInt->IOCPid-- | @setTerminalProcessGroupID fd pgid@ calls @tcsetpgrp@ to-- set the @ProcessGroupID@ of the foreground process group-- associated with the terminal attached to @Fd@-- @fd@ to @pgid@.setTerminalProcessGroupID ::Fd->ProcessGroupID->IO()setTerminalProcessGroupID :: Fd -> ProcessGroupID -> IO ()
setTerminalProcessGroupID (FdCInt
fd )ProcessGroupID
pgid =[Char] -> IO CInt -> IO ()
forall a. (Eq a, Num a) => [Char] -> IO a -> IO ()
throwErrnoIfMinus1_[Char]
"setTerminalProcessGroupID"(CInt -> ProcessGroupID -> IO CInt
c_tcsetpgrp CInt
fd ProcessGroupID
pgid )foreignimportccallunsafe"tcsetpgrp"c_tcsetpgrp ::CInt->CPid->IOCInt{-# LINE 991 "System/Posix/Terminal/Common.hsc" #-}-- ------------------------------------------------------------------------------- file descriptor queries-- | @queryTerminal fd@ calls @isatty@ to determine whether or-- not @Fd@ @fd@ is associated with a terminal.queryTerminal ::Fd->IOBoolqueryTerminal :: Fd -> IO Bool
queryTerminal (FdCInt
fd )=doCInt
r <-CInt -> IO CInt
c_isatty CInt
fd Bool -> IO Bool
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(CInt
r CInt -> CInt -> Bool
forall a. Eq a => a -> a -> Bool
==CInt
1)-- ToDo: the spec says that it can set errno to EBADF if the result is zeroforeignimportccallunsafe"isatty"c_isatty ::CInt->IOCInt-- ------------------------------------------------------------------------------- Local utility functions-- Convert Haskell ControlCharacter to Int{-# LINE 1012 "System/Posix/Terminal/Common.hsc" #-}cc2Word ::ControlCharacter ->Intcc2Word :: ControlCharacter -> Int
cc2Word ControlCharacter
EndOfFile =(Int
4){-# LINE 1015 "System/Posix/Terminal/Common.hsc" #-}cc2WordEndOfLine=(11){-# LINE 1016 "System/Posix/Terminal/Common.hsc" #-}cc2WordErase=(2){-# LINE 1017 "System/Posix/Terminal/Common.hsc" #-}cc2WordInterrupt=(0){-# LINE 1018 "System/Posix/Terminal/Common.hsc" #-}cc2WordKill=(3){-# LINE 1019 "System/Posix/Terminal/Common.hsc" #-}cc2WordQuit=(1){-# LINE 1020 "System/Posix/Terminal/Common.hsc" #-}cc2WordSuspend=(10){-# LINE 1021 "System/Posix/Terminal/Common.hsc" #-}cc2WordStart=(8){-# LINE 1022 "System/Posix/Terminal/Common.hsc" #-}cc2WordStop=(9){-# LINE 1023 "System/Posix/Terminal/Common.hsc" #-}-- Clear termios i_flagclearInputFlag ::CTcflag->TerminalAttributes ->TerminalAttributes clearInputFlag :: CTcflag -> TerminalAttributes -> TerminalAttributes
clearInputFlag CTcflag
flag TerminalAttributes
termios =IO TerminalAttributes -> TerminalAttributes
forall a. IO a -> a
unsafePerformIO(IO TerminalAttributes -> TerminalAttributes)
-> IO TerminalAttributes -> TerminalAttributes
forall a b. (a -> b) -> a -> b
$doForeignPtr CTermios
fp <-Int -> IO (ForeignPtr CTermios)
forall a. Int -> IO (ForeignPtr a)
mallocForeignPtrBytes(Int
60){-# LINE 1029 "System/Posix/Terminal/Common.hsc" #-}withForeignPtrfp$\p1->dowithTerminalAttributestermios$\p2->docopyBytesp1p2(60){-# LINE 1032 "System/Posix/Terminal/Common.hsc" #-}iflag<-((\hsc_ptr->peekByteOffhsc_ptr0))p2{-# LINE 1033 "System/Posix/Terminal/Common.hsc" #-}((\hsc_ptr->pokeByteOffhsc_ptr0))p1(iflag.&.complementflag){-# LINE 1034 "System/Posix/Terminal/Common.hsc" #-}return$makeTerminalAttributesfp-- Set termios i_flagsetInputFlag ::CTcflag->TerminalAttributes ->TerminalAttributes setInputFlag :: CTcflag -> TerminalAttributes -> TerminalAttributes
setInputFlag CTcflag
flag TerminalAttributes
termios =IO TerminalAttributes -> TerminalAttributes
forall a. IO a -> a
unsafePerformIO(IO TerminalAttributes -> TerminalAttributes)
-> IO TerminalAttributes -> TerminalAttributes
forall a b. (a -> b) -> a -> b
$doForeignPtr CTermios
fp <-Int -> IO (ForeignPtr CTermios)
forall a. Int -> IO (ForeignPtr a)
mallocForeignPtrBytes(Int
60){-# LINE 1041 "System/Posix/Terminal/Common.hsc" #-}withForeignPtrfp$\p1->dowithTerminalAttributestermios$\p2->docopyBytesp1p2(60){-# LINE 1044 "System/Posix/Terminal/Common.hsc" #-}iflag<-((\hsc_ptr->peekByteOffhsc_ptr0))p2{-# LINE 1045 "System/Posix/Terminal/Common.hsc" #-}((\hsc_ptr->pokeByteOffhsc_ptr0))p1(iflag.|.flag){-# LINE 1046 "System/Posix/Terminal/Common.hsc" #-}return$makeTerminalAttributesfp-- Examine termios i_flagtestInputFlag ::CTcflag->TerminalAttributes ->BooltestInputFlag :: CTcflag -> TerminalAttributes -> Bool
testInputFlag CTcflag
flag TerminalAttributes
termios =IO Bool -> Bool
forall a. IO a -> a
unsafePerformIO(IO Bool -> Bool) -> IO Bool -> Bool
forall a b. (a -> b) -> a -> b
$TerminalAttributes -> (Ptr CTermios -> IO Bool) -> IO Bool
forall a. TerminalAttributes -> (Ptr CTermios -> IO a) -> IO a
withTerminalAttributes TerminalAttributes
termios ((Ptr CTermios -> IO Bool) -> IO Bool)
-> (Ptr CTermios -> IO Bool) -> IO Bool
forall a b. (a -> b) -> a -> b
$\Ptr CTermios
p ->doCTcflag
iflag <-((\Ptr CTermios
hsc_ptr ->Ptr CTermios -> Int -> IO CTcflag
forall b. Ptr b -> Int -> IO CTcflag
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOffPtr CTermios
hsc_ptr Int
0))Ptr CTermios
p {-# LINE 1054 "System/Posix/Terminal/Common.hsc" #-}return$!((iflag.&.flag)/=0)-- Clear termios c_flagclearControlFlag ::CTcflag->TerminalAttributes ->TerminalAttributes clearControlFlag :: CTcflag -> TerminalAttributes -> TerminalAttributes
clearControlFlag CTcflag
flag TerminalAttributes
termios =IO TerminalAttributes -> TerminalAttributes
forall a. IO a -> a
unsafePerformIO(IO TerminalAttributes -> TerminalAttributes)
-> IO TerminalAttributes -> TerminalAttributes
forall a b. (a -> b) -> a -> b
$doForeignPtr CTermios
fp <-Int -> IO (ForeignPtr CTermios)
forall a. Int -> IO (ForeignPtr a)
mallocForeignPtrBytes(Int
60){-# LINE 1061 "System/Posix/Terminal/Common.hsc" #-}withForeignPtrfp$\p1->dowithTerminalAttributestermios$\p2->docopyBytesp1p2(60){-# LINE 1064 "System/Posix/Terminal/Common.hsc" #-}cflag<-((\hsc_ptr->peekByteOffhsc_ptr8))p2{-# LINE 1065 "System/Posix/Terminal/Common.hsc" #-}((\hsc_ptr->pokeByteOffhsc_ptr8))p1(cflag.&.complementflag){-# LINE 1066 "System/Posix/Terminal/Common.hsc" #-}return$makeTerminalAttributesfp-- Set termios c_flagsetControlFlag ::CTcflag->TerminalAttributes ->TerminalAttributes setControlFlag :: CTcflag -> TerminalAttributes -> TerminalAttributes
setControlFlag CTcflag
flag TerminalAttributes
termios =IO TerminalAttributes -> TerminalAttributes
forall a. IO a -> a
unsafePerformIO(IO TerminalAttributes -> TerminalAttributes)
-> IO TerminalAttributes -> TerminalAttributes
forall a b. (a -> b) -> a -> b
$doForeignPtr CTermios
fp <-Int -> IO (ForeignPtr CTermios)
forall a. Int -> IO (ForeignPtr a)
mallocForeignPtrBytes(Int
60){-# LINE 1073 "System/Posix/Terminal/Common.hsc" #-}withForeignPtrfp$\p1->dowithTerminalAttributestermios$\p2->docopyBytesp1p2(60){-# LINE 1076 "System/Posix/Terminal/Common.hsc" #-}cflag<-((\hsc_ptr->peekByteOffhsc_ptr8))p2{-# LINE 1077 "System/Posix/Terminal/Common.hsc" #-}((\hsc_ptr->pokeByteOffhsc_ptr8))p1(cflag.|.flag){-# LINE 1078 "System/Posix/Terminal/Common.hsc" #-}return$makeTerminalAttributesfp-- Examine termios c_flagtestControlFlag ::CTcflag->TerminalAttributes ->BooltestControlFlag :: CTcflag -> TerminalAttributes -> Bool
testControlFlag CTcflag
flag TerminalAttributes
termios =IO Bool -> Bool
forall a. IO a -> a
unsafePerformIO(IO Bool -> Bool) -> IO Bool -> Bool
forall a b. (a -> b) -> a -> b
$TerminalAttributes -> (Ptr CTermios -> IO Bool) -> IO Bool
forall a. TerminalAttributes -> (Ptr CTermios -> IO a) -> IO a
withTerminalAttributes TerminalAttributes
termios ((Ptr CTermios -> IO Bool) -> IO Bool)
-> (Ptr CTermios -> IO Bool) -> IO Bool
forall a b. (a -> b) -> a -> b
$\Ptr CTermios
p ->doCTcflag
cflag <-((\Ptr CTermios
hsc_ptr ->Ptr CTermios -> Int -> IO CTcflag
forall b. Ptr b -> Int -> IO CTcflag
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOffPtr CTermios
hsc_ptr Int
8))Ptr CTermios
p {-# LINE 1086 "System/Posix/Terminal/Common.hsc" #-}return$!((cflag.&.flag)/=0)-- Clear termios l_flagclearLocalFlag ::CTcflag->TerminalAttributes ->TerminalAttributes clearLocalFlag :: CTcflag -> TerminalAttributes -> TerminalAttributes
clearLocalFlag CTcflag
flag TerminalAttributes
termios =IO TerminalAttributes -> TerminalAttributes
forall a. IO a -> a
unsafePerformIO(IO TerminalAttributes -> TerminalAttributes)
-> IO TerminalAttributes -> TerminalAttributes
forall a b. (a -> b) -> a -> b
$doForeignPtr CTermios
fp <-Int -> IO (ForeignPtr CTermios)
forall a. Int -> IO (ForeignPtr a)
mallocForeignPtrBytes(Int
60){-# LINE 1093 "System/Posix/Terminal/Common.hsc" #-}withForeignPtrfp$\p1->dowithTerminalAttributestermios$\p2->docopyBytesp1p2(60){-# LINE 1096 "System/Posix/Terminal/Common.hsc" #-}lflag<-((\hsc_ptr->peekByteOffhsc_ptr12))p2{-# LINE 1097 "System/Posix/Terminal/Common.hsc" #-}((\hsc_ptr->pokeByteOffhsc_ptr12))p1(lflag.&.complementflag){-# LINE 1098 "System/Posix/Terminal/Common.hsc" #-}return$makeTerminalAttributesfp-- Set termios l_flagsetLocalFlag ::CTcflag->TerminalAttributes ->TerminalAttributes setLocalFlag :: CTcflag -> TerminalAttributes -> TerminalAttributes
setLocalFlag CTcflag
flag TerminalAttributes
termios =IO TerminalAttributes -> TerminalAttributes
forall a. IO a -> a
unsafePerformIO(IO TerminalAttributes -> TerminalAttributes)
-> IO TerminalAttributes -> TerminalAttributes
forall a b. (a -> b) -> a -> b
$doForeignPtr CTermios
fp <-Int -> IO (ForeignPtr CTermios)
forall a. Int -> IO (ForeignPtr a)
mallocForeignPtrBytes(Int
60){-# LINE 1105 "System/Posix/Terminal/Common.hsc" #-}withForeignPtrfp$\p1->dowithTerminalAttributestermios$\p2->docopyBytesp1p2(60){-# LINE 1108 "System/Posix/Terminal/Common.hsc" #-}lflag<-((\hsc_ptr->peekByteOffhsc_ptr12))p2{-# LINE 1109 "System/Posix/Terminal/Common.hsc" #-}((\hsc_ptr->pokeByteOffhsc_ptr12))p1(lflag.|.flag){-# LINE 1110 "System/Posix/Terminal/Common.hsc" #-}return$makeTerminalAttributesfp-- Examine termios l_flagtestLocalFlag ::CTcflag->TerminalAttributes ->BooltestLocalFlag :: CTcflag -> TerminalAttributes -> Bool
testLocalFlag CTcflag
flag TerminalAttributes
termios =IO Bool -> Bool
forall a. IO a -> a
unsafePerformIO(IO Bool -> Bool) -> IO Bool -> Bool
forall a b. (a -> b) -> a -> b
$TerminalAttributes -> (Ptr CTermios -> IO Bool) -> IO Bool
forall a. TerminalAttributes -> (Ptr CTermios -> IO a) -> IO a
withTerminalAttributes TerminalAttributes
termios ((Ptr CTermios -> IO Bool) -> IO Bool)
-> (Ptr CTermios -> IO Bool) -> IO Bool
forall a b. (a -> b) -> a -> b
$\Ptr CTermios
p ->doCTcflag
lflag <-((\Ptr CTermios
hsc_ptr ->Ptr CTermios -> Int -> IO CTcflag
forall b. Ptr b -> Int -> IO CTcflag
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOffPtr CTermios
hsc_ptr Int
12))Ptr CTermios
p {-# LINE 1118 "System/Posix/Terminal/Common.hsc" #-}return$!((lflag.&.flag)/=0)-- Clear termios o_flagclearOutputFlag ::CTcflag->TerminalAttributes ->TerminalAttributes clearOutputFlag :: CTcflag -> TerminalAttributes -> TerminalAttributes
clearOutputFlag CTcflag
flag TerminalAttributes
termios =IO TerminalAttributes -> TerminalAttributes
forall a. IO a -> a
unsafePerformIO(IO TerminalAttributes -> TerminalAttributes)
-> IO TerminalAttributes -> TerminalAttributes
forall a b. (a -> b) -> a -> b
$doForeignPtr CTermios
fp <-Int -> IO (ForeignPtr CTermios)
forall a. Int -> IO (ForeignPtr a)
mallocForeignPtrBytes(Int
60){-# LINE 1125 "System/Posix/Terminal/Common.hsc" #-}withForeignPtrfp$\p1->dowithTerminalAttributestermios$\p2->docopyBytesp1p2(60){-# LINE 1128 "System/Posix/Terminal/Common.hsc" #-}oflag<-((\hsc_ptr->peekByteOffhsc_ptr4))p2{-# LINE 1129 "System/Posix/Terminal/Common.hsc" #-}((\hsc_ptr->pokeByteOffhsc_ptr4))p1(oflag.&.complementflag){-# LINE 1130 "System/Posix/Terminal/Common.hsc" #-}return$makeTerminalAttributesfp-- Set termios o_flagsetOutputFlag ::CTcflag->TerminalAttributes ->TerminalAttributes setOutputFlag :: CTcflag -> TerminalAttributes -> TerminalAttributes
setOutputFlag CTcflag
flag TerminalAttributes
termios =IO TerminalAttributes -> TerminalAttributes
forall a. IO a -> a
unsafePerformIO(IO TerminalAttributes -> TerminalAttributes)
-> IO TerminalAttributes -> TerminalAttributes
forall a b. (a -> b) -> a -> b
$doForeignPtr CTermios
fp <-Int -> IO (ForeignPtr CTermios)
forall a. Int -> IO (ForeignPtr a)
mallocForeignPtrBytes(Int
60){-# LINE 1137 "System/Posix/Terminal/Common.hsc" #-}withForeignPtrfp$\p1->dowithTerminalAttributestermios$\p2->docopyBytesp1p2(60){-# LINE 1140 "System/Posix/Terminal/Common.hsc" #-}oflag<-((\hsc_ptr->peekByteOffhsc_ptr4))p2{-# LINE 1141 "System/Posix/Terminal/Common.hsc" #-}((\hsc_ptr->pokeByteOffhsc_ptr4))p1(oflag.|.flag){-# LINE 1142 "System/Posix/Terminal/Common.hsc" #-}return$makeTerminalAttributesfp-- Examine termios o_flagtestOutputFlag ::CTcflag->TerminalAttributes ->BooltestOutputFlag :: CTcflag -> TerminalAttributes -> Bool
testOutputFlag CTcflag
flag TerminalAttributes
termios =IO Bool -> Bool
forall a. IO a -> a
unsafePerformIO(IO Bool -> Bool) -> IO Bool -> Bool
forall a b. (a -> b) -> a -> b
$TerminalAttributes -> (Ptr CTermios -> IO Bool) -> IO Bool
forall a. TerminalAttributes -> (Ptr CTermios -> IO a) -> IO a
withTerminalAttributes TerminalAttributes
termios ((Ptr CTermios -> IO Bool) -> IO Bool)
-> (Ptr CTermios -> IO Bool) -> IO Bool
forall a b. (a -> b) -> a -> b
$\Ptr CTermios
p ->doCTcflag
oflag <-((\Ptr CTermios
hsc_ptr ->Ptr CTermios -> Int -> IO CTcflag
forall b. Ptr b -> Int -> IO CTcflag
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOffPtr CTermios
hsc_ptr Int
4))Ptr CTermios
p {-# LINE 1150 "System/Posix/Terminal/Common.hsc" #-}return$!((oflag.&.flag)/=0)withNewTermios ::TerminalAttributes ->(PtrCTermios->IOa )->IOTerminalAttributes withNewTermios :: forall a.
TerminalAttributes
-> (Ptr CTermios -> IO a) -> IO TerminalAttributes
withNewTermios TerminalAttributes
termios Ptr CTermios -> IO a
action =doForeignPtr CTermios
fp1 <-Int -> IO (ForeignPtr CTermios)
forall a. Int -> IO (ForeignPtr a)
mallocForeignPtrBytes(Int
60){-# LINE 1156 "System/Posix/Terminal/Common.hsc" #-}withForeignPtrfp1$\p1->dowithTerminalAttributestermios$\p2->docopyBytesp1p2(60){-# LINE 1159 "System/Posix/Terminal/Common.hsc" #-}_<-actionp1return()TerminalAttributes -> IO TerminalAttributes
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(TerminalAttributes -> IO TerminalAttributes)
-> TerminalAttributes -> IO TerminalAttributes
forall a b. (a -> b) -> a -> b
$ForeignPtr CTermios -> TerminalAttributes
makeTerminalAttributes ForeignPtr CTermios
fp1 {-# LINE 1164 "System/Posix/Terminal/Common.hsc" #-}

AltStyle によって変換されたページ (->オリジナル) /