Michael Bolin's GIF Loader

new topic     » topic index » view thread      » older message » newer message

Hey all,

I'm porting Michael's GIF loader to C++, and as my
Euphoria knowledge is not as comprehensive as I would
like, I'm having a little trouble divining the meaning
of certain parts of the meat of his decompression
code. Below is the code snippet I'm dealing w/,
commented here and there with my guess as to the
meaning of particular parts. For any parties familiar
w/ his code, any wisdom you could impart would be most
appreciated.

if code=end_of_info then
    exit
elsif code=clear_code then
    -- this part just recalcs the 'strings'
    -- table?
    strings=repeat({},n_colors+2)
    for t=1 to n_colors do
        strings[t]={t-1}
    end for
    num_bits=code_size+1
    work_bits=bits[1..num_bits]
    code=bits_to_int(work_bits)+1
    -- this is very confusing for me...
    -- 'strings' is basically a sequence of
    -- sequences, yes? and if this is true,
    -- then up above when we recalculated
    -- the table, every sequence in the
    -- table is further comprised of a one-
    -- element sequence. and so, following
    -- that line of reasoning, it would
    -- appear as if this loop is effectively
    -- equivalent to
    --   'output=output & strings[code][1]'
    -- atleast, that's all i've figured on
    -- so far. how hot/cold am i? pleased
    for t=1 to length(strings[code]) do
        output=append(output,strings[code][t])
    end for
    old=code
    bits=bits[num_bits+1..length(bits)]
else
    if code<=length(strings) then
        -- 'string' points to 'strings[code]'
        string=strings[code]
        -- add all elements in sequence
        -- 'string' to sequence 'output'
        -- basically the same as adding all
        -- elements from 'strings[code]'?
        for t=1 to length(string) do
            output=append(output,string[t])
        end for
        -- same as
        -- 'work=strings[old] & strings[code][1]'?
        work=strings[old] & string[1]
        -- attach sequence 'work' to the
        -- end of 'strings'
        strings=append(strings,work)
        -- so the entire point of this if-block
        -- is to build a sequence, which gets
        -- tacked onto the end of 'strings'?

        old=code
    else
        -- tack a copy of the first element onto
        -- the end of its own sequence?
        work=strings[old] & strings[old][1]
        -- add all elements in sequence 'work' to
        -- sequences 'output'
        for t=1 to length(work) do
            output=append(output,work[t])
        end for
        -- and attach the sequence 'work' to
        -- the end of 'strings' just like in the
        -- if-block
        strings=append(strings,work)
        -- so this else-block seems like a
        -- variation on the if-block

        old=code
    end if
end if


__________________________________________________
Do You Yahoo!?
Yahoo! Photos -- now, 100 FREE prints!
http://photos.yahoo.com

new topic     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu