Category : Printer + Display Graphics
Archive   : GIFTIF.ZIP
Filename : RLETIF.C

 
Output of file : RLETIF.C contained in archive : GIFTIF.ZIP
/*----------------------------------------------------------------------*/
/* Copyright (c) 1988-1989 */
/* by CompuServe Inc., Tucson, AZ. All Rights Reserved */
/* RLETIF.C can be copied and distributed freely for any */
/* non-commercial purposes. RLETIF.C can only be incorporated */
/* into commercial software with the permission of CompuServe Inc. */
/*----------------------------------------------------------------------*/

/* RLETIF.C */

/*
* ABSTRACT:
* This file contains routines to convert Run Length Encoded lines
* into one-dimensional group-3 FAX compressed lines.
*
* See RLETIF.H for a summary of functions.
*
* AUTHOR: Doug Chinnock
*
* REVISION HISTORY:
*
*/



#include "cnvhuf.h"
#include "rletif.h"
#include "writetif.h"


/* The five constant tables have the form:
|
| huffman_code
| array_xxx_yyy[ n ];
|
| where n is the length of the run or 1/64th of it.
*/

#include "dehuftab.h"

/* Variables used among functions: */

static union
{
unsigned char
TIF_ch[4]; /* Assembly buffer for packed bits */
short int
TIF_sh[2];
long int
TIF_lg; /* Residue always left justified here */
} TIF_pack;

short int
TIF_bit_count,
TIF_pack_filled; /* Bits filled in TIF_pack */

extern void compress_huffman_line( rle_line *emit_line )
{
(*emit_line).rle_color = WHITE;
TIF_bit_count = 0,
TIF_pack_filled = 0;

TIF_write_bits( 12, 0x1 ); /* Output EOL (sync?) */

for ( (*emit_line).rle_pointer = 0;
(*emit_line).rle_pointer < (*emit_line).rle_count;
(*emit_line).rle_pointer ++ )
{
compress_huffman_code( (*emit_line).rle_color,
(*emit_line).rle_list[(*emit_line).rle_pointer] );
(*emit_line).rle_color = ! (*emit_line).rle_color;
};

TIF_write_bits( 16 - TIF_pack_filled, 0 ); /* Even out bits to even byte */

while ( TIF_bit_count < FAX_min_line ) /* Now pad line as needed */
TIF_write_bits( 8, 0 );

} /* compress_huffman_line */


extern void compress_huffman_code( colors color_of_run,
int length_of_color )
{

/* First put out makeup codes */

while ( length_of_color > 63 )
{
if ( length_of_color <= (1728+63) )
{
if ( color_of_run == WHITE )
TIF_write_bits( huf_wht_makeup[length_of_color/64-1].code_bits,
huf_wht_makeup[length_of_color/64-1].code_value );
else
TIF_write_bits( huf_blk_makeup[length_of_color/64-1].code_bits,
huf_blk_makeup[length_of_color/64-1].code_value );
length_of_color %= 64;
}
else if ( length_of_color <= (2560+63) )
{
TIF_write_bits( huf_big_makeup[(length_of_color-1792)/64].code_bits,
huf_wht_makeup[(length_of_color-1792)/64].code_value );
length_of_color %= 64;
}
else
{
TIF_write_bits( huf_big_makeup[(2560-1792)/64].code_bits,
huf_wht_makeup[(2560-1792)/64].code_value );
length_of_color -= 2560;
};
};

/* Finally put out termination code */

if ( color_of_run == WHITE )
TIF_write_bits( huf_wht_final[length_of_color].code_bits,
huf_wht_final[length_of_color].code_value );
else
TIF_write_bits( huf_blk_final[length_of_color].code_bits,
huf_blk_final[length_of_color].code_value );

} /* compress_huffman_code */

void TIF_write_bits( short int size_to_write,
unsigned int bit_value )
{
short int
i;

bit_value <<= 16 - size_to_write; /* Left justify new data */

for ( i = 0; i < size_to_write; i ++ )
{
TIF_pack.TIF_lg >>= 1;

if ( (bit_value & 0x8000) != 0 )
TIF_pack.TIF_ch[3] |= 0x80;
else
TIF_pack.TIF_ch[3] &= 0x7F;

bit_value <<= 1;
};

TIF_pack_filled += size_to_write;
TIF_pack.TIF_lg >>= 32 - TIF_pack_filled; /* Right justify result */

while ( TIF_pack_filled >= 8 ) /* Output any full bytes */
{
put_TIF_byte( TIF_pack.TIF_ch[0] );
TIF_pack.TIF_lg >>= 8;
TIF_pack_filled -= 8;
TIF_bit_count += 8;
};

TIF_pack.TIF_lg <<= 32 - TIF_pack_filled; /* Left justify remainder */

} /* TIF_write_bits */


  3 Responses to “Category : Printer + Display Graphics
Archive   : GIFTIF.ZIP
Filename : RLETIF.C

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/