~ubuntu-branches/ubuntu/hoary/libgsm/hoary

« back to all changes in this revision

Viewing changes to tls/ginger.c

  • Committer: Bazaar Package Importer
  • Author(s): Santiago Garcia Mantinan
  • Date: 2001-08-22 15:10:43 UTC
  • Revision ID: james.westby@ubuntu.com-20010822151043-0vgz06axh0la8uf6
Tags: upstream-1.0.10
ImportĀ upstreamĀ versionĀ 1.0.10

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright 1996 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*/
 
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
#include        <limits.h>
 
15
 
 
16
/* This module is the opposite of sour.   Sweet was already taken,
 
17
 * that's why it's called ginger.  (Add one point if that reminds
 
18
 * you of Gary Larson.)
 
19
 */
 
20
 
 
21
#define WORD_BITS       16      /* sizeof(uword) * CHAR_BIT on the 
 
22
                                 * target architecture---if this isn't 16,
 
23
                                 * you're in trouble with this library anyway.
 
24
                                 */
 
25
 
 
26
#define CHAR_BITS        8      /* CHAR_BIT on the target architecture---
 
27
                                 * if this isn't 8, you're in *deep* trouble.
 
28
                                 */
 
29
 
 
30
void write_code P2((s_spex, n_spex), struct spex * s_spex, int n_spex)
 
31
{
 
32
        struct spex     * sp = s_spex;
 
33
        int               n_in = 0;
 
34
 
 
35
        printf("uword sr = 0;\n");
 
36
 
 
37
        for (; n_spex > 0; n_spex--, sp++) {
 
38
 
 
39
                while (n_in < sp->varsize) {
 
40
                        if (n_in) printf("sr |= (uword)*c++ << %d;\n", n_in);
 
41
                        else printf("sr = *c++;\n");
 
42
                        n_in += CHAR_BITS;
 
43
                }
 
44
 
 
45
                printf("%s = sr & %#x;  sr >>= %d;\n",
 
46
                        sp->var, ~(~0U << sp->varsize), sp->varsize);
 
47
 
 
48
                n_in -= sp->varsize;
 
49
        }
 
50
 
 
51
        if (n_in > 0) {
 
52
                fprintf(stderr, "%d bits left over\n", n_in);
 
53
        }
 
54
}