📄 ezzlib.pas
字号:
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 + -