home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
back2roots/padua
/
padua.7z
/
padua
/
gfx
/
dkbutsrc.lzh
/
ip2dkb.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-05-16
|
3KB
|
164 lines
/*
IP2DKB - 1.00 01/05/90 FPW2
1.10 05/07/90 AAC
Do what you want with this, but leave this comment, my name, and
copyright intact.
DigiView IP format for color is basically the red, green, and blue
arrays (left to right, top to bottom) back to back with a 12 byte
trailer ($8000 $8000 $8000 $8000 $8000 $8000). Since DigiView only
digitizes to 2 million levels, raw data from the digitizer itself
will have the LSB set to zero.
I can be reached on a few Denver Amiga BBS's, at fweed@nyx.cs.du.edu and
uunet!isis!nyx!ufweed!fweed on UseNet, and at the following address:
Frank P. Weed II
P.O. Box 28184 #16
Lakewood, CO 80228
Version 1.10 - Modified to semi-ANSI "C" for greater portability.
Aaron A. Collins
*/
#include <stdio.h>
#include <stdlib.h>
/* Functions Prototypes */
void Title(void);
void ShowUsage(void);
void CleanUp(int);
void Validate(void);
void Convert(void);
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE !FALSE
#endif
FILE *input, *output;
unsigned short lines, width;
int filepos, position;
int checks = FALSE;
char *IPBuf = NULL;
void Title()
{
printf("\033[2;33mIP2DKB\033[0m - Version 1.10\n");
printf("\033[2;32mCopyright (c) 1991 Frank P. Weed II\n\033[0m");
}
void ShowUsage()
{
printf("\n");
printf(" Usage: \033[2;33mIP2DKB\033[0m <infile> <outfile>\n");
printf("\n");
exit(5);
}
void CleanUp(n)
int n;
{
if (IPBuf)
free(IPBuf);
fcloseall();
exit(n);
}
void Validate()
{
long filelen;
fseek(input, 0L, 2);
filelen = ftell(input);
if (((long)width * lines * 3 + 12) == filelen)
checks = TRUE;
if (!checks)
{
printf("Input didn't pass validation\n");
CleanUp(1);
}
rewind(input);
}
void Convert()
{
int w,h;
unsigned char Hi,Lo;
char *rptr,*gptr,*bptr;
printf("Width and height? ");
scanf("%d %d", &w, &h);
width = w; lines = h;
Validate();
IPBuf = (char *)malloc(width*lines*3);
if (IPBuf == NULL)
{
printf("Couldn't grab enough memory\n");
CleanUp(5);
}
printf("Reading...");
fread(IPBuf, width*lines*3, 1, input);
printf("done\n");
Hi = (unsigned char)(width % 256);
fwrite(&Hi, 1, 1, output);
Lo = (unsigned char)(width / 256);
fwrite(&Lo, 1, 1, output);
Hi = (unsigned char)(lines % 256);
fwrite(&Hi, 1, 1, output);
Lo = (unsigned char)(lines / 256);
fwrite(&Lo, 1, 1, output);
rptr = IPBuf;
gptr = IPBuf + (width * lines);
bptr = IPBuf + (2 * width * lines);
for (filepos=0; (unsigned short) filepos < lines; filepos++)
{
Hi = (unsigned char)(filepos % 256);
Lo = (unsigned char)(filepos / 256);
printf("Writing line #%d\n\033[0F", filepos);
fwrite(&Hi, 1, 1, output);
fwrite(&Lo, 1, 1, output);
fwrite(rptr, 1, width, output);
fwrite(gptr, 1, width, output);
fwrite(bptr, 1, width, output);
rptr += width;
gptr += width;
bptr += width;
}
printf("\n");
}
void main(argc,argv)
int argc;
char *argv[];
{
Title();
if (argc != 3)
ShowUsage();
input = fopen(argv[1],"rb");
if (input == NULL)
{
printf("Can't find input file\n");
CleanUp(5);
}
output = fopen(argv[2],"wb");
if (output == NULL)
{
printf("Can't make output file\n");
CleanUp(5);
}
Convert();
printf("Finished\n");
CleanUp(0);
}