Add GSM full rate codec to LCR's source repository
[lcr.git] / libgsmfr / tls / sweet.c
diff --git a/libgsmfr/tls/sweet.c b/libgsmfr/tls/sweet.c
new file mode 100644 (file)
index 0000000..6a6fb29
--- /dev/null
@@ -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       <stdio.h>
+#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;
+               }
+       }
+}
+