blob: 602d8d67cbda5c199f09e25f33a2d281df55c574 [file] [log] [blame]
Benny Prijono7f1c90f2007-04-07 12:29:46 +00001/*
2 * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
3 * Universitaet Berlin. See the accompanying file "COPYRIGHT" for
4 * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
5 */
6
7/*$Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/bitter.c,v 1.1 1992/10/28 00:28:39 jutta Exp $*/
8
9/* Generate code to pack a bit array from a name:#bits description */
10
11#include <stdio.h>
12#include "taste.h"
13#include "proto.h"
14
15void write_code P2((s_spex, n_spex), struct spex * s_spex, int n_spex)
16{
17 struct spex * sp = s_spex;
18 int bits = 8;
19 int vars;
20
21 if (!n_spex) return;
22
23 vars = sp->varsize;
24
25 while (n_spex) {
26
27 if (bits == 8) printf("\t*c++ = ");
28 else printf("\t | ");
29
30 if (vars == bits) {
31
32 printf( (bits==8? "%s & 0x%lX;\n" : "(%s & 0x%lX);\n"),
33 sp->var,
34 ~(0xfffffffe << (bits - 1)));
35 if (!-- n_spex) break;
36 sp++;
37
38 vars = sp->varsize;
39 bits = 8;
40
41 } else if (vars < bits) {
42
43 printf( "((%s & 0x%lX) << %d)",
44 sp->var,
45 ~(0xfffffffe << (vars - 1)),
46 bits - vars);
47 bits -= vars;
48 if (!--n_spex) {
49 puts(";");
50 break;
51 }
52 else putchar('\n');
53 sp++;
54 vars = sp->varsize;
55
56 } else {
57 printf("((%s >> %d) & 0x%X);\n",
58 sp->var,
59 vars - bits,
60 ~(0xfffffffe << (bits - 1)));
61
62 vars -= bits;
63 bits = 8;
64 }
65 }
66}