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

📄 ezzlib.pas

📁 很管用的GIS控件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
      r := Z_DATA_ERROR;
    end
    else if (r <> Z_MEM_ERROR) then begin
      z.msg := 'empty distance tree with lengths';
      r := Z_DATA_ERROR;
    end;
    ZFREE(z, v);
    inflate_trees_dynamic := r;
    exit;
  end;
  ZFREE(z, v);
  inflate_trees_dynamic := Z_OK;
end;

{$IFDEF THREAD_SAFE}
  {$UNDEF BUILDFIXED}          { Use pre-built tables }
{$ELSE
  {$DEFINE BUILDFIXED}         { Build tables on first call to inflate_trees_fixed() }
{$ENDIF}

{$IFDEF BUILDFIXED}
const
  fixed_built: Boolean = False;
  FIXEDH = 544;

var
  fixed_mem: array[0..FIXEDH - 1] of inflate_huft;
  fixed_bl: uInt;
  fixed_bd: uInt;
  fixed_tl: pInflate_huft;
  fixed_td: pInflate_huft;

{$ELSE}
const
  fixed_bl: uInt  = 9;
  fixed_bd: uInt = 5;
  fixed_tl: array[0..512 - 1] of inflate_huft = (
    (Exop:96;Bits:7;base:256), (Exop:0;Bits:8;base:80), (Exop:0;Bits:8;base:16), (Exop:84;Bits:8;base:115),
    (Exop:82;Bits:7;base:31), (Exop:0;Bits:8;base:112), (Exop:0;Bits:8;base:48), (Exop:0;Bits:9;base:192),
    (Exop:80;Bits:7;base:10), (Exop:0;Bits:8;base:96), (Exop:0;Bits:8;base:32), (Exop:0;Bits:9;base:160),
    (Exop:0;Bits:8;base:0), (Exop:0;Bits:8;base:128), (Exop:0;Bits:8;base:64), (Exop:0;Bits:9;base:224),
    (Exop:80;Bits:7;base:6), (Exop:0;Bits:8;base:88), (Exop:0;Bits:8;base:24), (Exop:0;Bits:9;base:144),
    (Exop:83;Bits:7;base:59), (Exop:0;Bits:8;base:120), (Exop:0;Bits:8;base:56), (Exop:0;Bits:9;base:208),
    (Exop:81;Bits:7;base:17), (Exop:0;Bits:8;base:104), (Exop:0;Bits:8;base:40), (Exop:0;Bits:9;base:176),
    (Exop:0;Bits:8;base:8), (Exop:0;Bits:8;base:136), (Exop:0;Bits:8;base:72), (Exop:0;Bits:9;base:240),
    (Exop:80;Bits:7;base:4), (Exop:0;Bits:8;base:84), (Exop:0;Bits:8;base:20), (Exop:85;Bits:8;base:227),
    (Exop:83;Bits:7;base:43), (Exop:0;Bits:8;base:116), (Exop:0;Bits:8;base:52), (Exop:0;Bits:9;base:200),
    (Exop:81;Bits:7;base:13), (Exop:0;Bits:8;base:100), (Exop:0;Bits:8;base:36), (Exop:0;Bits:9;base:168),
    (Exop:0;Bits:8;base:4), (Exop:0;Bits:8;base:132), (Exop:0;Bits:8;base:68), (Exop:0;Bits:9;base:232),
    (Exop:80;Bits:7;base:8), (Exop:0;Bits:8;base:92), (Exop:0;Bits:8;base:28), (Exop:0;Bits:9;base:152),
    (Exop:84;Bits:7;base:83), (Exop:0;Bits:8;base:124), (Exop:0;Bits:8;base:60), (Exop:0;Bits:9;base:216),
    (Exop:82;Bits:7;base:23), (Exop:0;Bits:8;base:108), (Exop:0;Bits:8;base:44), (Exop:0;Bits:9;base:184),
    (Exop:0;Bits:8;base:12), (Exop:0;Bits:8;base:140), (Exop:0;Bits:8;base:76), (Exop:0;Bits:9;base:248),
    (Exop:80;Bits:7;base:3), (Exop:0;Bits:8;base:82), (Exop:0;Bits:8;base:18), (Exop:85;Bits:8;base:163),
    (Exop:83;Bits:7;base:35), (Exop:0;Bits:8;base:114), (Exop:0;Bits:8;base:50), (Exop:0;Bits:9;base:196),
    (Exop:81;Bits:7;base:11), (Exop:0;Bits:8;base:98), (Exop:0;Bits:8;base:34), (Exop:0;Bits:9;base:164),
    (Exop:0;Bits:8;base:2), (Exop:0;Bits:8;base:130), (Exop:0;Bits:8;base:66), (Exop:0;Bits:9;base:228),
    (Exop:80;Bits:7;base:7), (Exop:0;Bits:8;base:90), (Exop:0;Bits:8;base:26), (Exop:0;Bits:9;base:148),
    (Exop:84;Bits:7;base:67), (Exop:0;Bits:8;base:122), (Exop:0;Bits:8;base:58), (Exop:0;Bits:9;base:212),
    (Exop:82;Bits:7;base:19), (Exop:0;Bits:8;base:106), (Exop:0;Bits:8;base:42), (Exop:0;Bits:9;base:180),
    (Exop:0;Bits:8;base:10), (Exop:0;Bits:8;base:138), (Exop:0;Bits:8;base:74), (Exop:0;Bits:9;base:244),
    (Exop:80;Bits:7;base:5), (Exop:0;Bits:8;base:86), (Exop:0;Bits:8;base:22), (Exop:192;Bits:8;base:0),
    (Exop:83;Bits:7;base:51), (Exop:0;Bits:8;base:118), (Exop:0;Bits:8;base:54), (Exop:0;Bits:9;base:204),
    (Exop:81;Bits:7;base:15), (Exop:0;Bits:8;base:102), (Exop:0;Bits:8;base:38), (Exop:0;Bits:9;base:172),
    (Exop:0;Bits:8;base:6), (Exop:0;Bits:8;base:134), (Exop:0;Bits:8;base:70), (Exop:0;Bits:9;base:236),
    (Exop:80;Bits:7;base:9), (Exop:0;Bits:8;base:94), (Exop:0;Bits:8;base:30), (Exop:0;Bits:9;base:156),
    (Exop:84;Bits:7;base:99), (Exop:0;Bits:8;base:126), (Exop:0;Bits:8;base:62), (Exop:0;Bits:9;base:220),
    (Exop:82;Bits:7;base:27), (Exop:0;Bits:8;base:110), (Exop:0;Bits:8;base:46), (Exop:0;Bits:9;base:188),
    (Exop:0;Bits:8;base:14), (Exop:0;Bits:8;base:142), (Exop:0;Bits:8;base:78), (Exop:0;Bits:9;base:252),
    (Exop:96;Bits:7;base:256), (Exop:0;Bits:8;base:81), (Exop:0;Bits:8;base:17), (Exop:85;Bits:8;base:131),
    (Exop:82;Bits:7;base:31), (Exop:0;Bits:8;base:113), (Exop:0;Bits:8;base:49), (Exop:0;Bits:9;base:194),
    (Exop:80;Bits:7;base:10), (Exop:0;Bits:8;base:97), (Exop:0;Bits:8;base:33), (Exop:0;Bits:9;base:162),
    (Exop:0;Bits:8;base:1), (Exop:0;Bits:8;base:129), (Exop:0;Bits:8;base:65), (Exop:0;Bits:9;base:226),
    (Exop:80;Bits:7;base:6), (Exop:0;Bits:8;base:89), (Exop:0;Bits:8;base:25), (Exop:0;Bits:9;base:146),
    (Exop:83;Bits:7;base:59), (Exop:0;Bits:8;base:121), (Exop:0;Bits:8;base:57), (Exop:0;Bits:9;base:210),
    (Exop:81;Bits:7;base:17), (Exop:0;Bits:8;base:105), (Exop:0;Bits:8;base:41), (Exop:0;Bits:9;base:178),
    (Exop:0;Bits:8;base:9), (Exop:0;Bits:8;base:137), (Exop:0;Bits:8;base:73), (Exop:0;Bits:9;base:242),
    (Exop:80;Bits:7;base:4), (Exop:0;Bits:8;base:85), (Exop:0;Bits:8;base:21), (Exop:80;Bits:8;base:258),
    (Exop:83;Bits:7;base:43), (Exop:0;Bits:8;base:117), (Exop:0;Bits:8;base:53), (Exop:0;Bits:9;base:202),
    (Exop:81;Bits:7;base:13), (Exop:0;Bits:8;base:101), (Exop:0;Bits:8;base:37), (Exop:0;Bits:9;base:170),
    (Exop:0;Bits:8;base:5), (Exop:0;Bits:8;base:133), (Exop:0;Bits:8;base:69), (Exop:0;Bits:9;base:234),
    (Exop:80;Bits:7;base:8), (Exop:0;Bits:8;base:93), (Exop:0;Bits:8;base:29), (Exop:0;Bits:9;base:154),
    (Exop:84;Bits:7;base:83), (Exop:0;Bits:8;base:125), (Exop:0;Bits:8;base:61), (Exop:0;Bits:9;base:218),
    (Exop:82;Bits:7;base:23), (Exop:0;Bits:8;base:109), (Exop:0;Bits:8;base:45), (Exop:0;Bits:9;base:186),
    (Exop:0;Bits:8;base:13), (Exop:0;Bits:8;base:141), (Exop:0;Bits:8;base:77), (Exop:0;Bits:9;base:250),
    (Exop:80;Bits:7;base:3), (Exop:0;Bits:8;base:83), (Exop:0;Bits:8;base:19), (Exop:85;Bits:8;base:195),
    (Exop:83;Bits:7;base:35), (Exop:0;Bits:8;base:115), (Exop:0;Bits:8;base:51), (Exop:0;Bits:9;base:198),
    (Exop:81;Bits:7;base:11), (Exop:0;Bits:8;base:99), (Exop:0;Bits:8;base:35), (Exop:0;Bits:9;base:166),
    (Exop:0;Bits:8;base:3), (Exop:0;Bits:8;base:131), (Exop:0;Bits:8;base:67), (Exop:0;Bits:9;base:230),
    (Exop:80;Bits:7;base:7), (Exop:0;Bits:8;base:91), (Exop:0;Bits:8;base:27), (Exop:0;Bits:9;base:150),
    (Exop:84;Bits:7;base:67), (Exop:0;Bits:8;base:123), (Exop:0;Bits:8;base:59), (Exop:0;Bits:9;base:214),
    (Exop:82;Bits:7;base:19), (Exop:0;Bits:8;base:107), (Exop:0;Bits:8;base:43), (Exop:0;Bits:9;base:182),
    (Exop:0;Bits:8;base:11), (Exop:0;Bits:8;base:139), (Exop:0;Bits:8;base:75), (Exop:0;Bits:9;base:246),
    (Exop:80;Bits:7;base:5), (Exop:0;Bits:8;base:87), (Exop:0;Bits:8;base:23), (Exop:192;Bits:8;base:0),
    (Exop:83;Bits:7;base:51), (Exop:0;Bits:8;base:119), (Exop:0;Bits:8;base:55), (Exop:0;Bits:9;base:206),
    (Exop:81;Bits:7;base:15), (Exop:0;Bits:8;base:103), (Exop:0;Bits:8;base:39), (Exop:0;Bits:9;base:174),
    (Exop:0;Bits:8;base:7), (Exop:0;Bits:8;base:135), (Exop:0;Bits:8;base:71), (Exop:0;Bits:9;base:238),
    (Exop:80;Bits:7;base:9), (Exop:0;Bits:8;base:95), (Exop:0;Bits:8;base:31), (Exop:0;Bits:9;base:158),
    (Exop:84;Bits:7;base:99), (Exop:0;Bits:8;base:127), (Exop:0;Bits:8;base:63), (Exop:0;Bits:9;base:222),
    (Exop:82;Bits:7;base:27), (Exop:0;Bits:8;base:111), (Exop:0;Bits:8;base:47), (Exop:0;Bits:9;base:190),
    (Exop:0;Bits:8;base:15), (Exop:0;Bits:8;base:143), (Exop:0;Bits:8;base:79), (Exop:0;Bits:9;base:254),
    (Exop:96;Bits:7;base:256), (Exop:0;Bits:8;base:80), (Exop:0;Bits:8;base:16), (Exop:84;Bits:8;base:115),
    (Exop:82;Bits:7;base:31), (Exop:0;Bits:8;base:112), (Exop:0;Bits:8;base:48), (Exop:0;Bits:9;base:193),
    (Exop:80;Bits:7;base:10), (Exop:0;Bits:8;base:96), (Exop:0;Bits:8;base:32), (Exop:0;Bits:9;base:161),
    (Exop:0;Bits:8;base:0), (Exop:0;Bits:8;base:128), (Exop:0;Bits:8;base:64), (Exop:0;Bits:9;base:225),
    (Exop:80;Bits:7;base:6), (Exop:0;Bits:8;base:88), (Exop:0;Bits:8;base:24), (Exop:0;Bits:9;base:145),
    (Exop:83;Bits:7;base:59), (Exop:0;Bits:8;base:120), (Exop:0;Bits:8;base:56), (Exop:0;Bits:9;base:209),
    (Exop:81;Bits:7;base:17), (Exop:0;Bits:8;base:104), (Exop:0;Bits:8;base:40), (Exop:0;Bits:9;base:177),
    (Exop:0;Bits:8;base:8), (Exop:0;Bits:8;base:136), (Exop:0;Bits:8;base:72), (Exop:0;Bits:9;base:241),
    (Exop:80;Bits:7;base:4), (Exop:0;Bits:8;base:84), (Exop:0;Bits:8;base:20), (Exop:85;Bits:8;base:227),
    (Exop:83;Bits:7;base:43), (Exop:0;Bits:8;base:116), (Exop:0;Bits:8;base:52), (Exop:0;Bits:9;base:201),
    (Exop:81;Bits:7;base:13), (Exop:0;Bits:8;base:100), (Exop:0;Bits:8;base:36), (Exop:0;Bits:9;base:169),
    (Exop:0;Bits:8;base:4), (Exop:0;Bits:8;base:132), (Exop:0;Bits:8;base:68), (Exop:0;Bits:9;base:233),
    (Exop:80;Bits:7;base:8), (Exop:0;Bits:8;base:92), (Exop:0;Bits:8;base:28), (Exop:0;Bits:9;base:153),
    (Exop:84;Bits:7;base:83), (Exop:0;Bits:8;base:124), (Exop:0;Bits:8;base:60), (Exop:0;Bits:9;base:217),
    (Exop:82;Bits:7;base:23), (Exop:0;Bits:8;base:108), (Exop:0;Bits:8;base:44), (Exop:0;Bits:9;base:185),
    (Exop:0;Bits:8;base:12), (Exop:0;Bits:8;base:140), (Exop:0;Bits:8;base:76), (Exop:0;Bits:9;base:249),
    (Exop:80;Bits:7;base:3), (Exop:0;Bits:8;base:82), (Exop:0;Bits:8;base:18), (Exop:85;Bits:8;base:163),
    (Exop:83;Bits:7;base:35), (Exop:0;Bits:8;base:114), (Exop:0;Bits:8;base:50), (Exop:0;Bits:9;base:197),
    (Exop:81;Bits:7;base:11), (Exop:0;Bits:8;base:98), (Exop:0;Bits:8;base:34), (Exop:0;Bits:9;base:165),
    (Exop:0;Bits:8;base:2), (Exop:0;Bits:8;base:130), (Exop:0;Bits:8;base:66), (Exop:0;Bits:9;base:229),
    (Exop:80;Bits:7;base:7), (Exop:0;Bits:8;base:90), (Exop:0;Bits:8;base:26), (Exop:0;Bits:9;base:149),
    (Exop:84;Bits:7;base:67), (Exop:0;Bits:8;base:122), (Exop:0;Bits:8;base:58), (Exop:0;Bits:9;base:213),
    (Exop:82;Bits:7;base:19), (Exop:0;Bits:8;base:106), (Exop:0;Bits:8;base:42), (Exop:0;Bits:9;base:181),
    (Exop:0;Bits:8;base:10), (Exop:0;Bits:8;base:138), (Exop:0;Bits:8;base:74), (Exop:0;Bits:9;base:245),
    (Exop:80;Bits:7;base:5), (Exop:0;Bits:8;base:86), (Exop:0;Bits:8;base:22), (Exop:192;Bits:8;base:0),
    (Exop:83;Bits:7;base:51), (Exop:0;Bits:8;base:118), (Exop:0;Bits:8;base:54), (Exop:0;Bits:9;base:205),
    (Exop:81;Bits:7;base:15), (Exop:0;Bits:8;base:102), (Exop:0;Bits:8;base:38), (Exop:0;Bits:9;base:173),
    (Exop:0;Bits:8;base:6), (Exop:0;Bits:8;base:134), (Exop:0;Bits:8;base:70), (Exop:0;Bits:9;base:237),
    (Exop:80;Bits:7;base:9), (Exop:0;Bits:8;base:94), (Exop:0;Bits:8;base:30), (Exop:0;Bits:9;base:157),
    (Exop:84;Bits:7;base:99), (Exop:0;Bits:8;base:126), (Exop:0;Bits:8;base:62), (Exop:0;Bits:9;base:221),
    (Exop:82;Bits:7;base:27), (Exop:0;Bits:8;base:110), (Exop:0;Bits:8;base:46), (Exop:0;Bits:9;base:189),
    (Exop:0;Bits:8;base:14), (Exop:0;Bits:8;base:142), (Exop:0;Bits:8;base:78), (Exop:0;Bits:9;base:253),
    (Exop:96;Bits:7;base:256), (Exop:0;Bits:8;base:81), (Exop:0;Bits:8;base:17), (Exop:85;Bits:8;base:131),
    (Exop:82;Bits:7;base:31), (Exop:0;Bits:8;base:113), (Exop:0;Bits:8;base:49), (Exop:0;Bits:9;base:195),
    (Exop:80;Bits:7;base:10), (Exop:0;Bits:8;base:97), (Exop:0;Bits:8;base:33), (Exop:0;Bits:9;base:163),
    (Exop:0;Bits:8;base:1), (Exop:0;Bits:8;base:129), (Exop:0;Bits:8;base:65), (Exop:0;Bits:9;base:227),
    (Exop:80;Bits:7;base:6), (Exop:0;Bits:8;base:89), (Exop:0;Bits:8;base:25), (Exop:0;Bits:9;base:147),
    (Exop:83;Bits:7;base:59), (Exop:0;Bits:8;base:121), (Exop:0;Bits:8;base:57), (Exop:0;Bits:9;base:211),
    (Exop:81;Bits:7;base:17), (Exop:0;Bits:8;base:105), (Exop:0;Bits:8;base:41), (Exop:0;Bits:9;base:179),
    (Exop:0;Bits:8;base:9), (Exop:0;Bits:8;base:137), (Exop:0;Bits:8;base:73), (Exop:0;Bits:9;base:243),
    (Exop:80;Bits:7;base:4), (Exop:0;Bits:8;base:85), (Exop:0;Bits:8;base:21), (Exop:80;Bits:8;base:258),
    (Exop:83;Bits:7;base:43), (Exop:0;Bits:8;base:117), (Exop:0;Bits:8;base:53), (Exop:0;Bits:9;base:203),
    (Exop:81;Bits:7;base:13), (Exop:0;Bits:8;base:101), (Exop:0;Bits:8;base:37), (Exop:0;Bits:9;base:171),
    (Exop:0;Bits:8;base:5), (Exop:0;Bits:8;base:133), (Exop:0;Bits:8;base:69), (Exop:0;Bits:9;base:235),
    (Exop:80;Bits:7;base:8), (Exop:0;Bits:8;base:93), (Exop:0;Bits:8;base:29), (Exop:0;Bits:9;base:155),
    (Exop:84;Bits:7;base:83), (Exop:0;Bits:8;base:125), (Exop:0;Bits:8;base:61), (Exop:0;Bits:9;base:219),
    (Exop:82;Bits:7;base:23), (Exop:0;Bits:8;base:109), (Exop:0;Bits:8;base:45), (Exop:0;Bits:9;base:187),
    (Exop:0;Bits:8;base:13), (Exop:0;Bits:8;base:141), (Exop:0;Bits:8;base:77), (Exop:0;Bits:9;base:251),
    (Exop:80;Bits:7;base:3), (Exop:0;Bits:8;base:83), (Exop:0;Bits:8;base:19), (Exop:85;Bits:8;base:195),
    (Exop:83;Bits:7;base:35), (Exop:0;Bits:8;base:115), (Exop:0;Bits:8;base:51), (Exop:0;Bits:9;base:199),
    (Exop:81;Bits:7;base:11), (Exop:0;Bits:8;base:99), (Exop:0;Bits:8;base:35), (Exop:0;Bits:9;base:167),
    (Exop:0;Bits:8;base:3), (Exop:0;Bits:8;base:131), (Exop:0;Bits:8;base:67), (Exop:0;Bits:9;base:231),
    (Exop:80;Bits:7;base:7), (Exop:0;Bits:8;base:91), (Exop:0;Bits:8;base:27), (Exop:0;Bits:9;base:151),
    (Exop:84;Bits:7;base:67), (Exop:0;Bits:8;base:123), (Exop:0;Bits:8;base:59), (Exop:0;Bits:9;base:215),
    (Exop:82;Bits:7;base:19), (Exop:0;Bits:8;base:107), (Exop:0;Bits:8;base:43), (Exop:0;Bits:9;base:183),
    (Exop:0;Bits:8;base:11), (Exop:0;Bits:8;base:139), (Exop:0;Bits:8;base:75), (Exop:0;Bits:9;base:247),
    (Exop:80;Bits:7;base:5), (Exop:0;Bits:8;base:87), (Exop:0;Bits:8;base:23), (Exop:192;Bits:8;base:0),
    (Exop:83;Bits:7;base:51), (Exop:0;Bits:8;base:119), (Exop:0;Bits:8;base:55), (Exop:0;Bits:9;base:207),
    (Exop:81;Bits:7;base:15), (Exop:0;Bits:8;base:103), (Exop:0;Bits:8;base:39), (Exop:0;Bits:9;base:175),
    (Exop:0;Bits:8;base:7), (Exop:0;Bits:8;base:135), (Exop:0;Bits:8;base:71), (Exop:0;Bits:9;base:239),
    (Exop:80;Bits:7;base:9), (Exop:0;Bits:8;base:95), (Exop:0;Bits:8;base:31), (Exop:0;Bits:9;base:159),
    (Exop:84;Bits:7;base:99), (Exop:0;Bits:8;base:127), (Exop:0;Bits:8;base:63), (Exop:0;Bits:9;base:223),
    (Exop:82;Bits:7;base:27), (Exop:0;Bits:8;base:111), (Exop:0;Bits:8;base:47), (Exop:0;Bits:9;base:191),
    (Exop:0;Bits:8;base:15), (Exop:0;Bits:8;base:143), (Exop:0;Bits:8;base:79), (Exop:0;Bits:9;base:255)
  );
  fixed_td: array[0..32 - 1] of inflate_huft = (
    (Exop:80;Bits:5;base:1), (Exop:87;Bits:5;base:257), (Exop:83;Bits:5;base:17), (Exop:91;Bits:5;base:4097),
    (Exop:81;Bits:5;base:5), (Exop:89;Bits:5;base:1025), (Exop:85;Bits:5;base:65), (Exop:93;Bits:5;base:16385),
    (Exop:80;Bits:5;base:3), (Exop:88;Bits:5;base:513), (Exop:84;Bits:5;base:33), (Exop:92;Bits:5;base:8193),
    (Exop:82;Bits:5;base:9), (Exop:90;Bits:5;base:2049), (Exop:86;Bits:5;base:129), (Exop:192;Bits:5;base:24577),
    (Exop:80;Bits:5;base:2), (Exop:87;Bits:5;base:385), (Exop:83;Bits:5;base:25), (Exop:91;Bits:5;base:6145),
    (Exop:81;Bits:5;base:7), (Exop:89;Bits:5;base:1537), (Exop:85;Bits:5;base:97), (Exop:93;Bits:5;base:24577),
    (Exop:80;Bits:5;base:4), (Exop:88;Bits:5;base:769), (Exop:84;Bits:5;base:49), (Exop:92;Bits:5;base:12289),
    (Exop:82;Bits:5;base:13), (Exop:90;Bits:5;base:3073), (Exop:86;Bits:5;base:193), (Exop:192;Bits:5;base:24577)
  );
{$ENDIF}

function inflate_trees_fixed(var bl: uInt;
  var bd: uInt; var tl: pInflate_huft; var td: pInflate_huft; var z: z_stream): int;
{$IFNDEF BUILDFIXED}          { Use pre-built tables (completely thread-safe) }
begin
  bl := fixed_bl;
  bd := fixed_bd;
  tl := @fixed_tl;
  td := @fixed_td;
  inflate_trees_fixed := Z_OK;
end;
{$ELSE}                       { Build tables on first call. This is almost completely thread- }
type                          { safe, but can fail on the rare chance of an allocation error. }
  pFixed_table = ^fixed_table;
  fixed_table = array[0..288 - 1] of uIntf;
var
  k: int;
  c: pFixed_table;
  v: PuIntArray;
  f: uInt;
begin
  if not fixed_built then begin
    f := 0;
    c := pFixed_table(ZALLOC(z, 288, sizeof(uInt)));
    if (c = Z_NULL) then begin
      inflate_trees_fixed := Z_MEM_ERROR;
      exit;
    end;
    v := PuIntArray(ZALLOC(z, 288, sizeof(uInt)));
    if (v = Z_NULL) then begin
      ZFREE(z, c);
      inflate_trees_fixed := Z_MEM_ERROR;
      exit;
    end;
    for k := 0 to Pred(144) do c^[k] := 8;
    for k := 144 to Pred(256) do c^[k] := 9;
    for k := 256 to Pred(280) do c^[k] := 7;
    for k := 280 to Pred(288) do c^[k] := 8;
    fixed_bl := 9;
    huft_build(c^, 288, 257, cplens, cplext, @fixed_tl, fixed_bl, fixed_mem, f, v^);
    for k := 0 to Pred(30) do c^[k] := 5;
    fixed_bd := 5;
    huft_build(c^, 30, 0, cpdist, cpdext, @fixed_td, fixed_bd, fixed_mem, f, v^);
    ZFREE(z, v);
    ZFREE(z, c);
    fixed_built := True;
  end;
  bl := fixed_bl;
  bd := fixed_bd;
  tl := fixed_tl;
  td := fixed_td;
  inflate_trees_fixed := Z_OK;
end;
{$ENDIF}

{-----------------------------------------------------------------------------}
{-----------------------------------------------------------------------------}
{-----------------------------------------------------------------------------}

{ infblock.h and
  infblock.c -- interpret and process block types to last block
  Copyright (C) 1995-1998 Mark Adler

  infblock.pas -- pascal translation
  Copyright (C) 1998 by Jacques Nomssi Nzali
}

const
  border: array[0..18] of Word
  = (16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15);

procedure inflate_blocks_reset(var s: inflate_blocks_state;
  var z: z_stream; c: puLong);
begin
  if (c <> Z_NULL) then
    c^ := s.check;
  if (s.mode = BTREE) or (s.mode = DTREE) then
    ZFREE(z, s.sub.trees.blens);
  if (s.mode = CODES) then
    inflate_codes_free(s.sub.decode.codes, z);
  s.mode := ZTYPE;
  s.bitk := 0;
  s.bitb := 0;
  s.write := s.window;
  s.read := s.window;
  if Assigned(s.checkfn) then begin
    s.check := s.checkfn(uLong(0), pBytef(nil), 0);
    z.adler := s.check;
  end;
end;

function inflate_blocks_new(var z: z_stream;
  c: check_func; w: uInt): pInflate_blocks_state;
var
  s: pInflate_blocks_state;
begin
  s := pInflate_blocks_state(ZALLOC(z, 1, sizeof(inflate_blocks_state)));
  if (s = Z_NULL) then begin
    inflate_blocks_new := s;
    exit;
  end;
  s^.hufts := huft_ptr(ZALLOC(z, sizeof(inflate_huft), MANY));
  if (s^.hufts = Z_NULL) then begin
    ZFREE(z, s);
    inflate_blocks_new := Z_NULL;
    exit;
  end;
  s^.window := pBytef(ZALLOC(z, 1, w));
  if (s^.window = Z_NULL) then begin
    ZFREE(z, s^.hufts);
    ZFREE(z, s);
    inflate_blocks_new := Z_NULL;
    exit;
  end;
  s^.zend := s^.window;
  Inc(s^.zend, w);
  s^.checkfn := c;
  s^.mode := ZTYPE;
  inflate_blocks_reset(s^, z, Z_NULL);
  inflate_blocks_new := s;
end;

function inflate_blocks(var s: inflate_blocks_state;
  var z: z_stream; r: int): int;
label
  start_btree, start_dtree,
  start_blkdone, start_dry,
  start_codes;
var
  t: uInt;
  b: uLong;
  k: uInt;
  p: pBytef;
  n: uInt;
  q: pBytef;
  m: uInt;
  bl, bd: uInt;
  tl, td: pInflate_huft;
  h: pInflate_huft;
  i, j, c: uInt;
  cs: pInflate_codes_state;
begin
  p := z.next_in;
  n := z.avail_in;
  b := s.bitb;
  k := s.bitk;
  q := s.write;
  if ptr2int(q) < ptr2int(s.read) then
    m := uInt(ptr2int(s.read) - ptr2int(q) - 1)
  else
    m := uInt(ptr2int(s.zend) - ptr2int(q));
  while True do
    case s.mode of
      ZTYPE:
        begin
          while (k < 3) do begin
            if (n <> 0) then
              r := Z_OK
            else begin
              s.bitb := b;
              s.bitk := k;
              z.avail_in := n;
              Inc(z.total_in, ptr2int(p) - ptr2int(z.next_in));
              z.next_in := p;
              s.write := q;
              inflate_blocks := inflate_flush(s, z, r);
              exit;
            end;
            Dec(n);
            b := b or (uLong(p^) shl k);
            Inc(p);
            Inc(k, 8);
          end;
          t := uInt(b) and 7;
          s.last := boolean(t and 1);
          case (t shr 1) of
            0:
              begin
                b := b shr 3;
                Dec(k, 3);
                t := k and 7;
                b := b shr t;
                Dec(k, t);
                s.mode := LENS;
              end;
            1:
              begin
                inflate_trees_fixed(bl, bd, tl, td, z);
                s.sub.decode.codes := inflate_codes_new(bl, bd, tl, td, z);
                if (s.sub.decode.codes = Z_NULL) then begin
                  r := Z_MEM_ERROR;
                  s.bitb := b;
                  s.bitk := k;
                  z.avail_in := n;
                  Inc(z.total_in, ptr2int(p) - ptr2int(z.next_in));
                  z.next_in := p;
                  s.write := q;
                  inflate_blocks := inflate_flush(s, z, r);
                  exit;
                end;
                b := b shr 3;
                Dec(k, 3);
                s.mode := CODES;
              end;
            2:
              begin
                b := b shr 3;
                Dec(k, 3);
                s.mode := TABLE;
              end;
            3:
              begin
                b := b shr 3;
                Dec(k, 3);
                s.mode := BLKBAD;
                z.msg := 'invalid block type';
                r :

⌨️ 快捷键说明

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