1*324bb76bSAndroid Build Coastguard Worker<?xml version="1.0" encoding="ISO-8859-1"?> 2*324bb76bSAndroid Build Coastguard Worker<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 3*324bb76bSAndroid Build Coastguard Worker 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'> 4*324bb76bSAndroid Build Coastguard Worker<html> 5*324bb76bSAndroid Build Coastguard Worker<head> 6*324bb76bSAndroid Build Coastguard Worker<link rev='made' href='mailto:[email protected]' /> 7*324bb76bSAndroid Build Coastguard Worker<meta name='MSSmartTagsPreventParsing' content='TRUE' /> 8*324bb76bSAndroid Build Coastguard Worker<title>The GIFLIB project</title> 9*324bb76bSAndroid Build Coastguard Worker<script type="text/javascript"> 10*324bb76bSAndroid Build Coastguard Worker// JavaScript to generate a compact date representation 11*324bb76bSAndroid Build Coastguard Worker 12*324bb76bSAndroid Build Coastguard Worker// 13*324bb76bSAndroid Build Coastguard Worker// format date ISO-fashion: yyyy-mm-dd 14*324bb76bSAndroid Build Coastguard Worker// 15*324bb76bSAndroid Build Coastguard Workerfunction date_ddmmmyyyy(date) 16*324bb76bSAndroid Build Coastguard Worker{ 17*324bb76bSAndroid Build Coastguard Worker var d = date.getDate(); 18*324bb76bSAndroid Build Coastguard Worker var m = date.getMonth() + 1; 19*324bb76bSAndroid Build Coastguard Worker var y = date.getFullYear(); 20*324bb76bSAndroid Build Coastguard Worker 21*324bb76bSAndroid Build Coastguard Worker return "" + y + "-" + (m<10?"0"+m:m) + "-" + (d<10?"0"+d:d); 22*324bb76bSAndroid Build Coastguard Worker} 23*324bb76bSAndroid Build Coastguard Worker 24*324bb76bSAndroid Build Coastguard Worker// 25*324bb76bSAndroid Build Coastguard Worker// get last modified date of the 26*324bb76bSAndroid Build Coastguard Worker// current document. 27*324bb76bSAndroid Build Coastguard Worker// 28*324bb76bSAndroid Build Coastguard Workerfunction date_lastmodified() 29*324bb76bSAndroid Build Coastguard Worker{ 30*324bb76bSAndroid Build Coastguard Worker var lmd = document.lastModified; 31*324bb76bSAndroid Build Coastguard Worker var s = "Unknown"; 32*324bb76bSAndroid Build Coastguard Worker var d1; 33*324bb76bSAndroid Build Coastguard Worker 34*324bb76bSAndroid Build Coastguard Worker // check if we have a valid date 35*324bb76bSAndroid Build Coastguard Worker // before proceeding 36*324bb76bSAndroid Build Coastguard Worker if(0 != (d1=Date.parse(lmd))) 37*324bb76bSAndroid Build Coastguard Worker { 38*324bb76bSAndroid Build Coastguard Worker s = "" + date_ddmmmyyyy(new Date(d1)); 39*324bb76bSAndroid Build Coastguard Worker } 40*324bb76bSAndroid Build Coastguard Worker 41*324bb76bSAndroid Build Coastguard Worker return s; 42*324bb76bSAndroid Build Coastguard Worker} 43*324bb76bSAndroid Build Coastguard Worker// End 44*324bb76bSAndroid Build Coastguard Worker</script> 45*324bb76bSAndroid Build Coastguard Worker</head> 46*324bb76bSAndroid Build Coastguard Worker<body> 47*324bb76bSAndroid Build Coastguard Worker<table width='100%' cellpadding='0' summary='Canned page header' bgcolor="#ddd"> 48*324bb76bSAndroid Build Coastguard Worker<tr> 49*324bb76bSAndroid Build Coastguard Worker<td><h2>The GIFLIB project</h2></td> 50*324bb76bSAndroid Build Coastguard Worker<td align="center"><img src="giflib-logo.gif"></td> 51*324bb76bSAndroid Build Coastguard Worker<td align='right'><script type="text/javascript"> 52*324bb76bSAndroid Build Coastguard Workerdocument.write(date_lastmodified()); 53*324bb76bSAndroid Build Coastguard Worker</script></td> 54*324bb76bSAndroid Build Coastguard Worker</tr> 55*324bb76bSAndroid Build Coastguard Worker</table> 56*324bb76bSAndroid Build Coastguard Worker 57*324bb76bSAndroid Build Coastguard Worker<p>The GIFLIB project maintains the giflib service library, which has 58*324bb76bSAndroid Build Coastguard Workerbeen pulling images out of GIFs since 1989. It is deployed everywhere 59*324bb76bSAndroid Build Coastguard Workeryou can think of and some places you probably can't - graphics 60*324bb76bSAndroid Build Coastguard Workerapplications and web browsers on multiple operating systems, game 61*324bb76bSAndroid Build Coastguard Workerconsoles, smartphones, and likely your ATM too.</p> 62*324bb76bSAndroid Build Coastguard Worker 63*324bb76bSAndroid Build Coastguard Worker<p>Yes, this code is he reason GIFs were in Mosaic, the first web 64*324bb76bSAndroid Build Coastguard Workerbrowser that could do inline graphics; it is the implementation 65*324bb76bSAndroid Build Coastguard WorkerAndreesen and Bina used.</p> 66*324bb76bSAndroid Build Coastguard Worker 67*324bb76bSAndroid Build Coastguard Worker<p>This is very mature, stable, small-footprint code with minimal 68*324bb76bSAndroid Build Coastguard Workerdependencies (suitable for use in embedded deployments) that needs only 69*324bb76bSAndroid Build Coastguard Workeroccasional very minor bugfixes. Test reports from odd platforms and 70*324bb76bSAndroid Build Coastguard Workerbetter regression tests are particularly welcome. Don't try to 71*324bb76bSAndroid Build Coastguard Workerredesign it, applications beyond counting would break if you did.</p> 72*324bb76bSAndroid Build Coastguard Worker 73*324bb76bSAndroid Build Coastguard Worker<p>It's "GIFLIB" in caps as a nod to the code's origins in the dark 74*324bb76bSAndroid Build Coastguard Workerand backward abysm of MS-DOS, but Unix hackers are encouraged to spell it 75*324bb76bSAndroid Build Coastguard Worker"giflib" in deference to local conventions. :-) 76*324bb76bSAndroid Build Coastguard Worker 77*324bb76bSAndroid Build Coastguard Worker<p>Before October 2006 the GIF format was encumbered by patents on the 78*324bb76bSAndroid Build Coastguard WorkerLZW compression it uses. This first became an issue in 1993 when the 79*324bb76bSAndroid Build Coastguard Workerpatent-holders made ambiguous noises about requiring royalties. For 80*324bb76bSAndroid Build Coastguard Workersome time a subset of this code travelled as "libungif", supporting 81*324bb76bSAndroid Build Coastguard Workerdecompression but not compression. You can read a more detailed 82*324bb76bSAndroid Build Coastguard Workerhistory <a href="history.html">here</a>.</p> 83*324bb76bSAndroid Build Coastguard Worker 84*324bb76bSAndroid Build Coastguard Worker<p>Note: The 5.x versions change the API slightly in a way that isn't 85*324bb76bSAndroid Build Coastguard Workercompatible with older shared libraries. This was required to fix 86*324bb76bSAndroid Build Coastguard Workersome known problems with the extensions API and with thread-safety.</p> 87*324bb76bSAndroid Build Coastguard Worker 88*324bb76bSAndroid Build Coastguard Worker<p>If you require shared-library compatibility back to ancient 89*324bb76bSAndroid Build Coastguard Workerversions, build from 4.2. 4.2 and the 5.0 version are behaviorally 90*324bb76bSAndroid Build Coastguard Workeralmost identical; the few differences are explained <a 91*324bb76bSAndroid Build Coastguard Workerhref="gif_lib.html#compatibility">here</a>. 92*324bb76bSAndroid Build Coastguard Worker 93*324bb76bSAndroid Build Coastguard Worker<p>The SourceForge summary page (where you can download the source, 94*324bb76bSAndroid Build Coastguard Workerreview the project, find links to the bugtracker and mailing list 95*324bb76bSAndroid Build Coastguard Workerpages, or ask to join the project as a developer) is <a 96*324bb76bSAndroid Build Coastguard Workerhref="https://sourceforge.net/projects/giflib/">here</a>. 97*324bb76bSAndroid Build Coastguard Worker 98*324bb76bSAndroid Build Coastguard Worker<p>People to thank for this code: Gershon Elber, Eric S. Raymond, 99*324bb76bSAndroid Build Coastguard WorkerToshio Kuratomi.</p> 100*324bb76bSAndroid Build Coastguard Worker 101*324bb76bSAndroid Build Coastguard Worker<p>If you appreciate this project, and especially if you make money 102*324bb76bSAndroid Build Coastguard Workerfrom it, please <a href="https://www.patreon.com/esr">support 103*324bb76bSAndroid Build Coastguard Workercontinuing maintainance on Patreon</a>.</p> 104*324bb76bSAndroid Build Coastguard Worker 105*324bb76bSAndroid Build Coastguard Worker<p>GIFLIB technical documentation:</p> 106*324bb76bSAndroid Build Coastguard Worker<ul> 107*324bb76bSAndroid Build Coastguard Worker<li><a href="intro.html">GIFLIB documentation</a></li> 108*324bb76bSAndroid Build Coastguard Worker<li><a href="history.html">GIFLIB's history</a></li> 109*324bb76bSAndroid Build Coastguard Worker<li><a href="gif_lib.html#compatibility">Difference between 4.2 and 5.0</a></li> 110*324bb76bSAndroid Build Coastguard Worker<li><a href="https://sourceforge.net/projects/giflib/">SourceForge project page</a></li> 111*324bb76bSAndroid Build Coastguard Worker<li><a href="https://www.patreon.com/esr">Support this project</a></li> 112*324bb76bSAndroid Build Coastguard Worker</ul> 113*324bb76bSAndroid Build Coastguard Worker 114*324bb76bSAndroid Build Coastguard Worker<p>GIF resources:</p> 115*324bb76bSAndroid Build Coastguard Worker<ul> 116*324bb76bSAndroid Build Coastguard Worker<li><a href="whatsinagif/index.html">What's In A GIF?</a></li> 117*324bb76bSAndroid Build Coastguard Worker<li><a href="gifstandard/GIF89a.html">The GIF standard</a></li> 118*324bb76bSAndroid Build Coastguard Worker<li><a href="gifstandard/LZW-and-GIF-explained.html">LZW and GIF explained</a></li> 119*324bb76bSAndroid Build Coastguard Worker<li><a href="https://en.wikipedia.org/wiki/GIF">Wikipedia on GIF</a></li> 120*324bb76bSAndroid Build Coastguard Worker</ul> 121*324bb76bSAndroid Build Coastguard Worker 122*324bb76bSAndroid Build Coastguard Worker<p>To support this ubiquitous code, <a href="https://www.patreon.com/bePatron?u=962938" data-patreon-widget-type="become-patron-button">Become a Patreon patron!</a><script async src="https://c6.patreon.com/becomePatronButton.bundle.js"></script></p> 123*324bb76bSAndroid Build Coastguard Worker 124*324bb76bSAndroid Build Coastguard Worker</body> 125*324bb76bSAndroid Build Coastguard Worker</html> 126