X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=libgsmfr%2Ftls%2Fbitter.c;fp=libgsmfr%2Ftls%2Fbitter.c;h=602d8d67cbda5c199f09e25f33a2d281df55c574;hp=0000000000000000000000000000000000000000;hb=77d91029549d9d526572966a0884c015acd2727e;hpb=0f0568583f9a4c91de2c5289e8556d857260093c diff --git a/libgsmfr/tls/bitter.c b/libgsmfr/tls/bitter.c new file mode 100644 index 0000000..602d8d6 --- /dev/null +++ b/libgsmfr/tls/bitter.c @@ -0,0 +1,66 @@ +/* + * 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. + */ + +/*$Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/bitter.c,v 1.1 1992/10/28 00:28:39 jutta Exp $*/ + +/* Generate code to pack a bit array from a name:#bits description */ + +#include +#include "taste.h" +#include "proto.h" + +void write_code P2((s_spex, n_spex), struct spex * s_spex, int n_spex) +{ + struct spex * sp = s_spex; + int bits = 8; + int vars; + + if (!n_spex) return; + + vars = sp->varsize; + + while (n_spex) { + + if (bits == 8) printf("\t*c++ = "); + else printf("\t | "); + + if (vars == bits) { + + printf( (bits==8? "%s & 0x%lX;\n" : "(%s & 0x%lX);\n"), + sp->var, + ~(0xfffffffe << (bits - 1))); + if (!-- n_spex) break; + sp++; + + vars = sp->varsize; + bits = 8; + + } else if (vars < bits) { + + printf( "((%s & 0x%lX) << %d)", + sp->var, + ~(0xfffffffe << (vars - 1)), + bits - vars); + bits -= vars; + if (!--n_spex) { + puts(";"); + break; + } + else putchar('\n'); + sp++; + vars = sp->varsize; + + } else { + printf("((%s >> %d) & 0x%X);\n", + sp->var, + vars - bits, + ~(0xfffffffe << (bits - 1))); + + vars -= bits; + bits = 8; + } + } +}