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