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