ftp.nice.ch/pub/next/unix/graphics/giftool.0.9.NIHS.bs.tar.gz#/giftool-v0.9/main.c

This is main.c in view mode; [Download] [Up]

/*
**  Copyright 1994, Home Pages, Inc.
**
**    Please read the file COPYRIGHT for specific information.
** 
**    Home Pages, Inc.
**    257 Castro St. Suite 219
**    Mountain View, CA 94041
** 
**    Phone: 1 415 903 5353
**      Fax: 1 415 903 5345
** 
**    EMail: support@homepages.com
** 
*/

#include <stdio.h>
#include <ctype.h>
extern char *strchr();
#define TRUE 1
#define FALSE 0
#include "gif.h"

struct colorTable_s {
	int	r,g,b;
	char	*name;
} colorTable [] = {
	{255,250,250,"snow"},
	{248,248,255,"ghost white"},
	{248,248,255,"GhostWhite"},
	{245,245,245,"white smoke"},
	{245,245,245,"WhiteSmoke"},
	{220,220,220,"gainsboro"},
	{255,250,240,"floral white"},
	{255,250,240,"FloralWhite"},
	{253,245,230,"old lace"},
	{253,245,230,"OldLace"},
	{250,240,230,"linen"},
	{250,235,215,"antique white"},
	{250,235,215,"AntiqueWhite"},
	{255,239,213,"papaya whip"},
	{255,239,213,"PapayaWhip"},
	{255,235,205,"blanched almond"},
	{255,235,205,"BlanchedAlmond"},
	{255,228,196,"bisque"},
	{255,218,185,"peach puff"},
	{255,218,185,"PeachPuff"},
	{255,222,173,"navajo white"},
	{255,222,173,"NavajoWhite"},
	{255,228,181,"moccasin"},
	{255,248,220,"cornsilk"},
	{255,255,240,"ivory"},
	{255,250,205,"lemon chiffon"},
	{255,250,205,"LemonChiffon"},
	{255,245,238,"seashell"},
	{240,255,240,"honeydew"},
	{245,255,250,"mint cream"},
	{245,255,250,"MintCream"},
	{240,255,255,"azure"},
	{240,248,255,"alice blue"},
	{240,248,255,"AliceBlue"},
	{230,230,250,"lavender"},
	{255,240,245,"lavender blush"},
	{255,240,245,"LavenderBlush"},
	{255,228,225,"misty rose"},
	{255,228,225,"MistyRose"},
	{255,255,255,"white"},
	{0,0,0,"black"},
	{47,79,79,"dark slate gray"},
	{47,79,79,"DarkSlateGray"},
	{47,79,79,"dark slate grey"},
	{47,79,79,"DarkSlateGrey"},
	{105,105,105,"dim gray"},
	{105,105,105,"DimGray"},
	{105,105,105,"dim grey"},
	{105,105,105,"DimGrey"},
	{112,128,144,"slate gray"},
	{112,128,144,"SlateGray"},
	{112,128,144,"slate grey"},
	{112,128,144,"SlateGrey"},
	{119,136,153,"light slate gray"},
	{119,136,153,"LightSlateGray"},
	{119,136,153,"light slate grey"},
	{119,136,153,"LightSlateGrey"},
	{192,192,192,"gray"},
	{192,192,192,"grey"},
	{211,211,211,"light grey"},
	{211,211,211,"LightGrey"},
	{211,211,211,"light gray"},
	{211,211,211,"LightGray"},
	{25,25,112,"midnight blue"},
	{25,25,112,"MidnightBlue"},
	{0,0,128,"navy"},
	{0,0,128,"navy blue"},
	{0,0,128,"NavyBlue"},
	{100,149,237,"cornflower blue"},
	{100,149,237,"CornflowerBlue"},
	{72,61,139,"dark slate blue"},
	{72,61,139,"DarkSlateBlue"},
	{106,90,205,"slate blue"},
	{106,90,205,"SlateBlue"},
	{123,104,238,"medium slate blue"},
	{123,104,238,"MediumSlateBlue"},
	{132,112,255,"light slate blue"},
	{132,112,255,"LightSlateBlue"},
	{0,0,205,"medium blue"},
	{0,0,205,"MediumBlue"},
	{65,105,225,"royal blue"},
	{65,105,225,"RoyalBlue"},
	{0,0,255,"blue"},
	{30,144,255,"dodger blue"},
	{30,144,255,"DodgerBlue"},
	{0,191,255,"deep sky blue"},
	{0,191,255,"DeepSkyBlue"},
	{135,206,235,"sky blue"},
	{135,206,235,"SkyBlue"},
	{135,206,250,"light sky blue"},
	{135,206,250,"LightSkyBlue"},
	{70,130,180,"steel blue"},
	{70,130,180,"SteelBlue"},
	{176,196,222,"light steel blue"},
	{176,196,222,"LightSteelBlue"},
	{173,216,230,"light blue"},
	{173,216,230,"LightBlue"},
	{176,224,230,"powder blue"},
	{176,224,230,"PowderBlue"},
	{175,238,238,"pale turquoise"},
	{175,238,238,"PaleTurquoise"},
	{0,206,209,"dark turquoise"},
	{0,206,209,"DarkTurquoise"},
	{72,209,204,"medium turquoise"},
	{72,209,204,"MediumTurquoise"},
	{64,224,208,"turquoise"},
	{0,255,255,"cyan"},
	{224,255,255,"light cyan"},
	{224,255,255,"LightCyan"},
	{95,158,160,"cadet blue"},
	{95,158,160,"CadetBlue"},
	{102,205,170,"medium aquamarine"},
	{102,205,170,"MediumAquamarine"},
	{127,255,212,"aquamarine"},
	{0,100,0,"dark green"},
	{0,100,0,"DarkGreen"},
	{85,107,47,"dark olive green"},
	{85,107,47,"DarkOliveGreen"},
	{143,188,143,"dark sea green"},
	{143,188,143,"DarkSeaGreen"},
	{46,139,87,"sea green"},
	{46,139,87,"SeaGreen"},
	{60,179,113,"medium sea green"},
	{60,179,113,"MediumSeaGreen"},
	{32,178,170,"light sea green"},
	{32,178,170,"LightSeaGreen"},
	{152,251,152,"pale green"},
	{152,251,152,"PaleGreen"},
	{0,255,127,"spring green"},
	{0,255,127,"SpringGreen"},
	{124,252,0,"lawn green"},
	{124,252,0,"LawnGreen"},
	{0,255,0,"green"},
	{127,255,0,"chartreuse"},
	{0,250,154,"medium spring green"},
	{0,250,154,"MediumSpringGreen"},
	{173,255,47,"green yellow"},
	{173,255,47,"GreenYellow"},
	{50,205,50,"lime green"},
	{50,205,50,"LimeGreen"},
	{154,205,50,"yellow green"},
	{154,205,50,"YellowGreen"},
	{34,139,34,"forest green"},
	{34,139,34,"ForestGreen"},
	{107,142,35,"olive drab"},
	{107,142,35,"OliveDrab"},
	{189,183,107,"dark khaki"},
	{189,183,107,"DarkKhaki"},
	{240,230,140,"khaki"},
	{238,232,170,"pale goldenrod"},
	{238,232,170,"PaleGoldenrod"},
	{250,250,210,"light goldenrod yellow"},
	{250,250,210,"LightGoldenrodYellow"},
	{255,255,224,"light yellow"},
	{255,255,224,"LightYellow"},
	{255,255,0,"yellow"},
	{255,215,0,"gold"},
	{238,221,130,"light goldenrod"},
	{238,221,130,"LightGoldenrod"},
	{218,165,32,"goldenrod"},
	{184,134,11,"dark goldenrod"},
	{184,134,11,"DarkGoldenrod"},
	{188,143,143,"rosy brown"},
	{188,143,143,"RosyBrown"},
	{205,92,92,"indian red"},
	{205,92,92,"IndianRed"},
	{139,69,19,"saddle brown"},
	{139,69,19,"SaddleBrown"},
	{160,82,45,"sienna"},
	{205,133,63,"peru"},
	{222,184,135,"burlywood"},
	{245,245,220,"beige"},
	{245,222,179,"wheat"},
	{244,164,96,"sandy brown"},
	{244,164,96,"SandyBrown"},
	{210,180,140,"tan"},
	{210,105,30,"chocolate"},
	{178,34,34,"firebrick"},
	{165,42,42,"brown"},
	{233,150,122,"dark salmon"},
	{233,150,122,"DarkSalmon"},
	{250,128,114,"salmon"},
	{255,160,122,"light salmon"},
	{255,160,122,"LightSalmon"},
	{255,165,0,"orange"},
	{255,140,0,"dark orange"},
	{255,140,0,"DarkOrange"},
	{255,127,80,"coral"},
	{240,128,128,"light coral"},
	{240,128,128,"LightCoral"},
	{255,99,71,"tomato"},
	{255,69,0,"orange red"},
	{255,69,0,"OrangeRed"},
	{255,0,0,"red"},
	{255,105,180,"hot pink"},
	{255,105,180,"HotPink"},
	{255,20,147,"deep pink"},
	{255,20,147,"DeepPink"},
	{255,192,203,"pink"},
	{255,182,193,"light pink"},
	{255,182,193,"LightPink"},
	{219,112,147,"pale violet red"},
	{219,112,147,"PaleVioletRed"},
	{176,48,96,"maroon"},
	{199,21,133,"medium violet red"},
	{199,21,133,"MediumVioletRed"},
	{208,32,144,"violet red"},
	{208,32,144,"VioletRed"},
	{255,0,255,"magenta"},
	{238,130,238,"violet"},
	{221,160,221,"plum"},
	{218,112,214,"orchid"},
	{186,85,211,"medium orchid"},
	{186,85,211,"MediumOrchid"},
	{153,50,204,"dark orchid"},
	{153,50,204,"DarkOrchid"},
	{148,0,211,"dark violet"},
	{148,0,211,"DarkViolet"},
	{138,43,226,"blue violet"},
	{138,43,226,"BlueViolet"},
	{160,32,240,"purple"},
	{147,112,219,"medium purple"},
	{147,112,219,"MediumPurple"},
	{216,191,216,"thistle"},
	{255,250,250,"snow1"},
	{238,233,233,"snow2"},
	{205,201,201,"snow3"},
	{139,137,137,"snow4"},
	{255,245,238,"seashell1"},
	{238,229,222,"seashell2"},
	{205,197,191,"seashell3"},
	{139,134,130,"seashell4"},
	{255,239,219,"AntiqueWhite1"},
	{238,223,204,"AntiqueWhite2"},
	{205,192,176,"AntiqueWhite3"},
	{139,131,120,"AntiqueWhite4"},
	{255,228,196,"bisque1"},
	{238,213,183,"bisque2"},
	{205,183,158,"bisque3"},
	{139,125,107,"bisque4"},
	{255,218,185,"PeachPuff1"},
	{238,203,173,"PeachPuff2"},
	{205,175,149,"PeachPuff3"},
	{139,119,101,"PeachPuff4"},
	{255,222,173,"NavajoWhite1"},
	{238,207,161,"NavajoWhite2"},
	{205,179,139,"NavajoWhite3"},
	{139,121,94,"NavajoWhite4"},
	{255,250,205,"LemonChiffon1"},
	{238,233,191,"LemonChiffon2"},
	{205,201,165,"LemonChiffon3"},
	{139,137,112,"LemonChiffon4"},
	{255,248,220,"cornsilk1"},
	{238,232,205,"cornsilk2"},
	{205,200,177,"cornsilk3"},
	{139,136,120,"cornsilk4"},
	{255,255,240,"ivory1"},
	{238,238,224,"ivory2"},
	{205,205,193,"ivory3"},
	{139,139,131,"ivory4"},
	{240,255,240,"honeydew1"},
	{224,238,224,"honeydew2"},
	{193,205,193,"honeydew3"},
	{131,139,131,"honeydew4"},
	{255,240,245,"LavenderBlush1"},
	{238,224,229,"LavenderBlush2"},
	{205,193,197,"LavenderBlush3"},
	{139,131,134,"LavenderBlush4"},
	{255,228,225,"MistyRose1"},
	{238,213,210,"MistyRose2"},
	{205,183,181,"MistyRose3"},
	{139,125,123,"MistyRose4"},
	{240,255,255,"azure1"},
	{224,238,238,"azure2"},
	{193,205,205,"azure3"},
	{131,139,139,"azure4"},
	{131,111,255,"SlateBlue1"},
	{122,103,238,"SlateBlue2"},
	{105,89,205,"SlateBlue3"},
	{71,60,139,"SlateBlue4"},
	{72,118,255,"RoyalBlue1"},
	{67,110,238,"RoyalBlue2"},
	{58,95,205,"RoyalBlue3"},
	{39,64,139,"RoyalBlue4"},
	{0,0,255,"blue1"},
	{0,0,238,"blue2"},
	{0,0,205,"blue3"},
	{0,0,139,"blue4"},
	{30,144,255,"DodgerBlue1"},
	{28,134,238,"DodgerBlue2"},
	{24,116,205,"DodgerBlue3"},
	{16,78,139,"DodgerBlue4"},
	{99,184,255,"SteelBlue1"},
	{92,172,238,"SteelBlue2"},
	{79,148,205,"SteelBlue3"},
	{54,100,139,"SteelBlue4"},
	{0,191,255,"DeepSkyBlue1"},
	{0,178,238,"DeepSkyBlue2"},
	{0,154,205,"DeepSkyBlue3"},
	{0,104,139,"DeepSkyBlue4"},
	{135,206,255,"SkyBlue1"},
	{126,192,238,"SkyBlue2"},
	{108,166,205,"SkyBlue3"},
	{74,112,139,"SkyBlue4"},
	{176,226,255,"LightSkyBlue1"},
	{164,211,238,"LightSkyBlue2"},
	{141,182,205,"LightSkyBlue3"},
	{96,123,139,"LightSkyBlue4"},
	{198,226,255,"SlateGray1"},
	{185,211,238,"SlateGray2"},
	{159,182,205,"SlateGray3"},
	{108,123,139,"SlateGray4"},
	{202,225,255,"LightSteelBlue1"},
	{188,210,238,"LightSteelBlue2"},
	{162,181,205,"LightSteelBlue3"},
	{110,123,139,"LightSteelBlue4"},
	{191,239,255,"LightBlue1"},
	{178,223,238,"LightBlue2"},
	{154,192,205,"LightBlue3"},
	{104,131,139,"LightBlue4"},
	{224,255,255,"LightCyan1"},
	{209,238,238,"LightCyan2"},
	{180,205,205,"LightCyan3"},
	{122,139,139,"LightCyan4"},
	{187,255,255,"PaleTurquoise1"},
	{174,238,238,"PaleTurquoise2"},
	{150,205,205,"PaleTurquoise3"},
	{102,139,139,"PaleTurquoise4"},
	{152,245,255,"CadetBlue1"},
	{142,229,238,"CadetBlue2"},
	{122,197,205,"CadetBlue3"},
	{83,134,139,"CadetBlue4"},
	{0,245,255,"turquoise1"},
	{0,229,238,"turquoise2"},
	{0,197,205,"turquoise3"},
	{0,134,139,"turquoise4"},
	{0,255,255,"cyan1"},
	{0,238,238,"cyan2"},
	{0,205,205,"cyan3"},
	{0,139,139,"cyan4"},
	{151,255,255,"DarkSlateGray1"},
	{141,238,238,"DarkSlateGray2"},
	{121,205,205,"DarkSlateGray3"},
	{82,139,139,"DarkSlateGray4"},
	{127,255,212,"aquamarine1"},
	{118,238,198,"aquamarine2"},
	{102,205,170,"aquamarine3"},
	{69,139,116,"aquamarine4"},
	{193,255,193,"DarkSeaGreen1"},
	{180,238,180,"DarkSeaGreen2"},
	{155,205,155,"DarkSeaGreen3"},
	{105,139,105,"DarkSeaGreen4"},
	{84,255,159,"SeaGreen1"},
	{78,238,148,"SeaGreen2"},
	{67,205,128,"SeaGreen3"},
	{46,139,87,"SeaGreen4"},
	{154,255,154,"PaleGreen1"},
	{144,238,144,"PaleGreen2"},
	{124,205,124,"PaleGreen3"},
	{84,139,84,"PaleGreen4"},
	{0,255,127,"SpringGreen1"},
	{0,238,118,"SpringGreen2"},
	{0,205,102,"SpringGreen3"},
	{0,139,69,"SpringGreen4"},
	{0,255,0,"green1"},
	{0,238,0,"green2"},
	{0,205,0,"green3"},
	{0,139,0,"green4"},
	{127,255,0,"chartreuse1"},
	{118,238,0,"chartreuse2"},
	{102,205,0,"chartreuse3"},
	{69,139,0,"chartreuse4"},
	{192,255,62,"OliveDrab1"},
	{179,238,58,"OliveDrab2"},
	{154,205,50,"OliveDrab3"},
	{105,139,34,"OliveDrab4"},
	{202,255,112,"DarkOliveGreen1"},
	{188,238,104,"DarkOliveGreen2"},
	{162,205,90,"DarkOliveGreen3"},
	{110,139,61,"DarkOliveGreen4"},
	{255,246,143,"khaki1"},
	{238,230,133,"khaki2"},
	{205,198,115,"khaki3"},
	{139,134,78,"khaki4"},
	{255,236,139,"LightGoldenrod1"},
	{238,220,130,"LightGoldenrod2"},
	{205,190,112,"LightGoldenrod3"},
	{139,129,76,"LightGoldenrod4"},
	{255,255,224,"LightYellow1"},
	{238,238,209,"LightYellow2"},
	{205,205,180,"LightYellow3"},
	{139,139,122,"LightYellow4"},
	{255,255,0,"yellow1"},
	{238,238,0,"yellow2"},
	{205,205,0,"yellow3"},
	{139,139,0,"yellow4"},
	{255,215,0,"gold1"},
	{238,201,0,"gold2"},
	{205,173,0,"gold3"},
	{139,117,0,"gold4"},
	{255,193,37,"goldenrod1"},
	{238,180,34,"goldenrod2"},
	{205,155,29,"goldenrod3"},
	{139,105,20,"goldenrod4"},
	{255,185,15,"DarkGoldenrod1"},
	{238,173,14,"DarkGoldenrod2"},
	{205,149,12,"DarkGoldenrod3"},
	{139,101,8,"DarkGoldenrod4"},
	{255,193,193,"RosyBrown1"},
	{238,180,180,"RosyBrown2"},
	{205,155,155,"RosyBrown3"},
	{139,105,105,"RosyBrown4"},
	{255,106,106,"IndianRed1"},
	{238,99,99,"IndianRed2"},
	{205,85,85,"IndianRed3"},
	{139,58,58,"IndianRed4"},
	{255,130,71,"sienna1"},
	{238,121,66,"sienna2"},
	{205,104,57,"sienna3"},
	{139,71,38,"sienna4"},
	{255,211,155,"burlywood1"},
	{238,197,145,"burlywood2"},
	{205,170,125,"burlywood3"},
	{139,115,85,"burlywood4"},
	{255,231,186,"wheat1"},
	{238,216,174,"wheat2"},
	{205,186,150,"wheat3"},
	{139,126,102,"wheat4"},
	{255,165,79,"tan1"},
	{238,154,73,"tan2"},
	{205,133,63,"tan3"},
	{139,90,43,"tan4"},
	{255,127,36,"chocolate1"},
	{238,118,33,"chocolate2"},
	{205,102,29,"chocolate3"},
	{139,69,19,"chocolate4"},
	{255,48,48,"firebrick1"},
	{238,44,44,"firebrick2"},
	{205,38,38,"firebrick3"},
	{139,26,26,"firebrick4"},
	{255,64,64,"brown1"},
	{238,59,59,"brown2"},
	{205,51,51,"brown3"},
	{139,35,35,"brown4"},
	{255,140,105,"salmon1"},
	{238,130,98,"salmon2"},
	{205,112,84,"salmon3"},
	{139,76,57,"salmon4"},
	{255,160,122,"LightSalmon1"},
	{238,149,114,"LightSalmon2"},
	{205,129,98,"LightSalmon3"},
	{139,87,66,"LightSalmon4"},
	{255,165,0,"orange1"},
	{238,154,0,"orange2"},
	{205,133,0,"orange3"},
	{139,90,0,"orange4"},
	{255,127,0,"DarkOrange1"},
	{238,118,0,"DarkOrange2"},
	{205,102,0,"DarkOrange3"},
	{139,69,0,"DarkOrange4"},
	{255,114,86,"coral1"},
	{238,106,80,"coral2"},
	{205,91,69,"coral3"},
	{139,62,47,"coral4"},
	{255,99,71,"tomato1"},
	{238,92,66,"tomato2"},
	{205,79,57,"tomato3"},
	{139,54,38,"tomato4"},
	{255,69,0,"OrangeRed1"},
	{238,64,0,"OrangeRed2"},
	{205,55,0,"OrangeRed3"},
	{139,37,0,"OrangeRed4"},
	{255,0,0,"red1"},
	{238,0,0,"red2"},
	{205,0,0,"red3"},
	{139,0,0,"red4"},
	{255,20,147,"DeepPink1"},
	{238,18,137,"DeepPink2"},
	{205,16,118,"DeepPink3"},
	{139,10,80,"DeepPink4"},
	{255,110,180,"HotPink1"},
	{238,106,167,"HotPink2"},
	{205,96,144,"HotPink3"},
	{139,58,98,"HotPink4"},
	{255,181,197,"pink1"},
	{238,169,184,"pink2"},
	{205,145,158,"pink3"},
	{139,99,108,"pink4"},
	{255,174,185,"LightPink1"},
	{238,162,173,"LightPink2"},
	{205,140,149,"LightPink3"},
	{139,95,101,"LightPink4"},
	{255,130,171,"PaleVioletRed1"},
	{238,121,159,"PaleVioletRed2"},
	{205,104,137,"PaleVioletRed3"},
	{139,71,93,"PaleVioletRed4"},
	{255,52,179,"maroon1"},
	{238,48,167,"maroon2"},
	{205,41,144,"maroon3"},
	{139,28,98,"maroon4"},
	{255,62,150,"VioletRed1"},
	{238,58,140,"VioletRed2"},
	{205,50,120,"VioletRed3"},
	{139,34,82,"VioletRed4"},
	{255,0,255,"magenta1"},
	{238,0,238,"magenta2"},
	{205,0,205,"magenta3"},
	{139,0,139,"magenta4"},
	{255,131,250,"orchid1"},
	{238,122,233,"orchid2"},
	{205,105,201,"orchid3"},
	{139,71,137,"orchid4"},
	{255,187,255,"plum1"},
	{238,174,238,"plum2"},
	{205,150,205,"plum3"},
	{139,102,139,"plum4"},
	{224,102,255,"MediumOrchid1"},
	{209,95,238,"MediumOrchid2"},
	{180,82,205,"MediumOrchid3"},
	{122,55,139,"MediumOrchid4"},
	{191,62,255,"DarkOrchid1"},
	{178,58,238,"DarkOrchid2"},
	{154,50,205,"DarkOrchid3"},
	{104,34,139,"DarkOrchid4"},
	{155,48,255,"purple1"},
	{145,44,238,"purple2"},
	{125,38,205,"purple3"},
	{85,26,139,"purple4"},
	{171,130,255,"MediumPurple1"},
	{159,121,238,"MediumPurple2"},
	{137,104,205,"MediumPurple3"},
	{93,71,139,"MediumPurple4"},
	{255,225,255,"thistle1"},
	{238,210,238,"thistle2"},
	{205,181,205,"thistle3"},
	{139,123,139,"thistle4"},
	{0,0,0,"gray0"},
	{0,0,0,"grey0"},
	{3,3,3,"gray1"},
	{3,3,3,"grey1"},
	{5,5,5,"gray2"},
	{5,5,5,"grey2"},
	{8,8,8,"gray3"},
	{8,8,8,"grey3"},
	{10,10,10,"gray4"},
	{10,10,10,"grey4"},
	{13,13,13,"gray5"},
	{13,13,13,"grey5"},
	{15,15,15,"gray6"},
	{15,15,15,"grey6"},
	{18,18,18,"gray7"},
	{18,18,18,"grey7"},
	{20,20,20,"gray8"},
	{20,20,20,"grey8"},
	{23,23,23,"gray9"},
	{23,23,23,"grey9"},
	{26,26,26,"gray10"},
	{26,26,26,"grey10"},
	{28,28,28,"gray11"},
	{28,28,28,"grey11"},
	{31,31,31,"gray12"},
	{31,31,31,"grey12"},
	{33,33,33,"gray13"},
	{33,33,33,"grey13"},
	{36,36,36,"gray14"},
	{36,36,36,"grey14"},
	{38,38,38,"gray15"},
	{38,38,38,"grey15"},
	{41,41,41,"gray16"},
	{41,41,41,"grey16"},
	{43,43,43,"gray17"},
	{43,43,43,"grey17"},
	{46,46,46,"gray18"},
	{46,46,46,"grey18"},
	{48,48,48,"gray19"},
	{48,48,48,"grey19"},
	{51,51,51,"gray20"},
	{51,51,51,"grey20"},
	{54,54,54,"gray21"},
	{54,54,54,"grey21"},
	{56,56,56,"gray22"},
	{56,56,56,"grey22"},
	{59,59,59,"gray23"},
	{59,59,59,"grey23"},
	{61,61,61,"gray24"},
	{61,61,61,"grey24"},
	{64,64,64,"gray25"},
	{64,64,64,"grey25"},
	{66,66,66,"gray26"},
	{66,66,66,"grey26"},
	{69,69,69,"gray27"},
	{69,69,69,"grey27"},
	{71,71,71,"gray28"},
	{71,71,71,"grey28"},
	{74,74,74,"gray29"},
	{74,74,74,"grey29"},
	{77,77,77,"gray30"},
	{77,77,77,"grey30"},
	{79,79,79,"gray31"},
	{79,79,79,"grey31"},
	{82,82,82,"gray32"},
	{82,82,82,"grey32"},
	{84,84,84,"gray33"},
	{84,84,84,"grey33"},
	{87,87,87,"gray34"},
	{87,87,87,"grey34"},
	{89,89,89,"gray35"},
	{89,89,89,"grey35"},
	{92,92,92,"gray36"},
	{92,92,92,"grey36"},
	{94,94,94,"gray37"},
	{94,94,94,"grey37"},
	{97,97,97,"gray38"},
	{97,97,97,"grey38"},
	{99,99,99,"gray39"},
	{99,99,99,"grey39"},
	{102,102,102,"gray40"},
	{102,102,102,"grey40"},
	{105,105,105,"gray41"},
	{105,105,105,"grey41"},
	{107,107,107,"gray42"},
	{107,107,107,"grey42"},
	{110,110,110,"gray43"},
	{110,110,110,"grey43"},
	{112,112,112,"gray44"},
	{112,112,112,"grey44"},
	{115,115,115,"gray45"},
	{115,115,115,"grey45"},
	{117,117,117,"gray46"},
	{117,117,117,"grey46"},
	{120,120,120,"gray47"},
	{120,120,120,"grey47"},
	{122,122,122,"gray48"},
	{122,122,122,"grey48"},
	{125,125,125,"gray49"},
	{125,125,125,"grey49"},
	{127,127,127,"gray50"},
	{127,127,127,"grey50"},
	{130,130,130,"gray51"},
	{130,130,130,"grey51"},
	{133,133,133,"gray52"},
	{133,133,133,"grey52"},
	{135,135,135,"gray53"},
	{135,135,135,"grey53"},
	{138,138,138,"gray54"},
	{138,138,138,"grey54"},
	{140,140,140,"gray55"},
	{140,140,140,"grey55"},
	{143,143,143,"gray56"},
	{143,143,143,"grey56"},
	{145,145,145,"gray57"},
	{145,145,145,"grey57"},
	{148,148,148,"gray58"},
	{148,148,148,"grey58"},
	{150,150,150,"gray59"},
	{150,150,150,"grey59"},
	{153,153,153,"gray60"},
	{153,153,153,"grey60"},
	{156,156,156,"gray61"},
	{156,156,156,"grey61"},
	{158,158,158,"gray62"},
	{158,158,158,"grey62"},
	{161,161,161,"gray63"},
	{161,161,161,"grey63"},
	{163,163,163,"gray64"},
	{163,163,163,"grey64"},
	{166,166,166,"gray65"},
	{166,166,166,"grey65"},
	{168,168,168,"gray66"},
	{168,168,168,"grey66"},
	{171,171,171,"gray67"},
	{171,171,171,"grey67"},
	{173,173,173,"gray68"},
	{173,173,173,"grey68"},
	{176,176,176,"gray69"},
	{176,176,176,"grey69"},
	{179,179,179,"gray70"},
	{179,179,179,"grey70"},
	{181,181,181,"gray71"},
	{181,181,181,"grey71"},
	{184,184,184,"gray72"},
	{184,184,184,"grey72"},
	{186,186,186,"gray73"},
	{186,186,186,"grey73"},
	{189,189,189,"gray74"},
	{189,189,189,"grey74"},
	{191,191,191,"gray75"},
	{191,191,191,"grey75"},
	{194,194,194,"gray76"},
	{194,194,194,"grey76"},
	{196,196,196,"gray77"},
	{196,196,196,"grey77"},
	{199,199,199,"gray78"},
	{199,199,199,"grey78"},
	{201,201,201,"gray79"},
	{201,201,201,"grey79"},
	{204,204,204,"gray80"},
	{204,204,204,"grey80"},
	{207,207,207,"gray81"},
	{207,207,207,"grey81"},
	{209,209,209,"gray82"},
	{209,209,209,"grey82"},
	{212,212,212,"gray83"},
	{212,212,212,"grey83"},
	{214,214,214,"gray84"},
	{214,214,214,"grey84"},
	{217,217,217,"gray85"},
	{217,217,217,"grey85"},
	{219,219,219,"gray86"},
	{219,219,219,"grey86"},
	{222,222,222,"gray87"},
	{222,222,222,"grey87"},
	{224,224,224,"gray88"},
	{224,224,224,"grey88"},
	{227,227,227,"gray89"},
	{227,227,227,"grey89"},
	{229,229,229,"gray90"},
	{229,229,229,"grey90"},
	{232,232,232,"gray91"},
	{232,232,232,"grey91"},
	{235,235,235,"gray92"},
	{235,235,235,"grey92"},
	{237,237,237,"gray93"},
	{237,237,237,"grey93"},
	{240,240,240,"gray94"},
	{240,240,240,"grey94"},
	{242,242,242,"gray95"},
	{242,242,242,"grey95"},
	{245,245,245,"gray96"},
	{245,245,245,"grey96"},
	{247,247,247,"gray97"},
	{247,247,247,"grey97"},
	{250,250,250,"gray98"},
	{250,250,250,"grey98"},
	{252,252,252,"gray99"},
	{252,252,252,"grey99"},
	{255,255,255,"gray100"},
	{255,255,255,"grey100"},
	{0,0,0,"sgi gray 0"},
	{0,0,0,"SGIGray0"},
	{0,0,0,"sgi grey 0"},
	{0,0,0,"SGIGrey0"},
	{10,10,10,"sgi gray 4"},
	{10,10,10,"SGIGray4"},
	{10,10,10,"sgi grey 4"},
	{10,10,10,"SGIGrey4"},
	{20,20,20,"sgi gray 8"},
	{20,20,20,"SGIGray8"},
	{20,20,20,"sgi grey 8"},
	{20,20,20,"SGIGrey8"},
	{30,30,30,"sgi gray 12"},
	{30,30,30,"SGIGray12"},
	{30,30,30,"sgi grey 12"},
	{30,30,30,"SGIGrey12"},
	{40,40,40,"sgi gray 16"},
	{40,40,40,"SGIGray16"},
	{40,40,40,"sgi grey 16"},
	{40,40,40,"SGIGrey16"},
	{51,51,51,"sgi gray 20"},
	{51,51,51,"SGIGray20"},
	{51,51,51,"sgi grey 20"},
	{51,51,51,"SGIGrey20"},
	{61,61,61,"sgi gray 24"},
	{61,61,61,"SGIGray24"},
	{61,61,61,"sgi grey 24"},
	{61,61,61,"SGIGrey24"},
	{71,71,71,"sgi gray 28"},
	{71,71,71,"SGIGray28"},
	{71,71,71,"sgi grey 28"},
	{71,71,71,"SGIGrey28"},
	{81,81,81,"sgi gray 32"},
	{81,81,81,"SGIGray32"},
	{81,81,81,"sgi grey 32"},
	{81,81,81,"SGIGrey32"},
	{91,91,91,"sgi gray 36"},
	{91,91,91,"SGIGray36"},
	{91,91,91,"sgi grey 36"},
	{91,91,91,"SGIGrey36"},
	{102,102,102,"sgi gray 40"},
	{102,102,102,"SGIGray40"},
	{102,102,102,"sgi grey 40"},
	{102,102,102,"SGIGrey40"},
	{112,112,112,"sgi gray 44"},
	{112,112,112,"SGIGray44"},
	{112,112,112,"sgi grey 44"},
	{112,112,112,"SGIGrey44"},
	{122,122,122,"sgi gray 48"},
	{122,122,122,"SGIGray48"},
	{122,122,122,"sgi grey 48"},
	{122,122,122,"SGIGrey48"},
	{132,132,132,"sgi gray 52"},
	{132,132,132,"SGIGray52"},
	{132,132,132,"sgi grey 52"},
	{132,132,132,"SGIGrey52"},
	{142,142,142,"sgi gray 56"},
	{142,142,142,"SGIGray56"},
	{142,142,142,"sgi grey 56"},
	{142,142,142,"SGIGrey56"},
	{153,153,153,"sgi gray 60"},
	{153,153,153,"SGIGray60"},
	{153,153,153,"sgi grey 60"},
	{153,153,153,"SGIGrey60"},
	{163,163,163,"sgi gray 64"},
	{163,163,163,"SGIGray64"},
	{163,163,163,"sgi grey 64"},
	{163,163,163,"SGIGrey64"},
	{173,173,173,"sgi gray 68"},
	{173,173,173,"SGIGray68"},
	{173,173,173,"sgi grey 68"},
	{173,173,173,"SGIGrey68"},
	{183,183,183,"sgi gray 72"},
	{183,183,183,"SGIGray72"},
	{183,183,183,"sgi grey 72"},
	{183,183,183,"SGIGrey72"},
	{193,193,193,"sgi gray 76"},
	{193,193,193,"SGIGray76"},
	{193,193,193,"sgi grey 76"},
	{193,193,193,"SGIGrey76"},
	{204,204,204,"sgi gray 80"},
	{204,204,204,"SGIGray80"},
	{204,204,204,"sgi grey 80"},
	{204,204,204,"SGIGrey80"},
	{214,214,214,"sgi gray 84"},
	{214,214,214,"SGIGray84"},
	{214,214,214,"sgi grey 84"},
	{214,214,214,"SGIGrey84"},
	{224,224,224,"sgi gray 88"},
	{224,224,224,"SGIGray88"},
	{224,224,224,"sgi grey 88"},
	{224,224,224,"SGIGrey88"},
	{234,234,234,"sgi gray 92"},
	{234,234,234,"SGIGray92"},
	{234,234,234,"sgi grey 92"},
	{234,234,234,"SGIGrey92"},
	{244,244,244,"sgi gray 96"},
	{244,244,244,"SGIGray96"},
	{244,244,244,"sgi grey 96"},
	{244,244,244,"SGIGrey96"},
	{255,255,255,"sgi gray 100"},
	{255,255,255,"SGIGray100"},
	{255,255,255,"sgi grey 100"},
	{255,255,255,"SGIGrey100"},
	{125,158,192,"sgi light blue"},
	{125,158,192,"SGILightBlue"},
	{85,85,85,"sgi dark gray"},
	{85,85,85,"SGIDarkGray"},
	{85,85,85,"sgi dark grey"},
	{85,85,85,"SGIDarkGrey"},
	{198,113,113,"sgi salmon"},
	{198,113,113,"SGISalmon"},
	{113,198,113,"sgi chartreuse"},
	{113,198,113,"SGIChartreuse"},
	{142,142,56,"sgi olive drab"},
	{142,142,56,"SGIOliveDrab"},
	{113,113,198,"sgi slate blue"},
	{113,113,198,"SGISlateBlue"},
	{142,56,142,"sgi beet"},
	{142,56,142,"SGIBeet"},
	{56,142,142,"sgi teal"},
	{56,142,142,"SGITeal"},
	{170,170,170,"sgi light gray"},
	{170,170,170,"SGILightGray"},
	{170,170,170,"sgi light grey"},
	{170,170,170,"SGILightGrey"},
	{214,214,214,"sgi very light gray"},
	{214,214,214,"SGIVeryLightGray"},
	{214,214,214,"sgi very light grey"},
	{214,214,214,"SGIVeryLightGrey"},
	{132,132,132,"sgi medium gray"},
	{132,132,132,"SGIMediumGray"},
	{132,132,132,"sgi medium grey"},
	{132,132,132,"SGIMediumGrey"},
	{40,40,40,"sgi very dark gray"},
	{40,40,40,"SGIVeryDarkGray"},
	{40,40,40,"sgi very dark grey"},
	{40,40,40,"SGIVeryDarkGrey"},
	{197,193,170,"sgi bright gray"},
	{197,193,170,"SGIBrightGray"},
	{197,193,170,"sgi bright grey"},
	{197,193,170,"SGIBrightGrey"},
	{75,0,130,"Indigo"},
	{220,20,60,"Crimson"},
};

#define NUMBER(x)	(sizeof(x) / sizeof(x[0]))

static void dumpCMAP(char *title, char *start, 
			int size, unsigned char data[GIF_MAXCOLORS][3])
{
	int	i;
	int	j;

	if (size == 0)
		return;
	printf("%s\n", title);

	for (i = 0; i < size; i++) {
		int	r = data[i][0];
		int	g = data[i][1];
		int	b = data[i][2];
		char	*name = NULL;

		for (j = 0; j < NUMBER(colorTable); j++) {
			if (colorTable[j].r == r &&
			    colorTable[j].g == g &&
			    colorTable[j].b == b) {
				name = colorTable[j].name;
				break;
			}
		}

		printf("%s%3d: %3d %3d %3d (0x%02x 0x%02x 0x%02x) %s\n",
			start, i+1, 
			data[i][0], data[i][1], data[i][2],
			data[i][0], data[i][1], data[i][2],
			name == NULL ? "" : name);
	}
}

static void GIFDump(char *name, GIFStream *stream, int commentsOnly)
{
	GIFData	*cur;

	if (stream == NULL) {
		printf("GIF Image %s -- BAD Image\n", name);
		return;
	}

	printf("GIF Image %s (%dx%d)\n", 
		name == NULL ? "STDIN" : name,
		stream->width, stream->height);
	if (!commentsOnly) {
		if (stream->cmapSize != 0) 
			dumpCMAP("Image Colormap", "", 
				stream->cmapSize, stream->cmapData);
	}

	for (cur = stream->data; cur != NULL; cur = cur->next) {
		if (commentsOnly && cur->type != gif_comment)
			continue;
		switch (cur->type) {
		case gif_image:
			printf("  %sImage at %d,%d size %dx%d\n",
				cur->data.image.interlaced ?
					"Interlaced " : "",
				cur->x, cur->y, cur->width, cur->height);
			if (cur->info.transparent >= 0) {
				printf("\tTransparent pixel = %d\n",
					cur->info.transparent + 1);
			}
			if (cur->data.image.cmapSize != 0) {
				dumpCMAP("  Image Colormap", "\t",
					cur->data.image.cmapSize,
					cur->data.image.cmapData);
			}
			break;
		case gif_comment:
			printf("  Comment: %*.*s\n",
				cur->data.comment.len, 
				cur->data.comment.len, 
				cur->data.comment.text);
			break;
		case gif_text:
			printf("  Image Text (at %d,%d): %*.*s\n",
				cur->x, cur->y,
				cur->data.text.len, 
				cur->data.text.len, 
				cur->data.text.text);
			break;
		}
	}
}

static void GIFFree(GIFStream *stream)
{
	GIFData	*cur, *nxt;

	if (stream == NULL)
		return;
	cur = stream->data;

	while (cur != NULL) {
		nxt = cur->next;
		switch (cur->type) {
		case gif_image:
			free(cur->data.image.data);
			break;
		case gif_comment:
			free(cur->data.comment.text);
			break;
		case gif_text:
			free(cur->data.text.text);
			break;
		}
		free(cur);
		cur = nxt;
	}
	free(stream);
}

static void setInterlace(GIFStream *stream, int flg)
{
	GIFData	*cur = stream->data;

	for ( ; cur != NULL; cur = cur->next) {
		if (cur->type == gif_image)
			cur->data.image.interlaced = flg > 0;
	}
}
static int toval(char *s)
{
	if (s[0] == '0' && s[1] == 'x') {
		int	v;
		sscanf(s, "0x%x", &v);
		return v;
	} else {
		return atoi(s);
	}
}

static int matchCMAP(char *tpix, int size, unsigned char data[256][3])
{
	char	buf[80], *cp;
	char	c[3][20];
	int	r, g, b;
	int	i;
	int	min, dist;

	if (strchr(tpix, ',') == NULL) {
		int	v = atoi(tpix);

		if (v != 0) {
			if (v <= size && v > 0)
				return v - 1;
			return -1;
		}
		for (v = 0; v < NUMBER(colorTable); v++) {
			if (strcasecmp(colorTable[v].name, tpix) == 0)
				break;
		}
		if (v == NUMBER(colorTable)) 
			return -2;
		
		sprintf(buf, "%d,%d,%d", 
			colorTable[v].r, colorTable[v].g, colorTable[v].b);
		tpix = buf;
	}

	for (cp = tpix, i = 0; i < 3; i++, cp = strchr(cp, ',')) {
		char	*x;

		if (cp == NULL)
			break;
		if (*cp == ',')
			cp++;

		strncpy(c[i], cp, 10);
		if ((x = strchr(c[i], ',')) != NULL)
			*x = '\0';
	}

	if (i != 3)
		return -3;

	r = toval(c[0]);
	g = toval(c[1]);
	b = toval(c[2]);

	min = -3;
	dist = 255 * 255 * 3;

	for (i = 0; i < size && dist != 0; i++) {
		int	d;
		int	dr = data[i][0] - r;
		int	dg = data[i][1] - g;
		int	db = data[i][2] - b;

		if (dr == 0 && dg == 0 && db == 0)
			return i;

		d = dr * dr + dg * dg + db * b;

		if (d < dist) {
			dist = d;
			min = i;
		}
	}
	if (dist > 0)
		fprintf(stderr, "No exact match using pixel %d\n", min + 1);
	return min;
}

