⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 g3sencod.c

📁 图形加密的算法 用c语言实现 【解压没有密码】
💻 C
字号:
/*	$Id: g3sencod.c 1.2 90/06/09 18:22:52 marking Exp $
 *
 NAME
 *	g3sencod.c -- encode group 3 data using nested if statements
 *
 TYPE
 *	C procedures
 *
 SYNOPSIS
 *	char	g3j_initialize (short image_width, short image_length);
 *	char	g3j_encode_new_row (void);
 *	char	g3j_encode_pad (char pad_type);
 *	char	g3j_encode_black (short);
 *	char	g3j_encode_white (short);
 *
 DESCRIPTION
 *	These routines are used to encode group 3 and group 4 images. (The
 *	encoding of group 4 also requires other routines in a separate file.)
 *
 RETURNS
 *
 LEGAL
 *	Copyright 1989, 1990 Michael P. Marking, Post Office Box 8039,
 *	Scottsdale, Arizona 85252-8039. All rights reserved.
 *
 *	License is granted by the copyright holder to distribute and use this
 *	code without payment of royalties or the necessity of notification as
 *	long as this notice (all the text under "LEGAL") is included.
 *
 *	Reference: $Id: g3sencod.c 1.2 90/06/09 18:22:52 marking Exp $
 *
 *	This program is offered without any warranty of any kind. It includes
 *	no warranty of merchantability or fitness for any purpose. Testing and
 *	suitability for any use are the sole responsibility of the user.
 * 
 HISTORY
 *	$Log:	g3sencod.c $ * Revision 1.2  90/06/09  18:22:52  marking * clean up comments for release * 
 * Revision 1.1  89/06/30  17:00:00  marking
 * Initial revision
 * 
 *
 NOTES
 *	1.	Encode a pad to the next byte to flush the output buffer.
 *
 PORTABILITY
 *	Tested using Microsoft C 5.1. Some memory models may not work due to
 *	the large encoding arrays.
 *
 *	There is a non-portable use of "global" variables in the file g3g4.h,
 *	about which a minority of compilers will justifiably complain. Certain
 *	variables are declared in g3g4.h without extern keywords. Strictly
 *	speaking, they should be declared extern in all but one module, but
 *	that would require complication of g3g4.h. If it gets past your
 *	compiler and linker, you can probably ignore it.
 *
 SEE ALSO
 *	g4sencod.c -- encode group 4 image using nested if statements
 *
 INFORMATION
 *	Although there is no support offered with this program, the author will
 *	endeavor to correct errors. Updates will also be made available from
 *	time to time.
 *
 *	Contact: Michael P. Marking, Post Office Box 8039, Scottsdale, Arizona
 *	85252-8039 USA. Replies are not guaranteed to be swift. Beginning
 *	July 1990, e-mail may be sent to uunet!ipel!marking.
 *
 *	Also beginning in July 1990, this code will be archived at the
 *	ipel!phoenix BBS in file g3g4.zoo. The 24-hour telephone number
 *	for 300/1200/2400 is (602)274-0462. When logging in, specify user
 *	"public", system "bbs", and password "public".
 *
 *	This code is also available from the C Users Group in volume 317.
 *
 */

#include "g3g4.h"

static short EOL_code = 0x0010, EOL_length = 12;

static short encode_black_code (short);
static short encode_white_code (short);

char g3j_initialize (short image_width, short image_length)
{
  initialize_encode ();
  return (0);
}

char g3j_encode_new_row (void)
{
  encode_word (EOL_code, EOL_length);
  return (0);
}

char g3j_encode_pad (char pad_type)
{
  short bits_to_pad;
  switch (pad_type)
  {
    case PAD_NONE:
      break;
    case PAD_BYTE:
      if (encode_position) /* if not already on a byte boundary */
	encode_word (0, 8 - encode_position);
      break;
    case PAD_NIBBLE:
      bits_to_pad = (8 - encode_position) & 3;
      if (bits_to_pad) encode_word (0, bits_to_pad);
      break;
    case PAD_ODD_NIBBLE:
      if (encode_position > 0 && encode_position < 4)
      {
	bits_to_pad = 4 - encode_position;
	encode_word (0, bits_to_pad);
      }
      else if (encode_position > 4)
      {
	bits_to_pad = 12 - encode_position;
	encode_word (0, bits_to_pad);
      }
      break;
    default:
      break;
  }
  return (0);
}

char g3j_encode_black (short runlength)
{
  runlength = encode_black_code (runlength);
  while (runlength) runlength = encode_black_code (runlength);
  return (0);
}

static short encode_black_code (short runlength)
{
  static short term_codes [64] =
  {
    0x0DC0, 0x4000, 0xC000, 0x8000, 0x6000, 0x3000,
    0x2000, 0x1800, 0x1400, 0x1000, 0x0800, 0x0A00,
    0x0E00, 0x0400, 0x0700, 0x0C00, 0x05C0, 0x0600,
    0x0200, 0x0CE0, 0x0D00, 0x0D80, 0x06E0, 0x0500,
    0x02E0, 0x0300, 0x0CA0, 0x0CB0, 0x0CC0, 0x0CD0,
    0x0680, 0x0690, 0x06A0, 0x06B0, 0x0D20, 0x0D30,
    0x0D40, 0x0D50, 0x0D60, 0x0D70, 0x06C0, 0x06D0,
    0x0DA0, 0x0DB0, 0x0540, 0x0550, 0x0560, 0x0570,
    0x0640, 0x0650, 0x0520, 0x0530, 0x0240, 0x0370,
    0x0380, 0x0270, 0x0280, 0x0580, 0x0590, 0x02B0,
    0x02C0, 0x05A0, 0x0660, 0x0670
  };
  static short makeup_codes [40] =
  {
    0x03C0, 0x0C80, 0x0C90, 0x05B0, 0x0330, 0x0340,
    0x0350, 0x0360, 0x0368, 0x0250, 0x0258, 0x0260,
    0x0268, 0x0390, 0x0398, 0x03A0, 0x03A8, 0x03B0,
    0x03B8, 0x0290, 0x0298, 0x02A0, 0x02A8, 0x02D0,
    0x02D8, 0x0320, 0x0328, 0x0100, 0x0180, 0x01A0,
    0x0120, 0x0130, 0x0140, 0x0150, 0x0160, 0x0170,
    0x01C0, 0x01D0, 0x01E0, 0x01F0
  };
  static short term_lengths [64] =
  {
    10, 3, 2, 2, 3, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 9, 10, 10,
    10, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
    12, 12, 12, 12, 12, 12, 12, 12, 12, 12
  };
  static short makeup_lengths [40] =
  {
    10, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
    13, 13, 13, 13, 13, 13, 13, 13, 13, 11, 11, 11, 12, 12, 12, 12, 12, 12,
    12, 12, 12, 12
  };
  short remaining;
  if (runlength < 64)
  {
    encode_word (term_codes [runlength], term_lengths [runlength]);
    return (0);
  }
  else if (runlength < 2561)
  {
    short x;
    x = (runlength - 64) / 64;
    encode_word (makeup_codes [x], makeup_lengths [x]);
    remaining = runlength - (64 * (1 + x));
    if (!remaining) encode_word (term_codes [0], term_lengths [0]);
    return (remaining);
  }
  else
  {
    encode_word (makeup_codes [39], makeup_lengths [39]);
    return (runlength - 2560);
  }
}

char g3j_encode_white (short runlength)
{
  runlength = encode_white_code (runlength);
  while (runlength) runlength = encode_white_code (runlength);
  return (0);
}

static short encode_white_code (short runlength)
{
  static short term_codes [64] =
  {
    0x3500, 0x1c00, 0x7000, 0x8000, 0xb000, 0xc000,
    0xe000, 0xf000, 0x9800, 0xa000, 0x3800, 0x4000,
    0x2000, 0x0c00, 0xd000, 0xd400, 0xa800, 0xac00,
    0x4e00, 0x1800, 0x1000, 0x2e00, 0x0600, 0x0800,
    0x5000, 0x5600, 0x2600, 0x4800, 0x3000, 0x0200,
    0x0300, 0x1a00, 0x1b00, 0x1200, 0x1300, 0x1400,
    0x1500, 0x1600, 0x1700, 0x2800, 0x2900, 0x2a00,
    0x2b00, 0x2c00, 0x2d00, 0x0400, 0x0500, 0x0a00,
    0x0b00, 0x5200, 0x5300, 0x5400, 0x5500, 0x2400,
    0x2500, 0x5800, 0x5900, 0x5a00, 0x5b00, 0x4a00,
    0x4b00, 0x3200, 0x3300, 0x3400
  };
  static short makeup_codes [40] =
  {
    0xd800, 0x9000, 0x5c00, 0x6e00, 0x3600, 0x3700,
    0x6400, 0x6500, 0x6800, 0x6700, 0x6600, 0x6680,
    0x6900, 0x6980, 0x6a00, 0x6a80, 0x6b00, 0x6b80,
    0x6c00, 0x6c80, 0x6d00, 0x6d80, 0x4c00, 0x4c80,
    0x4d00, 0x6000, 0x4d80, 0x0100, 0x0180, 0x01a0,
    0x0120, 0x0130, 0x0140, 0x0150, 0x0160, 0x0170,
    0x01c0, 0x01d0, 0x01e0, 0x01f0
  };
  static short term_lengths [64] =
  {
    8, 6, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8
  };
  static short makeup_lengths [40] =
  {
    5, 5, 6, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
    9, 6, 9, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12
  };
  short remaining;
  if (runlength < 64)
  {
    encode_word (term_codes [runlength], term_lengths [runlength]);
    return (0);
  }
  else if (runlength < 2561)
  {
    short x;
    x = (runlength - 64) / 64;
    encode_word (makeup_codes [x], makeup_lengths [x]);
    remaining = runlength - (64 * (1 + x));
    if (!remaining) encode_word (term_codes [0], term_lengths [0]);
    return (remaining);
  }
  else
  {
    encode_word (makeup_codes [39], makeup_lengths [39]);
    return (runlength - 2560);
  }
}

/*	end $RCSfile: g3sencod.c $ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -