home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 3 Comm
/
03-Comm.zip
/
ASYNCH.ZIP
/
ASYNCHDV.CLS
next >
Wrap
Text File
|
1990-10-29
|
18KB
|
583 lines
Object subclass: #AsynchDevice
instanceVariableNames:
'device handle lineControl dcbInfo '
classVariableNames: ''
poolDictionaries:
'PMConstants ' !
!AsynchDevice class methods !
open: anInteger
"Answer a AsynchDevice opened on the device specified by
anInteger (1 or 2 or higher if supported)."
^super new
open: anInteger.! !
!AsynchDevice methods !
baudRate
"Answer the baud rate of the device."
| baud answer |
baud := PMLong new.
(answer := DosLibrary devIOCtl: baud asParameter
parms: nil
function: 16r61
category: 1
device: handle) ~= 0 ifTrue: [^DosDLL OS2Error: answer].
^baud asInteger!
breakOff
"Turn off the break character."
| err answer |
err := PMLong new.
(answer := DosLibrary devIOCtl: err asParameter
parms: nil
function: 16r45
category: 1
device: handle) ~= 0 ifTrue: [^DosDLL OS2Error: answer].
self readLineControl.
^err asInteger!
breakOn
"Turn on the break character."
| err answer |
err := PMLong new.
(answer := DosLibrary devIOCtl: err asParameter
parms: nil
function: 16r4B
category: 1
device: handle) ~= 0 ifTrue: [^DosDLL OS2Error: answer].
self readLineControl.
^err asInteger!
breakReplacementChar
"Answer the character used for break replacement."
^dcbInfo breakReplacementChar!
close
"Close the asynch device"
handle close.
handle := nil.
device := nil!
ctsOn
"Answer a boolean indicating whether clear-to-send signal
is on."
^(self readModemInput bitAnd: 16r10) ~= 0!
dataBits
"Answer the current setting for data bits for the device."
^lineControl dataBits!
dcdOn
"Answer a boolean indicating whether data-carrier-detect signal
is on."
^(self readModemInput bitAnd: 16r80) ~= 0!
device
"Answer the communications device number."
^device!
dsrOn
"Answer a boolean indicating whether data-set-ready signal is on."
^(self readModemInput bitAnd: 16r20) ~= 0!
dtrOn
"Answer a boolean indicating whether data-terminal-ready
signal is on."
^(self readModemOutput bitAnd: 16r1) ~= 0!
errorReplacementChar
"Answer the character used for error replacement."
^dcbInfo errorReplacementChar!
inqueCount
"Answer the number of characters in the receive queue."
| count answer |
count := PMLong new.
(answer := DosLibrary devIOCtl: count asParameter
parms: nil
function: 16r68
category: 1
device: handle) ~= 0 ifTrue: [^DosDLL OS2Error: answer].
^count asInteger!
modeAutoReceive
"Answer automatic receive flow control (xon/xoff) on or off."
^dcbInfo modeAutoReceive!
modeAutoTransmit
"Answer automatic transmit flow control (xon/xoff) on or off."
^dcbInfo modeAutoTransmit!
modeBreakChar
"Answer break replacement character on or off."
^dcbInfo modeBreakChar!
modeCtsHandshake
"Answer output handshaking using the clear-to-send signal
on or off."
^dcbInfo modeCtsHandshake!
modeDcdHandshake
"Answer output handshaking using the data-carrier-detect
signal on or off."
^dcbInfo modeDcdHandshake!
modeDsrHandshake
"Answer output handshaking using the data-set-ready signal on
or off."
^dcbInfo modeDsrHandshake!
modeDsrSensitivity
"Answer input sensitivity using the data-set-ready signal on
or off."
^dcbInfo modeDsrSensitivity!
modeDtrControl
"Answer data-terminal-ready control mode on or off."
^dcbInfo modeDtrControl!
modeDtrHandshake
"Answer data-terminal-ready input handshaking mode on or
off."
^dcbInfo modeDtrHandshake!
modeErrorChar
"Answer error replacement character on or off."
^dcbInfo modeErrorChar!
modeNowaitReadTimeout
"Answer no-wait read timeout processing on or off."
^dcbInfo modeNowaitReadTimeout!
modeNoWriteTimeout
"Answer write infinite timeout processing on or off."
^dcbInfo modeNoWriteTimeout!
modeNullStripping
"Answer removal of null bytes on or off."
^dcbInfo modeNullStripping!
modeReadTimeout
"Answer normal read timeout processing on or off."
^dcbInfo modeReadTimeout!
modeRtsControl
"Answer the request-to-send control mode on or off."
^dcbInfo modeRtsControl!
modeTransmitToggle
"Answer toggling on transmit mode on or off."
^dcbInfo modeTransmitToggle!
modeWaitReadTimeout
"Answer wait-for-something read timeout processing on
or off."
^dcbInfo modeWaitReadTimeout!
open: anInteger
"Open the specified asynch device"
device := anInteger.
handle := FileHandle openAsynchDevice: device.
self
readLineControl;
readDcbInfo;
setModeDtrControl: true dtrHandshake: false
ctsHandshake: false dsrHandshake: false
dcdHandshake: false dsrSensitivity: false;
setModeAutoTransmit: false autoReceive: false
errorChar: false nullStripping: false breakChar: false
rtsControl: true rtsHandshake: false;
setModeNoWriteTimeout: false readTimeout: true
waitReadTimeout: false!
outqueCount
"Answer the number of characters in the transmit queue."
| count answer |
count := PMLong new.
(answer := DosLibrary devIOCtl: count asParameter
parms: nil
function: 16r69
category: 1
device: handle) ~= 0 ifTrue: [^DosDLL OS2Error: answer].
^count asInteger!
parity
"Answer the current setting for parity for the device."
^lineControl parity!
readCommError
"Answer the communications error word and clear it out."
| err answer |
err := PMLong new.
(answer := DosLibrary devIOCtl: err asParameter
parms: nil
function: 16r6D
category: 1
device: handle) ~= 0 ifTrue: [^DosDLL OS2Error: answer].
^err asInteger!
readCommEvent
"Answer the communications event flags and clear them out."
| flags answer |
flags := PMLong new.
(answer := DosLibrary devIOCtl: flags asParameter
parms: nil
function: 16r72
category: 1
device: handle) ~= 0 ifTrue: [^DosDLL OS2Error: answer].
^flags asInteger!
readCommStatus
"Answer the communication status of the device."
| flags answer |
flags := PMLong new.
(answer := DosLibrary devIOCtl: flags asParameter
parms: nil
function: 16r64
category: 1
device: handle) ~= 0 ifTrue: [^DosDLL OS2Error: answer].
^flags asInteger!
readDcbInfo
"Get the device control block information."
| answer |
dcbInfo isNil
ifTrue: [dcbInfo := PMDcbInfo new].
(answer := DosLibrary devIOCtl: dcbInfo asParameter
parms: nil
function: 16r73
category: 1
device: handle) ~= 0 ifTrue: [^DosDLL OS2Error: answer]!
readLineControl
"Get the line charcteristics of the device."
| answer |
lineControl isNil
ifTrue: [lineControl := PMLineControl new].
(answer := DosLibrary devIOCtl: lineControl asParameter
parms: nil
function: 16r62
category: 1
device: handle) ~= 0 ifTrue: [^DosDLL OS2Error: answer]!
readLineStatus
"Answer the data transmission status."
| status answer |
status := PMLong new.
(answer := DosLibrary devIOCtl: status asParameter
parms: nil
function: 16r65
category: 1
device: handle) ~= 0 ifTrue: [^DosDLL OS2Error: answer].
^status asInteger!
readModemInput
"Answer the modem control input signals of the device."
| control answer |
control := PMLong new.
(answer := DosLibrary devIOCtl: control asParameter
parms: nil
function: 16r67
category: 1
device: handle) ~= 0 ifTrue: [^DosDLL OS2Error: answer].
^control asInteger!
readModemOutput
"Answer the modem control output signals of the device."
| control answer |
control := PMLong new.
(answer := DosLibrary devIOCtl: control asParameter
parms: nil
function: 16r66
category: 1
device: handle) ~= 0 ifTrue: [^DosDLL OS2Error: answer].
^control asInteger!
readTimeout
"Answer the read timeout in hundredths of a second."
^dcbInfo readTimeout!
riOn
"Answer a boolean indicating whether ring indicator signal is on."
^(self readModemInput bitAnd: 16r40) ~= 0!
rtsOn
"Answer a boolean indicating whether request-to-send
signal is on."
^(self readModemOutput bitAnd: 16r2) ~= 0!
setBaudRate: anInteger
"Set the baud rate of the device."
| baud answer |
baud := PMLong fromInteger: anInteger.
(answer := DosLibrary devIOCtl: nil
parms: baud asParameter
function: 16r41
category: 1
device: handle) ~= 0 ifTrue: [^DosDLL OS2Error: answer]!
setBreakReplacementChar: aCharacter
"Set the character used for break replacement."
dcbInfo setBreakReplacementChar: aCharacter.
self writeDcbInfo!
setDataBits: anInteger
"Set the data bits of the device.
Data bits is in anInteger and can range from 5 to 8."
lineControl setDataBits: anInteger.
self writeLineControl!
setDataBits: anInteger parity: aCharacter stopBits: aNumber
"Set the data bits, parity, and stop bits of the device.
Data bits is in anInteger and can range from 5 to 8.
Parity can take the following values:
n - none, o - odd, e - even, m - mark, s - space.
Stop bits can take the values 1, 1.5, or 2."
lineControl
setDataBits: anInteger;
setParity: aCharacter;
setStopBits: aNumber.
self writeLineControl!
setErrorReplacementChar: aCharacter
"Set the character used for error replacement."
dcbInfo setErrorReplacementChar: aCharacter.
self writeDcbInfo!
setModeAutoReceive: aBoolean
"Set automatic receive flow control (xon/xoff) on or off."
dcbInfo setModeAutoReceive: aBoolean.
self writeDcbInfo!
setModeAutoTransmit: aBoolean
"Set automatic transmit flow control (xon/xoff) on or off."
dcbInfo setModeAutoTransmit: aBoolean.
self writeDcbInfo!
setModeAutoTransmit: aBool1 autoReceive: aBool2 errorChar: aBool3
nullStripping: aBool4 breakChar: aBool5 rtsControl: aBool6
rtsHandshake: aBool7
"Set control and handshaking modes on or off."
dcbInfo
setModeAutoTransmit: aBool1;
setModeAutoReceive: aBool2;
setModeErrorChar: aBool3;
setModeNullStripping: aBool4;
setModeBreakChar: aBool5;
setModeRtsControl: aBool6;
setModeRtsHandshake: aBool7.
self writeDcbInfo!
setModeBreakChar: aBoolean
"Set break replacement character on or off."
dcbInfo setModeBreakChar: aBoolean.
self writeDcbInfo!
setModeCtsHandshake: aBoolean
"Set output handshaking using the clear-to-send signal
on or off."
dcbInfo setModeCtsHandshake: aBoolean.
self writeDcbInfo!
setModeDcdHandshake: aBoolean
"Set output handshaking using the data-carrier-detect
signal on or off."
dcbInfo setModeDcdHandshake: aBoolean.
self writeDcbInfo!
setModeDsrHandshake: aBoolean
"Set output handshaking using the data-set-ready signal on
or off."
dcbInfo setModeDsrHandshake: aBoolean.
self writeDcbInfo!
setModeDsrSensitivity: aBoolean
"Set input sensitivity using the data-set-ready signal on
or off."
dcbInfo setModeDsrSensitivity: aBoolean.
self writeDcbInfo!
setModeDtrControl: aBoolean
"Set data-terminal-ready control mode on or off."
dcbInfo setModeDtrControl: aBoolean.
self writeDcbInfo!
setModeDtrControl: aBool1 dtrHandshake: aBool2 ctsHandshake: aBool3
dsrHandshake: aBool4 dcdHandshake: aBool5 dsrSensitivity: aBool6
"Set control and handshaking modes on or off."
dcbInfo
setModeDtrControl: aBool1;
setModeDtrHandshake: aBool2;
setModeCtsHandshake: aBool3;
setModeDsrHandshake: aBool4;
setModeDcdHandshake: aBool5;
setModeDsrSensitivity: aBool6.
self writeDcbInfo!
setModeDtrHandshake: aBoolean
"Set data-terminal-ready input handshaking mode on or
off."
dcbInfo setModeDtrHandshake: aBoolean.
self writeDcbInfo!
setModeErrorChar: aBoolean
"Set error replacement character on or off."
dcbInfo setModeErrorChar: aBoolean.
self writeDcbInfo!
setModeNowaitReadTimeout: aBoolean
"Set no-wait read timeout processing on or off."
dcbInfo setModeNowaitReadTimeout: aBoolean.
self writeDcbInfo!
setModeNoWriteTimeout: aBoolean
"Set write infinite timeout processing on or off."
dcbInfo setModeNoWriteTimeout: aBoolean.
self writeDcbInfo!
setModeNoWriteTimeout: aBool1 readTimeout: aBool2
waitReadTimeout: aBool3
"Set the time out processing flags on or off."
dcbInfo
setModeNoWriteTimeout: aBool1;
setModeReadTimeout: aBool2;
setModeWaitReadTimeout: aBool3.
self writeDcbInfo!
setModeNullStripping: aBoolean
"Set removal of null bytes on or off."
dcbInfo setModeNullStripping: aBoolean.
self writeDcbInfo!
setModeReadTimeout: aBoolean
"Set normal read timeout processing on or off."
dcbInfo setModeReadTimeout: aBoolean.
self writeDcbInfo!
setModeRtsControl: aBoolean
"Set the request-to-send control mode on or off."
dcbInfo setModeRtsControl: aBoolean.
self writeDcbInfo!
setModeTransmitToggle: aBoolean
"Set toggling on transmit mode on or off."
dcbInfo setModeTransmitToggle: aBoolean.
self writeDcbInfo!
setModeWaitReadTimeout: aBoolean
"Set wait-for-something read timeout processing on
or off."
dcbInfo setModeWaitReadTimeout: aBoolean.
self writeDcbInfo!
setParity: aCharacter
"Set the parity of the device.
Parity can take the following values:
n - none, o - odd, e - even, m - mark, s - space."
lineControl setParity: aCharacter.
self writeLineControl!
setReadTimeout: anInteger
"Set the read timeout in hundredths of a second."
dcbInfo setReadTimeout: anInteger.
self writeDcbInfo!
setStopBits: aNumber
"Set the stop bits of the device.
Stop bits can take the values 1, 1.5, or 2."
lineControl setStopBits: aNumber.
self writeLineControl!
setWriteTimeout: anInteger
"Set the write timeout in hundredths of a second."
dcbInfo setWriteTimeout: anInteger.
self writeDcbInfo!
setXOffChar: aCharacter
"Set the character used for xoff."
dcbInfo setXOffChar: aCharacter.
self writeDcbInfo!
setXOnChar: aCharacter
"Set the character used for xon."
dcbInfo setXOnChar: aCharacter.
self writeDcbInfo!
startTransmit
"Allow data transmission to be resumed."
| answer |
(answer := DosLibrary devIOCtl: nil
parms: nil
function: 16r48
category: 1
device: handle) ~= 0 ifTrue: [^DosDLL OS2Error: answer]!
stopBits
"Answer the current setting for stop bits for the device."
^lineControl stopBits!
stopTransmit
"Halt data transmission."
| answer |
(answer := DosLibrary devIOCtl: nil
parms: nil
function: 16r47
category: 1
device: handle) ~= 0 ifTrue: [^DosDLL OS2Error: answer]!
transmitImm: aCharacter
"Transmit the character immediately."
| answer ch |
ch := PMLong new.
ch byteAtOffset: 0 put: aCharacter asciiValue.
(answer := DosLibrary devIOCtl: nil
parms: ch asParameter
function: 16r44
category: 1
device: handle) ~= 0 ifTrue: [^DosDLL OS2Error: answer]!
transmittingBreak
"Answer a boolean indicating whether a break character is
being sent."
^lineControl transmittingBreak!
write: aString
"Write a string to the asynch device"
^handle deviceWrite: aString!
writeDcbInfo
"Put the device control block info to the device."
| answer |
(answer := DosLibrary devIOCtl: nil
parms: dcbInfo asParameter
function: 16r53
category: 1
device: handle) ~= 0 ifTrue: [^DosDLL OS2Error: answer]!
writeLineControl
"Put the line control structure to the device."
| answer |
(answer := DosLibrary devIOCtl: nil
parms: lineControl asParameter
function: 16r42
category: 1
device: handle) ~= 0 ifTrue: [^DosDLL OS2Error: answer]!
writeTimeout
"Answer the write timeout in hundredths of a second."
^dcbInfo writeTimeout!
xOffChar
"Answer the character used for xoff."
^dcbInfo xOffChar!
xOnChar
"Answer the character used for xon."
^dcbInfo xOnChar! !