SYNOPSIS
        string copy_bits(string src, string dest
                         [, int srcstart [, int deststart [, int copylen ]]]
                        )

DESCRIPTION
        Copy the bitrange [<srcstart>..<srcstart>+<copylen>[ from
        bitstring <src> and copy it into the bitstring <dest> starting
        at <deststart>, overwriting the original bits at those positions.

        The resulting combined string is returned, the input strings remain
        unaffected.

        If <srcstart> is not given, <src> is copied from the start.
        If <srcstart> is negative, it is counted from one past the last set
        bit in the string (ie. '-1' will index the last set bit).

        If <deststart> is not given, <dest> will be overwritten from the start.
        If <deststart> is negative, it is counted from one past the last set
        bit in the string (ie. '-1' will index the last set bit).

        If <copylen> is not given, it is assumed to be infinite, ie. the result
        will consist of <dest> up to position <deststart>, followed by
        the data copied from <src>.
        If <copylen> is negative, the function will copy the abs(<copylen>)
        bits _before_ <srcstart> in to the result.

        None of the range limits can become negative.

EXAMPLES
        copy_bits(src, dest, 10)    === src[10..]
        copy_bits(src, dest, 10, 5) === dest[0..4] + src[10..]
        copy_bits(src, dest, 10, 5, 3)
                                    === dest[0..4] + src[10..12] + dest[8..]

          (The src[]/dest[] is just for explanatory purposes!)

HISTORY
        Introduced in LDMud 3.3.166

SEE ALSO
        clear_bit(E), set_bit(E), test_bit(E), next_bit(E), last_bit(E),
        count_bits(E), or_bits(E), xor_bits(E), invert_bits(E), and_bits(E)
