Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/* Copyright (C) 1992, 1995 Aladdin Enterprises.  All rights reserved.
2
 
3
  This software is provided AS-IS with no warranty, either express or
4
  implied.
5
 
6
  This software is distributed under license and may not be copied,
7
  modified or distributed except as expressly authorized under the terms
8
  of the license contained in the file LICENSE in this distribution.
9
 
10
  For more information about licensing, please refer to
11
  http://www.ghostscript.com/licensing/. For information on
12
  commercial licensing, go to http://www.artifex.com/licensing/ or
13
  contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14
  San Rafael, CA  94903, U.S.A., +1(415)492-9861.
15
*/
16
 
17
/* $Id: shc.c,v 1.4 2002/02/21 22:24:54 giles Exp $ */
18
/* Support code for shc.h */
19
#include "std.h"
20
#include "scommon.h"
21
#include "shc.h"
22
 
23
/* ------ Encoding ------ */
24
 
25
/* Empty the 1-word buffer onto the output stream. */
26
/* q has already been incremented. */
27
void
28
hc_put_code_proc(bool reverse_bits, byte * q, uint cw)
29
{
30
#define cb(n) ((byte)(cw >> (n * 8)))
31
    if (reverse_bits) {
32
#if hc_bits_size > 16
33
	q[-3] = byte_reverse_bits[cb(3)];
34
	q[-2] = byte_reverse_bits[cb(2)];
35
#endif
36
	q[-1] = byte_reverse_bits[cb(1)];
37
	q[0] = byte_reverse_bits[cb(0)];
38
    } else {
39
#if hc_bits_size > 16
40
	q[-3] = cb(3);
41
	q[-2] = cb(2);
42
#endif
43
	q[-1] = cb(1);
44
	q[0] = cb(0);
45
    }
46
#undef cb
47
}
48
 
49
/* Put out any final bytes. */
50
/* Note that this does a store_state, but not a load_state. */
51
byte *
52
hc_put_last_bits_proc(stream_hc_state * ss, byte * q, uint bits, int bits_left)
53
{
54
    while (bits_left < hc_bits_size) {
55
	byte c = (byte) (bits >> (hc_bits_size - 8));
56
 
57
	if (ss->FirstBitLowOrder)
58
	    c = byte_reverse_bits[c];
59
	*++q = c;
60
	bits <<= 8;
61
	bits_left += 8;
62
    }
63
    ss->bits = bits;
64
    ss->bits_left = bits_left;
65
    return q;
66
}