static void setTransparent(GIFStream *stream, char *tpix)
{
	GIFData	*cur = stream->data;
	int	cnt = 0;

	for ( ; cur != NULL; cur = cur->next) {
		int	idx;

		if (cur->type != gif_image)
			continue;
		cnt++;
		if (cur->info.transparent != -1) {
			fprintf(stderr,"Warning: image %d was already transparent\n");
		}

		if (cur->data.image.cmapSize != 0) {
			idx = matchCMAP(tpix, cur->data.image.cmapSize, 
					cur->data.image.cmapData);
		} else {
			idx = matchCMAP(tpix, stream->cmapSize, 
					stream->cmapData);
		}
		if (idx == -1) {
			fprintf(stderr,"Warning: Pixel index larger than colormap size\n");
		} else if (idx == -2) {
			fprintf(stderr,"Warning: No such color known (%s)\n", tpix);
		} else {
			cur->info.transparent = idx;
		}
	}
}

static void addComments(GIFStream *stream, char *text)
{
	GIFData	*n;

	if (text == NULL)
		return;

	n = (GIFData *)malloc(sizeof(GIFData));
	n->type = gif_comment;
	n->info.transparent = -1;
	n->info.delayTime = 0;
	n->info.inputFlag = 0;
	n->info.disposal = gif_no_disposal;
	n->width = n->height = n->x = n->y = 0;
	n->data.comment.len  = strlen(text);
	n->data.comment.text = (char*)malloc(strlen(text));
	strcpy(n->data.comment.text, text);

	n->next = stream->data;
	stream->data = n;
}

