{-# 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->TerminalAttributesmakeTerminalAttributes=TerminalAttributeswithTerminalAttributes::TerminalAttributes->(PtrCTermios->IOa)->IOawithTerminalAttributes(TerminalAttributestermios)=withForeignPtrtermios{-# 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->TerminalAttributeswithoutModetermiosInterruptOnBreak=clearInputFlag(2)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->TerminalAttributeswithModetermiosInterruptOnBreak=setInputFlag(2)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->BoolterminalModeInterruptOnBreak=testInputFlag(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->IntbitsPerBytetermios=unsafePerformIO$dowithTerminalAttributestermios$\p->docflag<-((\hsc_ptr->peekByteOffhsc_ptr8))p{-# LINE 401 "System/Posix/Terminal/Common.hsc" #-}return$!(word2Bits(cflag.&.(48))){-# LINE 402 "System/Posix/Terminal/Common.hsc" #-}whereword2Bits::CTcflag->Intword2Bitsx=ifx==(0)then5{-# LINE 406 "System/Posix/Terminal/Common.hsc" #-}elseifx==(16)then6{-# LINE 407 "System/Posix/Terminal/Common.hsc" #-}elseifx==(32)then7{-# LINE 408 "System/Posix/Terminal/Common.hsc" #-}elseifx==(48)then8{-# LINE 409 "System/Posix/Terminal/Common.hsc" #-}else0withBits::TerminalAttributes->Int->TerminalAttributeswithBitstermiosbits=unsafePerformIO$dowithNewTermiostermios$\p->docflag<-((\hsc_ptr->peekByteOffhsc_ptr8))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->CTcflagmask5=(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->MaybeCharcontrolChartermioscc=unsafePerformIO$dowithTerminalAttributestermios$\p->doletc_cc=((\hsc_ptr->hsc_ptr`plusPtr`17))p{-# LINE 537 "System/Posix/Terminal/Common.hsc" #-}val<-peekElemOffc_cc(cc2Wordcc)ifval==((0)::CCc){-# LINE 539 "System/Posix/Terminal/Common.hsc" #-}thenreturnNothingelsereturn(Just(chr(fromEnumval)))withCC::TerminalAttributes->(ControlCharacter,Char)->TerminalAttributeswithCCtermios(cc,c)=unsafePerformIO$dowithNewTermiostermios$\p->doletc_cc=((\hsc_ptr->hsc_ptr`plusPtr`17))p{-# LINE 548 "System/Posix/Terminal/Common.hsc" #-}pokeElemOffc_cc(cc2Wordcc)(fromIntegral(ordc)::CCc)withoutCC::TerminalAttributes->ControlCharacter->TerminalAttributeswithoutCCtermioscc=unsafePerformIO$dowithNewTermiostermios$\p->doletc_cc=((\hsc_ptr->hsc_ptr`plusPtr`17))p{-# LINE 556 "System/Posix/Terminal/Common.hsc" #-}pokeElemOffc_cc(cc2Wordcc)((0)::CCc){-# LINE 557 "System/Posix/Terminal/Common.hsc" #-}inputTime::TerminalAttributes->IntinputTimetermios=unsafePerformIO$dowithTerminalAttributestermios$\p->doc<-peekElemOff(((\hsc_ptr->hsc_ptr`plusPtr`17))p)(5){-# LINE 562 "System/Posix/Terminal/Common.hsc" #-}return(fromEnum(c::CCc))withTime::TerminalAttributes->Int->TerminalAttributeswithTimetermiostime=unsafePerformIO$dowithNewTermiostermios$\p->doletc_cc=((\hsc_ptr->hsc_ptr`plusPtr`17))p{-# LINE 568 "System/Posix/Terminal/Common.hsc" #-}pokeElemOffc_cc(5)(fromIntegraltime::CCc){-# LINE 569 "System/Posix/Terminal/Common.hsc" #-}minInput::TerminalAttributes->IntminInputtermios=unsafePerformIO$dowithTerminalAttributestermios$\p->doc<-peekElemOff(((\hsc_ptr->hsc_ptr`plusPtr`17))p)(6){-# LINE 574 "System/Posix/Terminal/Common.hsc" #-}return(fromEnum(c::CCc))withMinInput::TerminalAttributes->Int->TerminalAttributeswithMinInputtermioscount=unsafePerformIO$dowithNewTermiostermios$\p->doletc_cc=((\hsc_ptr->hsc_ptr`plusPtr`17))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=BaudRateCSpeedderiving(Eq,Ord,Show,Enum,Real,Num)-- | Hang uppatternB0::BaudRatepatternB0=BaudRate(0){-# LINE 600 "System/Posix/Terminal/Common.hsc" #-}-- | 50 baudpatternB50::BaudRatepatternB50=BaudRate(1){-# LINE 603 "System/Posix/Terminal/Common.hsc" #-}-- | 75 baudpatternB75::BaudRatepatternB75=BaudRate(2){-# LINE 606 "System/Posix/Terminal/Common.hsc" #-}-- | 110 baudpatternB110::BaudRatepatternB110=BaudRate(3){-# LINE 609 "System/Posix/Terminal/Common.hsc" #-}-- | 134.5 baudpatternB134::BaudRatepatternB134=BaudRate(4){-# LINE 612 "System/Posix/Terminal/Common.hsc" #-}-- | 150 baudpatternB150::BaudRatepatternB150=BaudRate(5){-# LINE 615 "System/Posix/Terminal/Common.hsc" #-}-- | 200 baudpatternB200::BaudRatepatternB200=BaudRate(6){-# LINE 618 "System/Posix/Terminal/Common.hsc" #-}-- | 300 baudpatternB300::BaudRatepatternB300=BaudRate(7){-# LINE 621 "System/Posix/Terminal/Common.hsc" #-}-- | 600 baudpatternB600::BaudRatepatternB600=BaudRate(8){-# LINE 624 "System/Posix/Terminal/Common.hsc" #-}-- | 1200 baudpatternB1200::BaudRatepatternB1200=BaudRate(9){-# LINE 627 "System/Posix/Terminal/Common.hsc" #-}-- | 1800 baudpatternB1800::BaudRatepatternB1800=BaudRate(10){-# LINE 630 "System/Posix/Terminal/Common.hsc" #-}-- | 2400 baudpatternB2400::BaudRatepatternB2400=BaudRate(11){-# LINE 633 "System/Posix/Terminal/Common.hsc" #-}-- | 4800 baudpatternB4800::BaudRatepatternB4800=BaudRate(12){-# LINE 636 "System/Posix/Terminal/Common.hsc" #-}-- | 9600 baudpatternB9600::BaudRatepatternB9600=BaudRate(13){-# LINE 639 "System/Posix/Terminal/Common.hsc" #-}-- | 19200 baudpatternB19200::BaudRatepatternB19200=BaudRate(14){-# LINE 642 "System/Posix/Terminal/Common.hsc" #-}-- | 38400 baudpatternB38400::BaudRatepatternB38400=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::BaudRatepatternB57600=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::BaudRatepatternB115200=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::BaudRatepatternB230400=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::BaudRatepatternB460800=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::BaudRatepatternB500000=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::BaudRatepatternB576000=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::BaudRatepatternB921600=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::BaudRatepatternB1000000=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::BaudRatepatternB1152000=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::BaudRatepatternB1500000=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::BaudRatepatternB2000000=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::BaudRatepatternB2500000=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::BaudRatepatternB3000000=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::BaudRatepatternB3500000=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::BaudRatepatternB4000000=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->BaudRateinputSpeedtermios=unsafePerformIO$dowithTerminalAttributestermios$\p->dow<-c_cfgetispeedpreturn(BaudRatew)foreignimportcapiunsafe"termios.h cfgetispeed"c_cfgetispeed::PtrCTermios->IOCSpeedwithInputSpeed::TerminalAttributes->BaudRate->TerminalAttributeswithInputSpeedtermios(BaudRatebr)=unsafePerformIO$dowithNewTermiostermios$\p->c_cfsetispeedpbrforeignimportcapiunsafe"termios.h cfsetispeed"c_cfsetispeed::PtrCTermios->CSpeed->IOCIntoutputSpeed::TerminalAttributes->BaudRateoutputSpeedtermios=unsafePerformIO$dowithTerminalAttributestermios$\p->dow<-c_cfgetospeedpreturn(BaudRatew)foreignimportcapiunsafe"termios.h cfgetospeed"c_cfgetospeed::PtrCTermios->IOCSpeedwithOutputSpeed::TerminalAttributes->BaudRate->TerminalAttributeswithOutputSpeedtermios(BaudRatebr)=unsafePerformIO$dowithNewTermiostermios$\p->c_cfsetospeedpbrforeignimportcapiunsafe"termios.h cfsetospeed"c_cfsetospeed::PtrCTermios->CSpeed->IOCInt-- | @getTerminalAttributes fd@ calls @tcgetattr@ to obtain-- the @TerminalAttributes@ associated with @Fd@ @fd@.getTerminalAttributes::Fd->IOTerminalAttributesgetTerminalAttributes(Fdfd)=dofp<-mallocForeignPtrBytes(60){-# LINE 811 "System/Posix/Terminal/Common.hsc" #-}withForeignPtrfp$\p->throwErrnoIfMinus1_"getTerminalAttributes"(c_tcgetattrfdp)return$makeTerminalAttributesfpforeignimportcapiunsafe"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(Fdfd)termiosstate=dowithTerminalAttributestermios$\p->throwErrnoIfMinus1_"setTerminalAttributes"(c_tcsetattrfd(state2Intstate)p)wherestate2Int::TerminalState->CIntstate2IntImmediately=(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(Fdfd)duration=throwErrnoIfMinus1_"sendBreak"(c_tcsendbreakfd(fromIntegralduration))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(Fdfd)queue=throwErrnoIfMinus1_"discardData"(c_tcflushfd(queue2Intqueue))wherequeue2Int::QueueSelector->CIntqueue2IntInputQueue=(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(Fdfd)action=throwErrnoIfMinus1_"controlFlow"(c_tcflowfd(action2Intaction))whereaction2Int::FlowAction->CIntaction2IntSuspendOutput=(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(Fdfd)=dothrowErrnoIfMinus1"getTerminalProcessGroupID"(c_tcgetpgrpfd)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(Fdfd)pgid=throwErrnoIfMinus1_"setTerminalProcessGroupID"(c_tcsetpgrpfdpgid)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(Fdfd)=dor<-c_isattyfdreturn(r==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->Intcc2WordEndOfFile=(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->TerminalAttributesclearInputFlagflagtermios=unsafePerformIO$dofp<-mallocForeignPtrBytes(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->TerminalAttributessetInputFlagflagtermios=unsafePerformIO$dofp<-mallocForeignPtrBytes(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->BooltestInputFlagflagtermios=unsafePerformIO$withTerminalAttributestermios$\p->doiflag<-((\hsc_ptr->peekByteOffhsc_ptr0))p{-# LINE 1054 "System/Posix/Terminal/Common.hsc" #-}return$!((iflag.&.flag)/=0)-- Clear termios c_flagclearControlFlag::CTcflag->TerminalAttributes->TerminalAttributesclearControlFlagflagtermios=unsafePerformIO$dofp<-mallocForeignPtrBytes(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->TerminalAttributessetControlFlagflagtermios=unsafePerformIO$dofp<-mallocForeignPtrBytes(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->BooltestControlFlagflagtermios=unsafePerformIO$withTerminalAttributestermios$\p->docflag<-((\hsc_ptr->peekByteOffhsc_ptr8))p{-# LINE 1086 "System/Posix/Terminal/Common.hsc" #-}return$!((cflag.&.flag)/=0)-- Clear termios l_flagclearLocalFlag::CTcflag->TerminalAttributes->TerminalAttributesclearLocalFlagflagtermios=unsafePerformIO$dofp<-mallocForeignPtrBytes(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->TerminalAttributessetLocalFlagflagtermios=unsafePerformIO$dofp<-mallocForeignPtrBytes(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->BooltestLocalFlagflagtermios=unsafePerformIO$withTerminalAttributestermios$\p->dolflag<-((\hsc_ptr->peekByteOffhsc_ptr12))p{-# LINE 1118 "System/Posix/Terminal/Common.hsc" #-}return$!((lflag.&.flag)/=0)-- Clear termios o_flagclearOutputFlag::CTcflag->TerminalAttributes->TerminalAttributesclearOutputFlagflagtermios=unsafePerformIO$dofp<-mallocForeignPtrBytes(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->TerminalAttributessetOutputFlagflagtermios=unsafePerformIO$dofp<-mallocForeignPtrBytes(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->BooltestOutputFlagflagtermios=unsafePerformIO$withTerminalAttributestermios$\p->dooflag<-((\hsc_ptr->peekByteOffhsc_ptr4))p{-# LINE 1150 "System/Posix/Terminal/Common.hsc" #-}return$!((oflag.&.flag)/=0)withNewTermios::TerminalAttributes->(PtrCTermios->IOa)->IOTerminalAttributeswithNewTermiostermiosaction=dofp1<-mallocForeignPtrBytes(60){-# LINE 1156 "System/Posix/Terminal/Common.hsc" #-}withForeignPtrfp1$\p1->dowithTerminalAttributestermios$\p2->docopyBytesp1p2(60){-# LINE 1159 "System/Posix/Terminal/Common.hsc" #-}_<-actionp1return()return$makeTerminalAttributesfp1{-# LINE 1164 "System/Posix/Terminal/Common.hsc" #-}