Example #1
0
        internal void Put(Deflate d)
        {
            int flag = 0;

            if (text)
            {
                flag |= 1;     // FTEXT
            }
            if (fhcrc)
            {
                flag |= 2;     // FHCRC
            }
            if (extra != null)
            {
                flag |= 4;     // FEXTRA
            }
            if (name != null)
            {
                flag |= 8;    // FNAME
            }
            if (comment != null)
            {
                flag |= 16;   // FCOMMENT
            }
            int xfl = 0;

            if (d.level == JZlib.Z_BEST_SPEED)
            {
                xfl |= 4;
            }
            else if (d.level == JZlib.Z_BEST_COMPRESSION)
            {
                xfl |= 2;
            }

            d.Put_short(unchecked ((short)0x8b1f)); // ID1 ID2
            d.Put_byte((byte)8);                    // CM(Compression Method)
            d.Put_byte((byte)flag);
            d.Put_byte((byte)mtime);
            d.Put_byte((byte)(mtime >> 8));
            d.Put_byte((byte)(mtime >> 16));
            d.Put_byte((byte)(mtime >> 24));
            d.Put_byte((byte)xfl);
            d.Put_byte((byte)os);

            if (extra != null)
            {
                d.Put_byte((byte)extra.Length);
                d.Put_byte((byte)(extra.Length >> 8));
                d.Put_byte(extra, 0, extra.Length);
            }

            if (name != null)
            {
                d.Put_byte(name, 0, name.Length);
                d.Put_byte((byte)0);
            }

            if (comment != null)
            {
                d.Put_byte(comment, 0, comment.Length);
                d.Put_byte((byte)0);
            }
        }