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>zeroinsert()</b> http://www.X-Hacker.org [<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 ZEROINSERT()
 Inserts a 0-bit after every fifth 1-bit
------------------------------------------------------------------------------
 Syntax

     ZEROINSERT(<cString>) --> cDataBlock

 Argument

     <cString>  Designates any character string in which you choose to
     insert a 0-bit.

 Returns

     The function returns a character string with the 0-bit inserted.

 Description

     This function has been incorporated to allow simplified programming of
     data transmission protocols to the CCITT specification.  CCITT
     determines that each data block has a start and a stop flag, like
     "01111110".  To ensure that the flag bit pattern doesn't appear within
     the data, a 0-bit is inserted after every fifth 1-bit.  These explicit
     flags allow a transfer protocol to resynchronize itself more quickly if
     a transmission error occurs.  For example, this process is implemented
     by ISDN or X.25 networks.

 Note

     .  Due to the inserted bit, the character string that is returned
        is longer than the character string that is transmitted.  Length
        increases a maximum of 20%, which can be calculated as follows:

           nMaxLen = LEN(cString) + CEILING(LEN(cString)/5)

 Examples

     .  For any five bytes of the original string, a maximum of one
        additional byte can arrive as a result.  This example tests, if there
        is enough available free memory, for the resulting string:

        cCharacter := CHR(CTON("11111111", 2)
        cString    := REPLICATE(cCharacter, 6)
        nMaxLen    := LEN(cString) + CEILING(LEN(cString) /5)
                                                        //Here: 8

        IF nMaxLen  < MEMORY(1) * 1024 - 100
           cString  := ZEROINSERT(cString)
        ENDIF

     .  This example shows the construction of a typical data block:

        cFlag   :=  CHR(CTON("01111110", 2))            // According to
                                                        // CCITT
        cData   :=  "Also transmit ????!"
        CRC    :=  COM_CRC(cData)

        cBlock  := cData + SUBSTR(L2BIN(CRC), 1, 2)     // Add CRC to
                                                        // string
        cBlock  := ZEROINSERT(cBlock)
        cBlock  := cFlag + cBlock + cFlag


See Also: ZEROREMOVE() COM_CRC()

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