static void stripComment(GIFStream *stream)
{
	GIFData	*nxt, *cur, *prev = NULL;

	for (cur = stream->data; cur != NULL; cur = nxt) {
		nxt = cur->next;

		if (cur->type == gif_comment) {
			if (prev == NULL)
				stream->data = cur->next;
			else 
				prev->next = cur->next;
			free(cur->data.comment.text);
			free(cur);
		} else {
			prev = cur;
		}
	}
}

static void info()
{
	printf("Copyright 1994, Home Pages, Inc.\n");
	printf("\n");
	printf("Permission to use, copy, and distribute GIFTOOL in its entirety, for\n");
	printf("non-commercial purposes, is hereby granted without fee, provided that\n");
	printf("this license information and copyright notice appear in all copies.\n");
	printf("\n");
	printf("Note that distributing GIFTOOL 'bundled' in with ANY product is considered\n");
	printf("to be a 'commercial purpose'.\n");
	printf("\n");
	printf("Also note that any copies of GIFTOOL that are distributed MUST be built\n");
	printf("and/or configured to be in their 'unregistered copy' mode, so that it\n");
	printf("is made obvious to the user that GIFTOOL is shareware, and that they should\n");
	printf("consider donating, or at least reading this License Info.\n");
	printf("\n");
	printf("Permission to use, copy, and distribute GIFTOOL in its entirety, for\n");
	printf("non-commercial purposes, is hereby granted without fee, provided that\n");
	printf("this license information and copyright notice appear in all copies.\n");
	printf("\n");
	printf("Note that distributing GIFTOOL 'bundled' in with ANY product is considered\n");
	printf("to be a 'commercial purpose'.\n");
	printf("\n");
	printf("Also note that any copies of GIFTOOL that are distributed MUST be built\n");
	printf("and/or configured to be in their 'unregistered copy' mode, so that it\n");
	printf("is made obvious to the user that GIFTOOL is shareware, and that they should\n");
	printf("consider donating, or at least reading this License Info.\n");
	printf("\n");
	printf("The software may be modified for your own purposes, but modified\n");
	printf("versions may NOT be distributed without prior consent of the author.\n");
	printf("\n");
	printf("This software is provided 'as-is', without any express or implied\n");
	printf("warranty.  In no event will the author be held liable for any damages\n");
	printf("arising from the use of this software.\n");
	printf("\n");
	printf("If you would like to do something with GIFTOOL that this copyright\n");
	printf("prohibits (such as distributing it with a commercial product,\n");
	printf("using portions of the source in some other program, etc.), please\n");
	printf("contact the author.  Arrangements can probably easily be worked out.\n");
	printf("\n");
	printf("GIFTOOL is shareware for PERSONAL USE only.  You may use GIFTOOL for \n");
	printf("your own amusement, and if you find it nifty, useful, generally cool, \n");
	printf("or of some value to you, your non-deductable donation would be greatly\n");
	printf("appreciated.  $10 is the suggested donation, though, of course,\n");
	printf("larger donations are quite welcome.  \n");
	printf("\n");
	printf("Commercial, government, and institutional users MUST register their\n");
	printf("copies of GIFTOOL, for the exceedingly REASONABLE price of just $10 per\n");
	printf("workstation.  Site licenses are available for those who wish to run \n");
	printf("GIFTOOL on a large number of machines.  Please contact Home Pages Inc\n");
	printf("for more details.\n");
	printf("\n");
	printf("   US Mail:  Home Pages, Inc.\n");
	printf("             257 Castro St, Suite 219\n");
	printf("             Mountain View, CA 94041\n");
	printf("\n");
	printf("   Phone:    (415) 903-5353\n");
	printf("   EMail:    support@homepages.com\n");
	exit(0);
}

