src/weblet/counter/counter.c 1.5

1.5 2009/08/19 23:35:58 angie
Added option to mgSaveToGif and its call stack, to use GIF's Graphic Control Extension to make memgfx's background color (0) transparent. Also corrected terminology for PNG in .h files: useAlpha -> useTransparency.
Index: src/weblet/counter/counter.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/weblet/counter/counter.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -b -B -U 1000000 -r1.4 -r1.5
--- src/weblet/counter/counter.c	8 Nov 2006 17:48:12 -0000	1.4
+++ src/weblet/counter/counter.c	19 Aug 2009 23:35:58 -0000	1.5
@@ -1,92 +1,92 @@
 /* counter.c - A simple web hit counter. */
 #include "common.h"
 #include <time.h>
 #include "cheapcgi.h"
 #include "memgfx.h"
 #include "obscure.h"
 
 
 struct memGfx *makeCountPic(long count, MgFont *font)
 {
 char text[16];
 int textWidth, textHeight;
 int pixWidth, pixHeight;
 struct memGfx *mg;
 
 sprintf(text, "%ld", count);
 textWidth = mgFontStringWidth(font, text);
 textHeight = mgFontLineHeight(font);
 pixWidth = textWidth + 4;
 pixHeight = textHeight + 4;
 mg = mgNew(pixWidth, pixHeight);
 mgClearPixels(mg);
 mgTextCentered(mg, 0, 0, pixWidth, pixHeight, MG_BLACK, font, text);
 return mg;
 }
 
 long incCount(char *fileName, boolean saveWhence)
 /* Increment counter at start of file.  Add hit to end of file. 
  * Return count. */
 {
 long val = 0;
 FILE *f = fopen(fileName, "r+b");
 char *ip;
 int ipSize;
 time_t seconds = time(NULL);
 ip = getenv("REMOTE_HOST");
 if (ip == NULL || ip[0] == 0)
     ip = getenv("REMOTE_ADDR");
 if (ip == NULL)
     ip = "";
 ipSize = strlen(ip) + 1;
 
 if (f != NULL)
     {
     fread(&val, sizeof(val), 1, f);
     rewind(f);
     }
 else
     {
     f = fopen(fileName, "wb");
     }
 ++val;
 if (f != NULL)
     {
     fwrite(&val, sizeof(val), 1, f);
     fseek(f, 0L, SEEK_END);
     fwrite(&seconds, sizeof(seconds), 1, f);
     fwrite(ip, ipSize, 1, f);
     if (saveWhence)
         {
         char *whence = getenv("HTTP_REFERER");
         int whenceSize;
         if (whence == NULL)
             whence = "";
         whenceSize = strlen(whence)+1;
         fwrite(whence, whenceSize, 1, f);
         }
     }
 return val;
 }
 
 int main(int argc, char *argv[])
 {
 char *counterFileName;
 long count;
 struct memGfx *mg;
 boolean saveWhence = cgiBoolean("whence");
 boolean mute = cgiBoolean("mute");
 
 counterFileName = cgiOptionalString("file");
 if (counterFileName == NULL)
     counterFileName = "default.ctr";
 count = incCount(counterFileName, saveWhence);
 
 if (mute)
     mg = mgNew(1, 1);
 else
     mg = makeCountPic(count, mgMediumFont());
 fprintf(stdout, "Content-type: image/gif\n\n");
-mgSaveToGif(stdout, mg);
+mgSaveToGif(stdout, mg, FALSE);
 return 0;
 }