?? bitio.c
字號:
#include <stdio.h>
#include <stdlib.h>
#include "bitio.h"
#include "errhand.h"
#define PACIFIER_COUNT 2047
BIT_FILE * OpenOutputBitFile( char * name )
{
BIT_FILE * bit_file;
bit_file=( BIT_FILE * )calloc( 1,sizeof( BIT_FILE ) );
if( bit_file==NULL )
return( bit_file );
bit_file->file=fopen( name,"wb" );
bit_file->rack=0;
bit_file->mask=0x80;
bit_file->pacifier_counter=0;
return( bit_file );
}
BIT_FILE * OpenInputBitFile( char * name )
{
BIT_FILE * bit_file;
bit_file=( BIT_FILE * )calloc( 1,sizeof( BIT_FILE ) );
if( bit_file==NULL )
return( bit_file );
bit_file->file=fopen( name,"rb" );
bit_file->rack=0;
bit_file->mask=0x80;
bit_file->pacifier_counter=0;
return( bit_file );
}
void CloseOutputBitFile( BIT_FILE * bit_file )
{
if( bit_file->mask!=0x80 )
if( putc( bit_file->rack,bit_file->file )!=bit_file->rack )
fatal_error( "Fatal error in CloseBitFile!\n" );
fclose( bit_file->file );
free( ( char * ) bit_file );
}
void CloseInputBitFile( BIT_FILE * bit_file )
{
fclose( bit_file->file );
free( ( char * ) bit_file );
}
void OutputBit( BIT_FILE * bit_file,int bit )
{
if( bit )
bit_file->rack|=bit_file->mask;
bit_file->mask>>=1;
if( bit_file->mask==0 ) {
if( putc( bit_file->rack,bit_file->file)!=bit_file->rack )
fatal_error( "Fatal error in OutputBit\n" );
else
if( ( bit_file->pacifier_counter++ & PACIFIER_COUNT )==0 )
putc( '.',stdout );
bit_file->rack=0;
bit_file->mask=0x80;
}
}
void OutputBits( BIT_FILE * bit_file,unsigned long code,int count )
{
unsigned long mask;
mask=1l<<( count-1 );
while( mask!=0 ) {
if( mask & code )
bit_file->rack|=bit_file->mask;
bit_file->mask>>=1;
if( bit_file->mask==0 ) {
if( putc( bit_file->rack,bit_file->file )!=bit_file->rack )
fatal_error( "Fatal error in Outputbits!\n" );
else if( ( bit_file->pacifier_counter++ & PACIFIER_COUNT )==0 )
putc( '.',stdout );
bit_file->rack=0;
bit_file->mask=0x80;
}
mask >>= 1;
}
}
int InputBit( BIT_FILE * bit_file )
{
int value;
if( bit_file->mask==0x80 ) {
bit_file->rack=getc( bit_file->file );
if( bit_file->rack==EOF )
fatal_error( "Fatal error in InputBit!(1)" );
if( (bit_file->pacifier_counter++ & PACIFIER_COUNT )==0 )
putc( '.',stdout );
}
value=bit_file->rack & bit_file->mask;
bit_file->mask>>=1;
if( bit_file->mask==0 )
bit_file->mask=0x80;
return( value?1:0 );
}
unsigned long InputBits( BIT_FILE * bit_file,int bit_count )
{
unsigned long mask;
unsigned long return_value;
mask=1l<<( bit_count-1 );
return_value=0;
while( mask!=0 ) {
if( bit_file->mask==0x80 ) {
bit_file->rack=getc( bit_file->file );
if( bit_file->rack==EOF )
fatal_error( "Fatal error in InputBits!(2)" );
if( ( bit_file->pacifier_counter++ & PACIFIER_COUNT )==0 )
putc( '.',stdout );
}
if( bit_file->rack & bit_file->mask )
return_value|=mask;
mask>>=1;
bit_file->mask>>=1;
if( bit_file->mask==0 )
bit_file->mask=0x80;
}
return( return_value );
}
void FilePrintBinary( FILE * file,unsigned int code,int bits )
{
unsigned int mask;
mask=1<<( bits-1 );
while( mask!=0 ) {
if( code & mask )
fputc( '1',file );
else
fputc( '0',file );
mask>>=1;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -