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

📄 ztvdeflate.pas

📁 ziptv为delphi控件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
// compress
(**********************************************************************

  Copyright 1998-2003,  Microchip Data Systems / Carl Bunton

  Under license agreement, this source module may be used only on a
  single computer.

  No portion of this module may be reproduced, copied, revised, edited,
  distributed or transmitted via electronic means except in compiled
  application format.

  Web-site:  http://www.ziptv.com
  Email:     custsupt@ziptv.com

**********************************************************************)
Unit ztvDeflate;

Interface


// DO NOT CHANGE THESE SWITCHES!  Revising these switches will
// produce unexpected errors, resulting in the failure of the
// deflate method.
{$J+}    { Writeable Typed Constants }     // v4.0 added
{$Q-}    { Overflow Checking }             // v4.5.3 added

Uses
   Classes,
   ztvBase,
   ztvGbls,
   ztvStreams,
   ztvConsts;

{$I ZipTV.inc}

Const
   LITERALS = 256;
   LENGTH_CODES = 29;
{$IFDEF DEFLATE64}
   D_CODES_DEF64 = 30; //32;	//changed from 30 for deflate64
   D_CODES = 30;
{$ELSE}
   D_CODES = 30;
{$ENDIF}
   BL_CODES = 19;
   L_CODES = LITERALS + 1 + LENGTH_CODES;
   HEAP_SIZE = (2 * L_CODES + 1);
   MAX_BITS = 15;

Type
   ct_data_ptr = ^ct_data;
   ct_data = Record
      fc:
      Record
         Case Byte Of
            0: (freq: ush);
            1: (code: ush);
      End;
      dl:
      Record
         Case Byte Of
            0: (dad: ush);
            1: (Len: ush);
      End;
   End;

   zIntfArray = Array[0..(MaxMemBlock Div SizeOf(Intf)) - 1] Of Intf;
   ltree_type = Array[0..HEAP_SIZE - 1] Of ct_data;

{$IFDEF DEFLATE64}
   dtree_type = Array[0..2 * D_CODES_DEF64 + 1 - 1] Of ct_data;
{$ELSE}
   dtree_type = Array[0..2 * D_CODES + 1 - 1] Of ct_data;
{$ENDIF}

   htree_type = Array[0..2 * BL_CODES + 1 - 1] Of ct_data;
   tree_type = Array[0..(MaxMemBlock Div SizeOf(ct_data)) - 1] Of ct_data;
   zushfArray = Array[0..(MaxMemBlock Div SizeOf(ushf)) - 1] Of ushf;
   zPosfArray = Array[0..(MaxMemBlock Div SizeOf(Posf)) - 1] Of Posf;
   zByteArray = Array[0..(MaxMemBlock Div SizeOf(_Bytef)) - 1] Of _Bytef;

   pzPosfArray = ^zPosfArray;
   pushfArray = ^zushfArray;
   pzIntfArray = ^zIntfArray;
   tree_ptr = ^tree_type;
   pzByteArray = ^zByteArray;

Type
   static_tree_desc_ptr = ^static_tree_desc;
   static_tree_desc =
      Record
      {const} static_tree: tree_ptr;    { static tree or NIL }
      {const} extra_bits: pzIntfArray;  { extra bits for each code or NIL }
      extra_base: _int;                 { base index for extra_bits }
      elems: _int;                      { max number of elements in the tree }
      max_length: _int;                 { max bit length for the codes }
   End;

   tree_desc_ptr = ^tree_desc;
   tree_desc = Record
      dyn_tree: tree_ptr;               { the dynamic tree }
      max_code: _int;                   { largest code with non zero frequency }
      stat_desc: static_tree_desc_ptr;  { the corresponding static tree }
   End;

   zuchfArray = zByteArray;
   puchfArray = ^zuchfArray;

   deflate_state_ptr = ^deflate_state;
   deflate_state = Record
      strm: ztv_streamp;                { pointer back to this stream }
      Status: _int;                     { as the name implies }
      pending_buf: pzByteArray;         { output still pending }
      pending_buf_size: longint;        { size of pending_buf }
      pending_out: _pBytef;             { next pending byte to output to the stream }
      pending: _int;                    { nb of bytes in the pending buffer }
      noheader: _int;                   { suppress zlib header and adler32 }
      data_type: Byte;                  { UNKNOWN, BINARY or ASCII }
      method: Byte;                     { STORED (for zip only) or DEFLATED }
      last_flush: _int;                 { value of flush param for previous deflate call }

      w_size: _uInt;                     { LZ77 window size (32K by default) }
      w_bits: _uInt;                     { log2(w_size)  (8..16) }
      w_mask: _uInt;                     { w_size - 1 }

      window: pzByteArray;
      window_size: longint;
      prev: pzPosfArray;
      head: pzPosfArray;                { Heads of the hash chains or NIL. }
      ins_h: _uInt;                      { hash index of string to be inserted }
      hash_size: _uInt;                  { number of elements in hash table }
      hash_bits: _uInt;                  { log2(hash_size) }
      hash_mask: _uInt;                  { hash_size-1 }
      hash_shift: _uInt;
      block_start: longint;
      match_length: _uInt;               { length of best match }
      prev_match: IPos;                 { previous match }
      match_available: Boolean;         { set if previous match exists }
      strstart: _uInt;                   { start of string to insert }
      match_start: _uInt;                { start of matching string }
      lookahead: _uInt;                  { number of valid bytes ahead in window }
      prev_length: _uInt;
      max_chain_length: _uInt;
      level: _int;                      { compression level (1..9) }
      strategy: _int;                   { favor or force Huffman coding}
      good_match: _uInt;
      nice_match: _int;                 { Stop searching when current match exceeds this }
      dyn_ltree: ltree_type;            { literal and length tree }
      dyn_dtree: dtree_type;            { distance tree }
      bl_tree: htree_type;              { Huffman tree for bit lengths }
      l_desc: tree_desc;                { desc. for literal tree }
      d_desc: tree_desc;                { desc. for distance tree }
      bl_desc: tree_desc;               { desc. for bit length tree }
      bl_count: Array[0..MAX_BITS + 1 - 1] Of ush;
      heap: Array[0..2 * L_CODES + 1 - 1] Of _int; { heap used to build the Huffman trees }
      heap_len: _int;                   { number of elements in the heap }
      heap_max: _int;                   { element of largest frequency }
      depth: Array[0..2 * L_CODES + 1 - 1] Of uch;
      l_buf: puchfArray;                { buffer for literals or lengths }
      lit_bufsize: _uInt;
      last_lit: _uInt;                   { running index in l_buf }
      d_buf: pushfArray;
      opt_len: longint;                 { bit length of current block with optimal trees }
      static_len: longint;              { bit length of current block with static trees }
      compressed_len: longint;          { total bit length of compressed file }
      matches: _uInt;                    { number of string matches in current block }
      last_eob_len: _int;               { bit length of EOB code for last block }
      bi_buf: ush;
      bi_valid: _int;
      Case Byte Of
         0: (max_lazy_match: _uInt);
         1: (max_insert_length: _uInt);
   End;

Function _deflate(Var strm: ztv_stream; Flush: _int): _int;
Function _deflateEnd(Var strm: ztv_stream): _int;
Function deflateInit2(Var strm: ztv_stream; level: _int; method: _int;
   windowBits: _int; memLevel: _int; strategy: _int): _int;
Function deflateSetDictionary(Var strm: ztv_stream; dictionary: _pBytef;
   dictLength: word): _int;
Function deflateCopy(dest: ztv_streamp; source: ztv_streamp): _int;
Function ztvCompressStreamProc(InStream, OutStream: TStream32; zsp:
   ztv_stream_plus; Var CRC: u_long; DefType: TDeflateType; ProgressProc:
   TNotifyEvent; maxbits: ShortInt): Boolean;
//Function ztvCompressStream( InStream, OutStream: TStream32 ): _int;
Function ztvCompress_String_Method1(Var CompressedStr: String; Var StrLength: _int;
	level: TDeflateType): u_long;
Function ztvCompress_String_Method2(Var CompressedStr: String; Var StrLength: _int;
	Level: TDeflateType): u_long;
Function ztvCompress_BufToBuf(Const inbuf: Pointer; InBytes: _int;
   Var outbuf: Pointer; Var outBytes: _int; level: TDeflateType): u_long;
Function ztvCompress_FileToStream(FileName: String; OutStream: TStream32;
	inSize: Int64): u_long;
Function ztvCompress_StreamToClipboard(Stream: TStream32; inSize: Int64;
	Var CompressedSize: Int64; level: TDeflateType): u_long;
Function ztvCompress_StreamToStream(InStream, OutStream: TStream32;
	inSize: Int64; level: TDeflateType): u_long;




Implementation

Uses
   SysUtils,
   Dialogs,
   ztvHeaders,
   Err_Msgs,
   ztvRegister;

Type
   block_state = (need_more, block_done, finish_started, finish_done);
   compress_func = Function(Var s: deflate_state; Flush: _int): block_state;

Function deflate_stored(Var s: deflate_state; Flush: _int): block_state; Far; Forward;
Function deflate_fast(Var s: deflate_state; Flush: _int): block_state; Far; Forward;
Function deflate_slow(Var s: deflate_state; Flush: _int): block_state; Far; Forward;
Procedure lm_init(Var s: deflate_state); Forward;


Const
   ZNIL = 0;
   TOO_FAR = 4096;
   SMALLEST = 1;
   DIST_CODE_LEN = 512;
   REP_3_6 = 16;
   REPZ_3_10 = 17;
   REPZ_11_138 = 18;
   BUF_SIZE = (8 * 2 * SizeOf(char));
   PRESET_DICT = $20;
   MAX_BL_BITS = 7;
   END_BLOCK = 256;
   STORED_BLOCK = 0;
   STATIC_TREES = 1;
   DYN_TREES = 2;
   MAX_MATCH = 258;
   MIN_MATCH = 3;
{$IFDEF DEFLATE64}
  	MAX_MATCH_DEF64 = 64 * 1024; {lengths are 3..65536  for deflate64}
   MIN_LOOKAHEAD_DEF64 = (MAX_MATCH_DEF64 + MIN_MATCH + 1);  //deflate64
{$ELSE}
   MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);
{$ENDIF}


Type
   Config = Record
      good_length: ush;
      max_lazy: ush;
      nice_length: ush;
      max_chain: ush;
      func: compress_func;
   End;

Const
   configuration_table: Array[0..10 - 1] Of Config = (
      { good lazy nice chain }
      (good_length:  0; max_lazy:   0; nice_length:   0; max_chain:    0; func: deflate_stored), { store only }
      (good_length:  4; max_lazy:   4; nice_length:   8; max_chain:    4; func: deflate_fast),   { maximum speed, no lazy matches }
      (good_length:  4; max_lazy:   5; nice_length:  16; max_chain:    8; func: deflate_fast),
      (good_length:  4; max_lazy:   6; nice_length:  32; max_chain:   32; func: deflate_fast),
      (good_length:  4; max_lazy:   4; nice_length:  16; max_chain:   16; func: deflate_slow),   { lazy matches }
      (good_length:  8; max_lazy:  16; nice_length:  32; max_chain:   32; func: deflate_slow),
      (good_length:  8; max_lazy:  16; nice_length: 128; max_chain:  128; func: deflate_slow),
      (good_length:  8; max_lazy:  32; nice_length: 128; max_chain:  256; func: deflate_slow),
      (good_length: 32; max_lazy: 128; nice_length: 258; max_chain: 1024; func: deflate_slow),
      (good_length: 32; max_lazy: 258; nice_length: 258; max_chain: 4096; func: deflate_slow));  { maximum compression }
      //(good_length: 64; max_lazy: 512; nice_length: 512; max_chain: 9182)


Const
   static_ltree: Array[0..L_CODES + 2 - 1] Of ct_data = (
      (fc: (freq:  12); dl: (Len: 8)), (fc: (freq: 140); dl: (Len: 8)), (fc: (freq:  76); dl: (Len: 8)),
      (fc: (freq: 204); dl: (Len: 8)), (fc: (freq:  44); dl: (Len: 8)), (fc: (freq: 172); dl: (Len: 8)),
      (fc: (freq: 108); dl: (Len: 8)), (fc: (freq: 236); dl: (Len: 8)), (fc: (freq:  28); dl: (Len: 8)),
      (fc: (freq: 156); dl: (Len: 8)), (fc: (freq:  92); dl: (Len: 8)), (fc: (freq: 220); dl: (Len: 8)),
      (fc: (freq:  60); dl: (Len: 8)), (fc: (freq: 188); dl: (Len: 8)), (fc: (freq: 124); dl: (Len: 8)),
      (fc: (freq: 252); dl: (Len: 8)), (fc: (freq:   2); dl: (Len: 8)), (fc: (freq: 130); dl: (Len: 8)),
      (fc: (freq:  66); dl: (Len: 8)), (fc: (freq: 194); dl: (Len: 8)), (fc: (freq:  34); dl: (Len: 8)),
      (fc: (freq: 162); dl: (Len: 8)), (fc: (freq:  98); dl: (Len: 8)), (fc: (freq: 226); dl: (Len: 8)),
      (fc: (freq:  18); dl: (Len: 8)), (fc: (freq: 146); dl: (Len: 8)), (fc: (freq:  82); dl: (Len: 8)),
 {10} (fc: (freq: 210); dl: (Len: 8)), (fc: (freq:  50); dl: (Len: 8)), (fc: (freq: 178); dl: (Len: 8)),
      (fc: (freq: 114); dl: (Len: 8)), (fc: (freq: 242); dl: (Len: 8)), (fc: (freq:  10); dl: (Len: 8)),
      (fc: (freq: 138); dl: (Len: 8)), (fc: (freq:  74); dl: (Len: 8)), (fc: (freq: 202); dl: (Len: 8)),
      (fc: (freq:  42); dl: (Len: 8)), (fc: (freq: 170); dl: (Len: 8)), (fc: (freq: 106); dl: (Len: 8)),
      (fc: (freq: 234); dl: (Len: 8)), (fc: (freq:  26); dl: (Len: 8)), (fc: (freq: 154); dl: (Len: 8)),
      (fc: (freq:  90); dl: (Len: 8)), (fc: (freq: 218); dl: (Len: 8)), (fc: (freq:  58); dl: (Len: 8)),
      (fc: (freq: 186); dl: (Len: 8)), (fc: (freq: 122); dl: (Len: 8)), (fc: (freq: 250); dl: (Len: 8)),
      (fc: (freq:   6); dl: (Len: 8)), (fc: (freq: 134); dl: (Len: 8)), (fc: (freq:  70); dl: (Len: 8)),
      (fc: (freq: 198); dl: (Len: 8)), (fc: (freq:  38); dl: (Len: 8)), (fc: (freq: 166); dl: (Len: 8)),
      (fc: (freq: 102); dl: (Len: 8)), (fc: (freq: 230); dl: (Len: 8)), (fc: (freq:  22); dl: (Len: 8)),
 {20} (fc: (freq: 150); dl: (Len: 8)), (fc: (freq:  86); dl: (Len: 8)), (fc: (freq: 214); dl: (Len: 8)),
      (fc: (freq:  54); dl: (Len: 8)), (fc: (freq: 182); dl: (Len: 8)), (fc: (freq: 118); dl: (Len: 8)),
      (fc: (freq: 246); dl: (Len: 8)), (fc: (freq:  14); dl: (Len: 8)), (fc: (freq: 142); dl: (Len: 8)),
      (fc: (freq:  78); dl: (Len: 8)), (fc: (freq: 206); dl: (Len: 8)), (fc: (freq:  46); dl: (Len: 8)),
      (fc: (freq: 174); dl: (Len: 8)), (fc: (freq: 110); dl: (Len: 8)), (fc: (freq: 238); dl: (Len: 8)),
      (fc: (freq:  30); dl: (Len: 8)), (fc: (freq: 158); dl: (Len: 8)), (fc: (freq:  94); dl: (Len: 8)),
      (fc: (freq: 222); dl: (Len: 8)), (fc: (freq:  62); dl: (Len: 8)), (fc: (freq: 190); dl: (Len: 8)),
      (fc: (freq: 126); dl: (Len: 8)), (fc: (freq: 254); dl: (Len: 8)), (fc: (freq:   1); dl: (Len: 8)),
      (fc: (freq: 129); dl: (Len: 8)), (fc: (freq:  65); dl: (Len: 8)), (fc: (freq: 193); dl: (Len: 8)),
      (fc: (freq:  33); dl: (Len: 8)), (fc: (freq: 161); dl: (Len: 8)), (fc: (freq:  97); dl: (Len: 8)),
 {30} (fc: (freq: 225); dl: (Len: 8)), (fc: (freq:  17); dl: (Len: 8)), (fc: (freq: 145); dl: (Len: 8)),
      (fc: (freq:  81); dl: (Len: 8)), (fc: (freq: 209); dl: (Len: 8)), (fc: (freq:  49); dl: (Len: 8)),
      (fc: (freq: 177); dl: (Len: 8)), (fc: (freq: 113); dl: (Len: 8)), (fc: (freq: 241); dl: (Len: 8)),
      (fc: (freq:   9); dl: (Len: 8)), (fc: (freq: 137); dl: (Len: 8)), (fc: (freq:  73); dl: (Len: 8)),
      (fc: (freq: 201); dl: (Len: 8)), (fc: (freq:  41); dl: (Len: 8)), (fc: (freq: 169); dl: (Len: 8)),
      (fc: (freq: 105); dl: (Len: 8)), (fc: (freq: 233); dl: (Len: 8)), (fc: (freq:  25); dl: (Len: 8)),
      (fc: (freq: 153); dl: (Len: 8)), (fc: (freq:  89); dl: (Len: 8)), (fc: (freq: 217); dl: (Len: 8)),
      (fc: (freq:  57); dl: (Len: 8)), (fc: (freq: 185); dl: (Len: 8)), (fc: (freq: 121); dl: (Len: 8)),
      (fc: (freq: 249); dl: (Len: 8)), (fc: (freq:   5); dl: (Len: 8)), (fc: (freq: 133); dl: (Len: 8)),
      (fc: (freq:  69); dl: (Len: 8)), (fc: (freq: 197); dl: (Len: 8)), (fc: (freq:  37); dl: (Len: 8)),
 {40} (fc: (freq: 165); dl: (Len: 8)), (fc: (freq: 101); dl: (Len: 8)), (fc: (freq: 229); dl: (Len: 8)),
      (fc: (freq:  21); dl: (Len: 8)), (fc: (freq: 149); dl: (Len: 8)), (fc: (freq:  85); dl: (Len: 8)),
      (fc: (freq: 213); dl: (Len: 8)), (fc: (freq:  53); dl: (Len: 8)), (fc: (freq: 181); dl: (Len: 8)),
      (fc: (freq: 117); dl: (Len: 8)), (fc: (freq: 245); dl: (Len: 8)), (fc: (freq:  13); dl: (Len: 8)),
      (fc: (freq: 141); dl: (Len: 8)), (fc: (freq:  77); dl: (Len: 8)), (fc: (freq: 205); dl: (Len: 8)),
      (fc: (freq:  45); dl: (Len: 8)), (fc: (freq: 173); dl: (Len: 8)), (fc: (freq: 109); dl: (Len: 8)),
      (fc: (freq: 237); dl: (Len: 8)), (fc: (freq:  29); dl: (Len: 8)), (fc: (freq: 157); dl: (Len: 8)),
      (fc: (freq:  93); dl: (Len: 8)), (fc: (freq: 221); dl: (Len: 8)), (fc: (freq:  61); dl: (Len: 8)),
      (fc: (freq: 189); dl: (Len: 8)), (fc: (freq: 125); dl: (Len: 8)), (fc: (freq: 253); dl: (Len: 8)),
      (fc: (freq:  19); dl: (Len: 9)), (fc: (freq: 275); dl: (Len: 9)), (fc: (freq: 147); dl: (Len: 9)),
 {50} (fc: (freq: 403); dl: (Len: 9)), (fc: (freq:  83); dl: (Len: 9)), (fc: (freq: 339); dl: (Len: 9)),
      (fc: (freq: 211); dl: (Len: 9)), (fc: (freq: 467); dl: (Len: 9)), (fc: (freq:  51); dl: (Len: 9)),
      (fc: (freq: 307); dl: (Len: 9)), (fc: (freq: 179); dl: (Len: 9)), (fc: (freq: 435); dl: (Len: 9)),
      (fc: (freq: 115); dl: (Len: 9)), (fc: (freq: 371); dl: (Len: 9)), (fc: (freq: 243); dl: (Len: 9)),
      (fc: (freq: 499); dl: (Len: 9)), (fc: (freq:  11); dl: (Len: 9)), (fc: (freq: 267); dl: (Len: 9)),
      (fc: (freq: 139); dl: (Len: 9)), (fc: (freq: 395); dl: (Len: 9)), (fc: (freq:  75); dl: (Len: 9)),
      (fc: (freq: 331); dl: (Len: 9)), (fc: (freq: 203); dl: (Len: 9)), (fc: (freq: 459); dl: (Len: 9)),
      (fc: (freq:  43); dl: (Len: 9)), (fc: (freq: 299); dl: (Len: 9)), (fc: (freq: 171); dl: (Len: 9)),
      (fc: (freq: 427); dl: (Len: 9)), (fc: (freq: 107); dl: (Len: 9)), (fc: (freq: 363); dl: (Len: 9)),
      (fc: (freq: 235); dl: (Len: 9)), (fc: (freq: 491); dl: (Len: 9)), (fc: (freq:  27); dl: (Len: 9)),
 {60} (fc: (freq: 283); dl: (Len: 9)), (fc: (freq: 155); dl: (Len: 9)), (fc: (freq: 411); dl: (Len: 9)),
      (fc: (freq:  91); dl: (Len: 9)), (fc: (freq: 347); dl: (Len: 9)), (fc: (freq: 219); dl: (Len: 9)),
      (fc: (freq: 475); dl: (Len: 9)), (fc: (freq:  59); dl: (Len: 9)), (fc: (freq: 315); dl: (Len: 9)),
      (fc: (freq: 187); dl: (Len: 9)), (fc: (freq: 443); dl: (Len: 9)), (fc: (freq: 123); dl: (Len: 9)),
      (fc: (freq: 379); dl: (Len: 9)), (fc: (freq: 251); dl: (Len: 9)), (fc: (freq: 507); dl: (Len: 9)),
      (fc: (freq:   7); dl: (Len: 9)), (fc: (freq: 263); dl: (Len: 9)), (fc: (freq: 135); dl: (Len: 9)),
      (fc: (freq: 391); dl: (Len: 9)), (fc: (freq:  71); dl: (Len: 9)), (fc: (freq: 327); dl: (Len: 9)),
      (fc: (freq: 199); dl: (Len: 9)), (fc: (freq: 455); dl: (Len: 9)), (fc: (freq:  39); dl: (Len: 9)),
      (fc: (freq: 295); dl: (Len: 9)), (fc: (freq: 167); dl: (Len: 9)), (fc: (freq: 423); dl: (Len: 9)),
      (fc: (freq: 103); dl: (Len: 9)), (fc: (freq: 359); dl: (Len: 9)), (fc: (freq: 231); dl: (Len: 9)),
 {70} (fc: (freq: 487); dl: (Len: 9)), (fc: (freq:  23); dl: (Len: 9)), (fc: (freq: 279); dl: (Len: 9)),
      (fc: (freq: 151); dl: (Len: 9)), (fc: (freq: 407); dl: (Len: 9)), (fc: (freq:  87); dl: (Len: 9)),
      (fc: (freq: 343); dl: (Len: 9)), (fc: (freq: 215); dl: (Len: 9)), (fc: (freq: 471); dl: (Len: 9)),
      (fc: (freq:  55); dl: (Len: 9)), (fc: (freq: 311); dl: (Len: 9)), (fc: (freq: 183); dl: (Len: 9)),
      (fc: (freq: 439); dl: (Len: 9)), (fc: (freq: 119); dl: (Len: 9)), (fc: (freq: 375); dl: (Len: 9)),
      (fc: (freq: 247); dl: (Len: 9)), (fc: (freq: 503); dl: (Len: 9)), (fc: (freq:  15); dl: (Len: 9)),
      (fc: (freq: 271); dl: (Len: 9)), (fc: (freq: 143); dl: (Len: 9)), (fc: (freq: 399); dl: (Len: 9)),
      (fc: (freq:  79); dl: (Len: 9)), (fc: (freq: 335); dl: (Len: 9)), (fc: (freq: 207); dl: (Len: 9)),
      (fc: (freq: 463); dl: (Len: 9)), (fc: (freq:  47); dl: (Len: 9)), (fc: (freq: 303); dl: (Len: 9)),
      (fc: (freq: 175); dl: (Len: 9)), (fc: (freq: 431); dl: (Len: 9)), (fc: (freq: 111); dl: (Len: 9)),
 {80} (fc: (freq: 367); dl: (Len: 9)), (fc: (freq: 239); dl: (Len: 9)), (fc: (freq: 495); dl: (Len: 9)),
      (fc: (freq:  31); dl: (Len: 9)), (fc: (freq: 287); dl: (Len: 9)), (fc: (freq: 159); dl: (Len: 9)),
      (fc: (freq: 415); dl: (Len: 9)), (fc: (freq:  95); dl: (Len: 9)), (fc: (freq: 351); dl: (Len: 9)),
      (fc: (freq: 223); dl: (Len: 9)), (fc: (freq: 479); dl: (Len: 9)), (fc: (freq:  63); dl: (Len: 9)),
      (fc: (freq: 319); dl: (Len: 9)), (fc: (freq: 191); dl: (Len: 9)), (fc: (freq: 447); dl: (Len: 9)),
 {85} (fc: (freq: 127); dl: (Len: 9)), (fc: (freq: 383); dl: (Len: 9)), (fc: (freq: 255); dl: (Len: 9)),  //255
      (fc: (freq: 511); dl: (Len: 9)), (fc: (freq:   0); dl: (Len: 7)), (fc: (freq:  64); dl: (Len: 7)),
      (fc: (freq:  32); dl: (Len: 7)), (fc: (freq:  96); dl: (Len: 7)), (fc: (freq:  16); dl: (Len: 7)),
      (fc: (freq:  80); dl: (Len: 7)), (fc: (freq:  48); dl: (Len: 7)), (fc: (freq: 112); dl: (Len: 7)),
      (fc: (freq:   8); dl: (Len: 7)), (fc: (freq:  72); dl: (Len: 7)), (fc: (freq:  40); dl: (Len: 7)),

⌨️ 快捷键说明

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