-
Notifications
You must be signed in to change notification settings - Fork 33
/
gif.bpl
89 lines (76 loc) · 1.21 KB
/
gif.bpl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
const (
fColorTable = 0x80
fColorTableBitsMask = 7
)
ColorTable = {
colortable [(1 << (1 + (fields&fColorTableBitsMask))) * 3]byte
}
Header = {
tag [6]char
width int16
height int16
fields uint8
backgroundIndex uint8
tmp uint8
assert tag == "GIF87a" || tag == "GIF89a"
if fields & fColorTable do ColorTable
}
sTrailer = nil
ImageHeader = {
left int16
top int16
width int16
height int16
fields byte
if fields & fColorTable do ColorTable
}
ExtBlocks = {
len byte
if len {
data [len]byte
next ExtBlocks
}
}
eComment = {
blocks ExtBlocks
}
eApplication = {
len byte
name [len]char
blocks ExtBlocks
}
eText = {
text [13]char
blocks ExtBlocks
}
eGraphicControl = {
unused1 byte
flags byte
delayTime int16
transparentIndex byte
unused2 byte
}
sExtension = {
etag byte
case etag {
0x01: eText
0xF9: eGraphicControl
0xFE: eComment
0xFF: eApplication
}
}
sImage = {
h ImageHeader
litWidth byte
blocks ExtBlocks
assert litWidth >= 2 && litWidth <= 8
}
Record = {
tag byte
case tag {
0x21: sExtension
0x2C: sImage
0x3B: sTrailer
}
}
doc = Header dump *(Record dump)