This is SurfGIFDecoder.rtf in view mode; [Download] [Up]
paperh18648 margl-907 margr0 margt0 margb0fi0 ri0 ql sb0 f1 fs24 Copyright f3 'e3f1 1995 by Netsurfer, Inc., All Rights Reserved. pard s0 li2116 fi0 ri1007 ql tx2494 tx2872 tx3250 f1 fs28 fs16 fs28 fs16 fs28 pard s5 li2116 fi0 ri1007 ql f0 b fs56 SurfGIFDecoder fs16 fs56 pard s17 li4888 fi-2771 ri1007 ql tx4888 f1 b0 fs28 fs16 fs28 f0 b fs28 Inherits From: b0 fs28 f1 SurfDecoder fs16 s10 fs16 fs28 f0 b fs28 Declared In: b0 fs28 f1 SurfGIFSupport.subproj/SurfGIFDecoder fs16 fs28 pard s13 li1360 fi0 ri1007 ql f0 b fs36 fs16 fs36 Class Description fs16 pard s0 li2116 fi0 ri1007 ql tx2494 tx2872 tx3250 f1 b0 fs28 fs16 fs28 This class encapsulates all state necessary to decode a particular GIF stream into an instance of NXImage. The instance of NXImage may contain multiple NXBitmapImageReps-- each one containing one of the images decoded from the GIF stream. This level of abstraction [a class encapsulating the decoder] is necessary to fully support the features of GIF in a manner compatible with NXImage and also support the move to a threaded environment. fs16 fs28 fs16 fs28 The GIF specification defines more than an image encapsulation schema; the decoder must be able to "remember" some state between decoding images. For example, a valid GIF stream is one that contains nothing but a Global Color Table -- as well, a valid GIF stream is one that doesn't contain any Color Tables at all; when encountered, it effectively inherits the color table used to decode the last image [hence the usefulness of a stream that is nothing but a color table]. fs28s13 li1360 fi0 ri1007 ql f0 b fs36 fs16 fs36 Instance Variables fs16 pard s18 li2116 fi0 ri1007 ql tx2872 f1 b0 fs28 unsigned char b showColorTable:1b0 ; unsigned char b produceSilhouette:1b0 ; unsigned char b gctZeroUnused:1b0 ; unsigned char b gctPresent:1b0 ; unsigned char b gctSorted:1b0 ; unsigned char b gcePresent:1b0 ; unsigned char b gceUseTransparency:1b0 ; unsigned char b lctPresent:1b0 ; unsigned char b lctSorted:1b0 ; unsigned char b idInterlaced:1b0 ; char b version[4]b0 ; unsigned char b gceTransparentColorIndexb0 ; unsigned short b lsdWidthb0 ; unsigned short b lsdHeightb0 ; unsigned char b lsdColorResolutionb0 ; unsigned short b lsdGlobalColorTableSizeb0 ; unsigned char b lsdBackgroundIndexb0 ; unsigned char b globalColorTable[GCT_MAX_BYTES]b0 ; unsigned short b idXb0 ; unsigned short b idYb0 ; unsigned short b idWidthb0 ; unsigned short b idHeightb0 ; unsigned char *b localColorTableb0 ; LWZState *b decompressionStateb0 ; pard s11 li6148 fi-4031 ri1007 ql tx6148 tx9676 tx10180 fs16 fs28 showColorTable:1 dump color table? fs16 fs28 produceSilhouette:1 produce silhouette? fs16 fs28 gctZeroUnused:1 zero unspecified bytes? fs16 fs28 gctPresent:1 gct present in stream? fs16 fs28 gctSorted:1 gct sorted most to least significant? fs16 fs28 gcePresent:1 graphic control extension? fs16 fs28 gceUseTransparency:1 image has transparency? fs16 fs28 lctPresent:1 local color table? fs16 fs28 lctSorted:1 local color table sorted? fs16 fs28 idInterlaced:1 interlaced iamge? fs16 fs28 version[4] GIF stream version; typically "87a" or "89a". fs16 fs28 gceTransparentColorIndex transparent color fs16 fs28 lsdWidth logical screen width fs16 fs28 lsdHeight logical screen height fs16 fs28 lsdColorResolution logical screen resolution fs16 fs28 lsdGlobalColorTableSize ls table size fs16 fs28 lsdBackgroundIndex ls background color index fs16 fs28 globalColorTable[GCT_MAX_BYTES] color table fs16 fs28 idX local image descriptor X location fs16 fs28 idY local image descriptor Y location fs16 fs28 idWidth local image descriptor width fs16 fs28 idHeight local image descriptor height "/ unsigned char lctSize;/*" local color table size fs16 fs28 localColorTable local color table fs16 fs28 decompressionState LWZ decompression engine pard s13 li1360 fi0 ri1007 ql f0 b fs36 fs16 fs36 Method Types fs16 f1 b0 fs28 s35 li6148 fi-4031 ri1007 ql tx6148 tx9676 tx10180 fs16 fs28 Instantiation + sharedInstance pard s35 li6148 fi-4031 ri1007 ql tx6148 tx9676 tx10180 fs16 fs28 Class query + imageUnfilteredFileTypes pard s34 li6652 fi-503 ri1007 ql tx9676 tx10180 + canLoadFromStream: pard s35 li6148 fi-4031 ri1007 ql tx6148 tx9676 tx10180 fs16 fs28 Custom GIF Features {f3 -} produceSilhouette pard s34 li6652 fi-503 ri1007 ql tx9676 tx10180 {f3 -} setProduceSilhouette: {f3 -} gctZeroUnused {f3 -} setGctZeroUnused: {f3 -} setShowColorTable: {f3 -} showColorTable pard s13 li1360 fi0 ri1007 ql f0 b fs36 fs16 fs36 Class Methods fs16 fs36 s21 li2493 fi-1132 fi-376 fs28 fs16 fs29 b canLoadFromStream: s20 li3249 fi-1132 fi-756 f1 b0 fs28 + (BOOL)b canLoadFromStream:b0 (NXStream *)i streami0 b b0 pard s0 li2116 fi0 ri1007 ql tx2494 tx2872 tx3250 fs16 fs28 Returns YES if the first few bytes of i streami0 indicate an image that an instance of this decoder can likely decode successfully. fs16 fs28 pard s19 li2493 fi-376 ri1007 ql f0 fs28 fs16 fs29 b imageUnfilteredFileTypes s20 li3249 fi-1132 fi-756 f1 b0 fs28 + (const char *const *)b imageUnfilteredFileTypesb0 pard s0 li2116 fi0 ri1007 ql tx2494 tx2872 tx3250 fs16 fs28 Returns a b NULLb0 terminated array of file extensions that this decoder class can decode. fs16 fs28 pard s19 li2493 fi-376 ri1007 ql f0 fs28 fs16 fs29 b sharedInstance s20 li3249 fi-1132 fi-756 f1 b0 fs28 + b sharedInstanceb0 pard s0 li2116 fi0 ri1007 ql tx2494 tx2872 tx3250 fs16 fs28 This method is provided for convenience and should only be used in a single-threaded conversion environment. In a multiple threaded environment, it is much safer to not use this method and to manage the multiple iinstances using the normal alloc/init/free paradigm. pard s13 li1360 fi0 ri1007 ql f0 b fs36 fs16 fs36 Instance Methods fs16 fs36 s21 li2493 fi-1132 fi-376 fs28 fs16 fs29 b gctZeroUnused s20 li3249 fi-1132 fi-756 f1 b0 fs28 {f3 -} (BOOL)b gctZeroUnusedb0 pard s0 li2116 fi0 ri1007 ql tx2494 tx2872 tx3250 fs16 fs28 Returns YES if the decoder will zero all unused global color table entries beyond the last entry for the current image. Basically, this ensures that if the image references an entry in the color table beyond the color table size (since the global color table is large enough to hold the maximum sized color table, overrunning the current global color table size CANOT cause a memory exception), the resulting pixel will be black. fs16 fs28 pard s19 li2493 fi-376 ri1007 ql f0 fs28 fs16 fs29 b produceSilhouette s20 li3249 fi-1132 fi-756 f1 b0 fs28 {f3 -} (BOOL)b produceSilhouetteb0 pard s0 li2116 fi0 ri1007 ql tx2494 tx2872 tx3250 fs16 fs28 Returns YES if decoder will produce a silhouette of the image. A silhuette is transparent wherever the gif is transparent and is solid white wherever the image is non-transparent. fs16 fs28 pard s19 li2493 fi-376 ri1007 ql f0 fs28 fs16 fs29 b setGctZeroUnused: s20 li3249 fi-1132 fi-756 f1 b0 fs28 {f3 -} (void)b setGctZeroUnused:b0 (BOOL)i aFlagi0 b b0 pard s0 li2116 fi0 ri1007 ql tx2494 tx2872 tx3250 fs16 fs28 Enables/disables zeroing of unused global color table entries. fs16 fs28 fs16 fs28 see b -gctZeroUnusedb0 . fs16 fs28 pard s19 li2493 fi-376 ri1007 ql f0 fs28 fs16 fs29 b setProduceSilhouette: s20 li3249 fi-1132 fi-756 f1 b0 fs28 {f3 -} (void)b setProduceSilhouette:b0 (BOOL)i aFlagi0 b b0 pard s0 li2116 fi0 ri1007 ql tx2494 tx2872 tx3250 fs16 fs28 Enables/disables silhouette mode. fs16 fs28 fs16 fs28 see b -produceSilhouetteb0 . fs16 fs28 pard s19 li2493 fi-376 ri1007 ql f0 fs28 fs16 fs29 b setShowColorTable: s20 li3249 fi-1132 fi-756 f1 b0 fs28 {f3 -} (void)b setShowColorTable:b0 (BOOL)i aFlagi0 b b0 pard s0 li2116 fi0 ri1007 ql tx2494 tx2872 tx3250 fs16 fs28 If enabled, each color table will be printed in ASCII form to stderr. fs16 fs28 pard s19 li2493 fi-376 ri1007 ql f0 fs28 fs16 fs29 b showColorTable s20 li3249 fi-1132 fi-756 f1 b0 fs28 {f3 -} (BOOL)b showColorTableb0 pard s0 li2116 fi0 ri1007 ql tx2494 tx2872 tx3250 fs16 fs28 Returns YES if each decoded color table is printed to stderr. }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.