link outbits
November 3, 1991; Richard L. Goerwitz
See also: inbits.icn
This file is in the public domain.
In any number of instances (e.g. when outputting variable-length characters or fixed-length encoded strings), the programmer must fit variable and/or non-byte-sized blocks into standard 8-bit bytes. Outbits() performs this task. Pass to outbits(i, len) an integer i, and a length parameter (len), and outbits will suspend byte-sized chunks of i converted to characters (most significant bits first) until there is not enough left of i to fill up an 8-bit character. The remaining portion is stored in a buffer until outbits() is called again, at which point the buffer is combined with the new i and then output in the same manner as before. The buffer is flushed by calling outbits() with a null i argument. Note that len gives the number of bits there are in i (or at least the number of bits you want preserved; those that are discarded are the most significant ones). A trivial example of how outbits() might be used: outtext := open("some.file.name","w") l := [1,2,3,4] every writes(outtext, outbits(!l,3)) writes(outtext, outbits(&null,3)) # flush buffer List l may be reconstructed with inbits() (see inbits.icn): intext := open("some.file.name") l := [] while put(l, inbits(intext, 3)) Note that outbits() is a generator, while inbits() is not.