static void usage()
{
	fprintf(stderr,"Usage: giftool [options] [file]\n");
	fprintf(stderr,"       giftool (-p|-c|-B) [options] [files...]\n");
	fprintf(stderr,"\t-B\tBatch Mode, read and write the same filename\n");
	fprintf(stderr,"\t-i\tSet GIF Interlace mode ON\n");
	fprintf(stderr,"\t+i\tSet GIF Interlace mode OFF\n");
	fprintf(stderr,"\t-p\tPrint information about file(s)\n");
	fprintf(stderr,"\t-c\tPrint comment information\n");
	fprintf(stderr,"\t+c\tAdd comments to file(s)\n");
	fprintf(stderr,"\t-C\tStrip comment from file(s)\n");
	fprintf(stderr,"\t-o file\tSend output to 'file'\n");
	fprintf(stderr,"\t-rgb name\tUse 'name' as the transparent pixel\n");
	fprintf(stderr,"\t-rgb ##,##,##\ttUse rgb-value as the transparent pixel\n");
	fprintf(stderr,"\t-###\tUsed pixel index as transparent (1 == first colormap entry)\n");
	fprintf(stderr,"\n");
	fprintf(stderr,"For instance you could say 'giftool -B -i *.gif' to convert all your images\nto interlaced GIF files in one easy step.\n");
	fprintf(stderr,"\n");
	fprintf(stderr,"giftool version 1.0 is Copyright 1994 Home Pages, Inc and is shareware.\n");
	fprintf(stderr,"Please, use the -info option to read the licensing information.\n");
	exit(1);
}

