| .\" |
| .\" Copyright 1992 by Jutta Degener and Carsten Bormann, Technische |
| .\" Universitaet Berlin. See the accompanying file "COPYRIGHT" for |
| .\" details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. |
| .\" |
| .PU |
| .TH BITTER 1 |
| .SH NAME |
| bitter, sweet \(em code-generators for packing bits |
| .SH SYNOPSIS |
| bitter < input > output |
| .br |
| sweet < input > output |
| .SH "DESCRIPTION" |
| Bitter and sweet are two filters which turn a description of the |
| form |
| .nf |
| name number-of-bits |
| name number-of-bits |
| ... |
| .nf |
| into code. |
| .PP |
| Bitter generates code that packs the specified bits from their |
| variables into an array of unsigned char referenced by an |
| advancing pointer c. |
| .PP |
| Sweet generates code that unpacks the specified bits from an array |
| of unsigned char referenced by a mutable pointer c into the |
| named variables. |
| .\" .SH OPTIONS |
| .\" .SH "RETURN VALUE" |
| .\" .SH ERRORS |
| .SH EXAMPLES |
| .nf |
| % cat in |
| amaretto 1 |
| banana 2 |
| cherry 3 |
| strawberry 4 |
| vanilla 15 |
| walnut 15 |
| |
| % bitter < in |
| *c++ = ((amaretto & 0x1) << 7) |
| | ((banana & 0x3) << 5) |
| | ((cherry & 0x7) << 2) |
| | ((strawberry >> 2) & 0x3); |
| *c++ = ((strawberry & 0x3) << 6) |
| | ((vanilla >> 9) & 0x3F); |
| *c++ = ((vanilla >> 1) & 0xFF); |
| *c++ = ((vanilla & 0x1) << 7) |
| | ((walnut >> 8) & 0x7F); |
| *c++ = walnut & 0xFF; |
| |
| % sweet < in |
| amaretto = (*c >> 7) & 0x1; |
| banana = (*c >> 5) & 0x3; |
| cherry = (*c >> 2) & 0x7; |
| strawberry = (*c++ & 0x3) << 2; |
| strawberry |= (*c >> 6) & 0x3; |
| vanilla = (*c++ & 0x3F) << 9; |
| vanilla |= (*c++ & 0xFF) << 1; |
| vanilla |= (*c >> 7) & 0x1; |
| walnut = (*c++ & 0x7F) << 8; |
| walnut |= *c++; |
| .SH NOTES |
| This is a quick hack for the gsm_encode() and gsm_decode() routines. |
| .SH BUGS |
| Please direct bug reports to jutta@pobox.com and cabo@tzi.org. |