1 /*
2  *  bit-io.h
3  *
4  *  Written by:		Ullrich Hafner
5  *
6  *  This file is part of FIASCO (Fractal Image And Sequence COdec)
7  *  Copyright (C) 1994-2000 Ullrich Hafner
8  */
9 
10 /*
11  *  $Date: 2000/06/14 20:49:37 $
12  *  $Author: hafner $
13  *  $Revision: 5.1 $
14  *  $State: Exp $
15  */
16 
17 #ifndef _BIT_IO_H
18 #define _BIT_IO_H
19 
20 #include <stdio.h>
21 #include "types.h"
22 
23 #define OUTPUT_BYTE_ALIGN(bfile) while ((bfile)->bitpos) put_bit (bfile, 0);
24 #define INPUT_BYTE_ALIGN(bfile)  while ((bfile)->bitpos) get_bit (bfile);
25 
26 typedef enum {READ_ACCESS, WRITE_ACCESS} openmode_e;
27 
28 typedef struct bitfile
29 {
30    FILE	      *file;			/* associated filepointer */
31    char	      *filename;		/* corresponding filename */
32    byte_t     *buffer;			/* stream buffer */
33    byte_t     *ptr;			/* pointer to current buffer pos */
34    unsigned    bytepos;			/* current I/O byte */
35    unsigned    bitpos;			/* current I/O bit */
36    unsigned    bits_processed;		/* number of bits already processed */
37    openmode_e  mode;			/* access mode */
38 } bitfile_t;
39 
40 FILE *
41 open_file (const char *filename, const char *env_var, openmode_e mode);
42 bitfile_t *
43 open_bitfile (const char *filename, const char *env_var, openmode_e mode);
44 void
45 put_bit (bitfile_t *bitfile, unsigned value);
46 void
47 put_bits (bitfile_t *bitfile, unsigned value, unsigned bits);
48 bool_t
49 get_bit (bitfile_t *bitfile);
50 unsigned
51 get_bits (bitfile_t *bitfile, unsigned bits);
52 void
53 close_bitfile (bitfile_t *bitfile);
54 unsigned
55 bits_processed (const bitfile_t *bitfile);
56 
57 #endif /* not _BIT_IO_H */
58 
59