main(int argc, char *argv[]) 
{
	int		c, i;
	int		batchMode = 0;
	int		interlace = 0, batchInterlace = 0;
	int		print     = 0;
	int		stripComments = 0, printComments = 0;
	int		addTrans  = 0, optimize = 0;
	char		*transPixel = NULL, *outFile = NULL;
	char		*addComment = NULL;
	GIFStream	*stream;
	int		idx;
	int		stdinMode = 0;

	for (idx = 1; idx < argc && 
			(argv[idx][0] == '-' || argv[idx][0] == '+'); idx++) {
		char		*arg = argv[idx];
		if (strcmp(arg, "-O") == 0) {
			optimize++;
		} else if (strcmp(arg, "-B") == 0) {
			batchMode = 1;
		} else if (strcmp(arg, "+i") == 0) {
			interlace = -1;
		} else if (strcmp(arg, "-i") == 0) {
			interlace = 1;
		} else if (strcmp(arg, "-c") == 0) {
			printComments = 1;
			print++;
		} else if (strncmp(arg, "+c", 2) == 0) {
			if (strlen(arg) != 2)
				arg += 2;
			else
				arg = argv[++idx];
			if (idx == argc) usage();
			addComment = arg;
		} else if (strcmp(arg, "-C") == 0) {
			stripComments++;
		} else if (strcmp(arg, "-p") == 0) {
			print++;
		} else if (strncmp(arg, "-o", 2) == 0) {
			if (strlen(arg) != 2)
				arg += 2;
			else
				arg = argv[++idx];
			if (idx == argc) usage();
			outFile = arg;
		} else if (strncmp(arg, "-rgb", 4) == 0) {
			if (strlen(arg) != 4)
				arg += 4;
			else
				arg = argv[++idx];
			if (idx == argc) usage();
			if (isdigit(*arg) && strchr(arg, ',') == NULL) {
				static char	buf[24];
				if (idx == argc-2) usage();
				sprintf(buf, "%d,%d,%d", arg, argv[idx+1], argv[idx+2]);
				idx += 2;
				transPixel = buf;
			} else {
				transPixel = arg;
			}
		} else if (isdigit(arg[1])) {
			transPixel = arg+1;
		} else if (strcmp(arg, "--") == 0) {
			idx++;
			break;
		} else if (strcmp(arg, "-info") == 0) {
			info();
		} else {
			if (strcmp(arg, "-help") != 0)
				printf("Unrecognized option %s\n", arg);
			usage();
		}
	}

	if (outFile != NULL && batchMode) {
		fprintf(stderr,"Error: You can't use both the -o and -B options\n");
		usage();
	}

	if (!batchMode && !print) {
		if (argc - idx > 1)
			usage();
	}

	if (idx == argc) {
		argc++;
		stdinMode = 1;
		batchMode = 0;
	}

	for (i = idx; i < argc; i++) {
		GIFStream	*stream;
		char		*frm;

		if (stdinMode) {
			stream = GIFReadFP(stdin);
			frm    = NULL;
		} else {
			frm    = argv[i];
			stream = GIFRead(frm);
		}

		if (print) {
			GIFDump(frm, stream, printComments);
		} else {
			int	status;
			char	*out;

			if (stripComments)
				stripComment(stream);
			addComments(stream, addComment);
			if (transPixel != NULL) 
				setTransparent(stream, transPixel);
			if (interlace != 0)
				setInterlace(stream, interlace);

			if (batchMode) {
				status = GIFWrite(argv[i], stream, optimize);
				out = argv[i];
			} else {
				if (outFile == NULL) {
					status = GIFWriteFP(stdout, stream, optimize);
					out = "<STDOUT>";
				} else {
					status = GIFWrite(outFile, stream, optimize);
					out = outFile;
				}
			}
			if (status)
				fprintf(stderr, "error writing %s\n", out);

			GIFFree(stream);
		}
	}
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.