Retro video games delivered to your door every month!
Click above to get retro games delivered to your door ever month!
X-Hacker.org- CA-Clipper Tools . Books 1-3 - <b>com_key()</b> http://www.X-Hacker.org [<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 COM_KEY()
 Monitors the port using key traps
------------------------------------------------------------------------------
 Syntax

     COM_KEY(<nComPort>,[<nKeyValue1>],[<nKeyValue2>])
        --> lActive

 Arguments

     <nComPort>  Designates the port (1 to 4) where particular activities
     are monitored.

     <nKeyValue1>  Designates the key code placed in the keyboard buffer
     in case an interrupt occurs.  Values permitted with CA-Clipper's SET KEY
     TO command are allowed, as a numeric value or a character.  If this
     parameter is not specified, then the port interrupts are not monitored.

     <nKeyValue2>  Designates another key code that is placed in the
     keyboard buffer when the receiving buffer is 75% or more full.  Values
     permitted with CA-Clipper's SET KEY TO command are allowed, as a numeric
     value or a character.  If this parameter is not specified, the buffer
     overflow is not monitored.

 Returns

     COM_KEY() returns .T. when at least one trap is switched on and returns
     .F. when all monitoring is switched off.

 Description

     COM_KEY() allows you to monitor a port while the program is in a READ.
     In this way, various events at the port can cause a particular key code,
     selected by the programmer, to be placed in the keyboard buffer.  This
     happens when:

     .  Data arrives at the port.

     .  A transmission error or a BREAK is recognized in the LSR.

     .  One of the signals in the MSR changes.

     .  The receiving buffer becomes 75% or more full.

     The MSR and LSR status, the number of errors that have already occurred,
     and the receipt of individual characters can be monitored through the
     <nKeyValue1> key code.  All information is saved in an internal memory
     area and can be queried from there using the COM_EVENT() function.  This
     procedure is important because the register or the flags that release
     the interrupt, are automatically reset during read access.  Otherwise,
     the information is lost.

     If the <nKeyValue2> parameter is specified, then one more procedure can
     be specified using the SET KEY TO command when the receiving buffer is
     75% or more full.  If the <nKeyValue2> parameter is specified, the
     <nKeyValue1> key code is no longer placed in the keyboard buffer when
     characters are received.  However, you can still monitor the MSR and
     LSR.

 Notes

     .  The status of the various interface registers are connected to
        the internal memory for as long as the event is "serviced" by a new
        COM_KEY() function call.  This means that the modifications made
        during this period cannot be lost.

     .  COM_KEY must be newly activated after every executed trap.
        This deletes information concerning the internal environment.

     .  When COM_KEY() places a character into the buffer because the
        buffer is close to full, it does so independently of the COM_SOFT()
        or COM_HARD() functions.

 Example

     CHR(227) is placed in the keyboard buffer and calls the COMERRORS
     procedure if an error is recognized at port 2 or if the modem status
     signal changes.  As soon as the buffer is 75% full or more, CHR(228) is
     placed in the keyboard buffer.  When CHR(228) is placed in the keyboard
     buffer, the BUFFERFULL procedure is called:

     #include CTCOM.CH                   // Symbolic constants
                                         // for interface
     COM_OPEN(2, 1000)                   // Open COM2
     CON_INIT(2, 1200, "N", 8, 1)        // Initialize COM2

     SET KEY 227 TO ComErrors
     SET KEY 228 TO BufferFull

     COM_KEY(2, 227, 228)                // Monitor COM2

     cName  :=  SPACE(20)                // The port can arrange
     PROCEDURE COMMERRORS(A, B, C)

        nMSR_Status  :=  COM_EVENT(2, 2) // Read accumulated
                                         // MSR data

        nLSR_Status  :=  COM_EVENT(2, 2) // Read accumulated
                                         // LSR data
        COM_KEY(2, 227, 228)             // Reactivate traps, reset
                                         // internal values of COM_EVENT

        IF ISBIT(nMSR_Status, MSR_RI)          // Ring bit set?
           ? "Call (ring) acknowledged!"
        ELSE
           IF ISBIR(nLSR_Status, nLSR_Break)   // Break bit set?
              ? "Break acknowledged!"
           ENDIF
        ENDIF
        RETURN
     PROCEDURE BUFFERFULL(A, B, C)

        * The input buffer must be read!
        COM_KEY(2, 227, 228)                 // Traps activated here
        cData  := COM.READ(2)                // Read all data
        SELECT MESSDAT
        REPLACE ComDat WITH cData            // Save data
        SKIP
        SELECT INPUT
        RETURN


See Also: COM_EVENT() COM_COUNT() COM_MSR() COM_LSR()

Online resources provided by: http://www.X-Hacker.org --- NG 2 HTML conversion by Dave Pearson