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