Category : C Source Code
Archive   : GIF_LIB.ZIP
Filename : DEV2GIF.C

 
Output of file : DEV2GIF.C contained in archive : GIF_LIB.ZIP
/*****************************************************************************
* "Gif-Lib" - Yet another gif library. *
* *
* Written by: Gershon Elber IBM PC Ver 0.1, Jun. 1989 *
******************************************************************************
* Module to dump graphic devices into a GIF file. Current supported devices: *
* 1. Hercules. *
******************************************************************************
* History: *
* 22 Jun 89 - Version 1.0 by Gershon Elber. *
*****************************************************************************/

#include
#include
#include
#include
#include "gif_lib.h"

#define PROGRAM_NAME "GIF_LIBRARY"
#define VERSION "á Version 1.0, "

static int GraphDriver = HERCMONO, /* Device parameters */
GraphMode = HERCMONOHI,
ScreenXMax = 720,
ScreenYMax = 348,
ScreenColorBits = 1;
static unsigned int ScreenBase;

static char *VersionStr =
PROGRAM_NAME
" IBMPC "
VERSION
" Gershon Elber, "
__DATE__ ", " __TIME__ "\n"
"(C) Copyright 1989 Gershon Elber, Non commercial use only.\n";

static void GetScanLine(PixelType *ScanLine, int Y);
static int HandleGifError(GifFileType *GifFile);

/******************************************************************************
* Dump the given Device, into given File as GIF format: *
* Return 0 on success, -1 if device not supported, or GIF-LIB error number. *
* See graphics.h for exact definition of GraphDriver/Mode. *
******************************************************************************/
int DumpScreen(char *FileName, int ReqGraphDriver, int ReqGraphMode)
{
int i;
static PixelType *ScanLine;
static GifColorType HerculesColorMap[2] = { { 0, 0, 0 },
{ 255, 255, 255 } };
GifFileType *GifFile;

switch (ReqGraphDriver) { /* return on non supported screens */
case HERCMONO:
ScreenXMax = 720;
ScreenYMax = 350;
ScreenColorBits = 1;
ScreenBase = 0xb000;
break;
default:
return -1;
}

ScanLine = (PixelType *) malloc(sizeof(PixelType) * ScreenXMax);

GraphDriver = ReqGraphDriver;
GraphMode = ReqGraphMode;

if ((GifFile = EGifOpenFileName(FileName, FALSE)) == NULL) {
free((char *) ScanLine);
return HandleGifError(GifFile);
}

if (EGifPutScreenDesc(GifFile, ScreenXMax, ScreenYMax, ScreenColorBits,
0, ScreenColorBits, HerculesColorMap) == ERROR) {
free((char *) ScanLine);
return HandleGifError(GifFile);
}

if (EGifPutImageDesc(GifFile, 0, 0, ScreenXMax, ScreenYMax, FALSE, 1,
NULL) == ERROR) {
free((char *) ScanLine);
return HandleGifError(GifFile);
}

for (i=0; i GetScanLine(ScanLine, i);
if (EGifPutLine(GifFile, ScanLine, ScreenXMax) == ERROR) {
free((char *) ScanLine);
return HandleGifError(GifFile);
}
}

if (EGifCloseFile(GifFile) == ERROR) {
free((char *) ScanLine);
return HandleGifError(GifFile);
}

free((char *) ScanLine);
return 0;
}

/******************************************************************************
* Update the given scan line buffer with the pixel levels of the Y line. *
* This routine is device specific, so make sure you know was you are doing *
******************************************************************************/
static void GetScanLine(PixelType *ScanLine, int Y)
{
unsigned char ScreenByte;
int i, j, k;
unsigned int Offset, Bit;

switch (GraphDriver) {
case HERCMONO:
Offset = 0x2000 * (Y % 4) + (Y / 4) * (ScreenXMax / 8);
/* In one scan lines we have ScreenXMax / 8 bytes: */
for (i=0, k=0; i ScreenByte = (unsigned char) peekb(ScreenBase, Offset++);
for (j=0, Bit = 0x80; j<8; j++) {
ScanLine[k++] = (ScreenByte & Bit ? 1 : 0);
Bit >>= 1;
}
}
break;
default:
break;
}
}

/******************************************************************************
* Handle last GIF error. Try to close the file and free all allocated memory. *
******************************************************************************/
static int HandleGifError(GifFileType *GifFile)
{
int i = GifLastError();

if (EGifCloseFile(GifFile) == ERROR) {
GifLastError();
}
return i;
}


  3 Responses to “Category : C Source Code
Archive   : GIF_LIB.ZIP
Filename : DEV2GIF.C

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/