X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=libgsmfr%2Ftls%2Fsweet.c;fp=libgsmfr%2Ftls%2Fsweet.c;h=6a6fb297823f88d93cc9fc3aa0e96180ab925dd8;hp=0000000000000000000000000000000000000000;hb=77d91029549d9d526572966a0884c015acd2727e;hpb=0f0568583f9a4c91de2c5289e8556d857260093c diff --git a/libgsmfr/tls/sweet.c b/libgsmfr/tls/sweet.c new file mode 100644 index 0000000..6a6fb29 --- /dev/null +++ b/libgsmfr/tls/sweet.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/sweet.c,v 1.2 1996/07/02 10:15:53 jutta Exp $*/ + +/* Generate code to unpack a bit array from 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 (vars == sp->varsize) { + printf("\t%s = ", sp->var); + } else printf("\t%s |= ", sp->var); + + if (vars == bits) { + + if (bits == 8) printf( "*c++;\n" ); + else printf( "*c++ & 0x%lX;\n", + ~(0xfffffffe << (bits - 1)) ); + + if (!-- n_spex) break; + sp++; + vars = sp->varsize; + bits = 8; + + } else if (vars < bits) { + + printf( "(*c >> %d) & 0x%lX;\n", + bits - vars, + ~(0xfffffffe << (vars - 1))); + + bits -= vars; + if (!--n_spex) break; + sp++; + vars = sp->varsize; + + } else { + /* vars > bits. We're eating lower-all of c, + * but we must shift it. + */ + printf( "(*c++ & 0x%X) << %d;\n", + ~(0xfffffffe << (bits - 1)), + vars - bits ); + + vars -= bits; + bits = 8; + } + } +} +