home *** CD-ROM | disk | FTP | other *** search
- '***********************************************************************
- ' StdComm.rlz Version 1.1
- '
- ' Standard Serial Communication Library
- '
- ' Copyright ⌐ 1991-1992 Computer Associates International, Inc.
- ' All rights reserved.
- '
- '***********************************************************************
-
- IF QVar(%%StdComm, _Defined) THEN
- EXIT MACRO
- END IF
- %%StdComm = 1
-
- RUN "StdError"
-
- CommError = {"Invalid port number", "Port is already open", "Port is not open", "Cannot allocate queues", "Default parameter error"}
- CommError[10:12] = {"Hardware device not found", "Illegal byte size", "Unsupported baud rate"}
-
- '*** Constants for Parity
-
- _NoParity = 0
- _OddParity = 1
- _EvenParity = 2
- _MarkParity = 3
- _SpaceParity = 4
-
- '*** Constants for CommQ
-
- _CQ_BaudRate = 1
- _CQ_ReadBuffSize = 2
- _CQ_WriteBuffSize = 3
- _CQ_ByteSize = 4
- _CQ_StopBits = 5
- _CQ_Parity = 6
- _CQ_ReadPending = 7
- _CQ_WritePending = 8
- _CQ_XON = 9
- _CQ_CID = 10
-
- EXTERNAL "Standard" CUSTOMCONTROLS
-
- %%_Frm_last = FormQ(_Selected)
- FormNew(32700)
- FormSetObject(10, "StdCommClass", "", 0, 0)
- IF %%_Frm_last THEN
- FormSelect(%%_Frm_last)
- END IF
- CLEAR %%_Frm_last
-
- PROC CommOpen(rsPortNum, rsBaudRate, rsReadBuffSize, rsWriteBuffSize, rsByteSize, rsStopBits, rsParity)
- LOCAL retval
-
- EXTERNAL "standard.exe" FUNC SerialOpen(INTEGER, INTEGER, WORD, WORD, INTEGER, INTEGER, INTEGER) AS INTEGER
-
- ECType(rsPortNum, _Real + _Scalar, 1)
- ECRange(rsPortNum, 1, 4, 1)
- ECType(rsBaudRate, _Real + _Scalar, 2)
- ECType(rsReadBuffSize, _Real + _Scalar, 3)
- ECRange(rsReadBuffSize, 1, 65535, 3)
- ECType(rsWriteBuffSize, _Real + _Scalar, 4)
- ECRange(rsWriteBuffSize, 1, 65535, 4)
- ECType(rsByteSize, _Real + _Scalar, 5)
- ECRange(rsByteSize, 7, 8, 5)
- ECType(rsStopBits, _Real + _Scalar, 6)
- ECRange(rsStopBits, 1, 2, 6)
- ECType(rsParity, _Real + _Scalar, 7)
- ECRange(rsParity, 0, 4, 7)
-
- rsStopBits = 2 * (rsStopBits - 1)
-
- retval = SerialOpen(rsPortNum, rsBaudRate, rsReadBuffSize, rsWriteBuffSize, rsByteSize, rsStopBits, rsParity)
- IF retval < 0 THEN
- STOP USING CommError[retval * -1], 1
- END IF
- END PROC
-
- PROC CommClose(rsPortNum)
- LOCAL retval
-
- EXTERNAL "standard.exe" FUNC SerialClose(INTEGER) AS INTEGER
-
- ECType(rsPortNum, _Real + _Scalar, 1)
- ECRange(rsPortNum, 1, 4, 1)
- retval = SerialClose(rsPortNum)
- IF retval < 0 THEN
- STOP USING CommError[retval * -1], 1
- END IF
- END PROC
-
- EXTERNAL "standard.exe" FUNC SerialRead(INTEGER, POINTER, INTEGER) AS INTEGER
- FUNC CommRead(rsPortNum, rsNumBytes)
- LOCAL buffer, n
-
- ECType(rsPortNum, _Real + _Scalar, 1)
- ECRange(rsPortNum, 1, 4, 1)
- ECType(rsNumBytes, _Real + _Scalar, 2)
- ECRange(rsNumBytes, 0, 65535, 2)
-
- buffer = String$(rsNumBytes + 1, 0)
- n = SerialRead(rsPortNum, buffer, rsNumBytes)
- IF n < 0 THEN
- STOP USING CommError[n * -1], 1
- ELSE
- RETURN Left$(buffer, n)
- END IF
- END FUNC
-
- EXTERNAL "standard.exe" FUNC SerialWrite(INTEGER, POINTER, INTEGER) AS INTEGER
- PROC CommWrite(rsPortNum, asData)
- LOCAL buffer, n
-
- ECType(rsPortNum, _Real + _Scalar, 1)
- ECRange(rsPortNum, 1, 4, 1)
- ECType(asData, _Alpha + _Scalar, 2)
-
- n = SerialWrite(rsPortNum, asData, Len(asData))
-
- IF n < 0 THEN
- STOP USING CommError[n * -1], 1
- END IF
- END PROC
-
- FUNC CommQ(rsPortNum)
-
- FUNC WordToReal(s)
- RETURN Asc(Left$(s, 1)) + Asc(Right$(s, 1)) * 256
- END FUNC
-
- LOCAL buffer, retval
-
- EXTERNAL "standard.exe" FUNC SerialQ(INTEGER, POINTER) AS INTEGER
-
- ECType(rsPortNum, _Real + _Scalar, 1)
- ECRange(rsPortNum, 1, 4, 1)
- buffer = String$(22, 0)
- n = SerialQ(rsPortNum, buffer)
- IF n < 0 THEN
- STOP USING CommError[n * -1], 1
- END IF
- retval[_CQ_BaudRate] = WordToReal(Mid$(Buffer, 3, 2))
- retval[_CQ_ReadBuffSize] = WordToReal(Mid$(Buffer, 5, 2))
- retval[_CQ_WriteBuffSize] = WordToReal(Mid$(Buffer, 7, 2))
- retval[_CQ_ByteSize] = WordToReal(Mid$(Buffer, 9, 2))
- retval[_CQ_StopBits] = (WordToReal(Mid$(Buffer, 11, 2)))/2 + 1
- retval[_CQ_Parity] = WordToReal(Mid$(Buffer, 13, 2))
- retval[_CQ_ReadPending] = WordToReal(Mid$(Buffer, 15, 2))
- retval[_CQ_WritePending] = WordToReal(Mid$(Buffer, 17, 2))
- retval[_CQ_XON] = WordToReal(Mid$(Buffer, 19, 2))
- retval[_CQ_CID] = WordToReal(Mid$(Buffer, 21, 2))
-
- RETURN retval
- END FUNC
-
-