This is main.m in view mode; [Download] [Up]
#import <appkit/NXBitmapImageRep.h>
#import <streams/streams.h>
#import <appkit/tiff.h>
#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/stat.h>
extern FILE *GIF_file;
extern unsigned char *r, *g, *b;
extern int GIF_xsize, GIF_ysize;
float factor = 120.0;
int verbose = 0;
int usec(struct timeval *t)
{
return t->tv_sec * 1000 * 1000 + t->tv_usec;
}
int diff_time(struct timeval *s, struct timeval *e)
{
return usec(e) - usec(s);
}
main(int argc, char *argv[])
{
int i;
struct timeval s, e;
struct stat stat_buf;
char *fname, *out;
unsigned char *planes[3];
id tiff;
NXStream *file;
for (i = 1; i < argc; i++)
if (argv[i][0] != '-')
fname = argv[i];
else
switch(argv[i][1]) {
case 'v':
verbose = !verbose;
break;
case 'f':
factor = atof(argv[++i]);
break;
case 'o':
out = argv[++i];
break;
case 'h':
fprintf(stderr,"usage: jpeg <gif-file> -o <tiff> "
"[-f factor] [-v]\n");
exit(10);
}
if (fname == NULL) {
fprintf(stderr, "Error: must specify input file.\n");
exit(10);
}
if (out == NULL) {
fprintf(stderr, "Error: must specify output file.\n");
exit(10);
}
GIF_file = fopen(fname, "rb");
stat(fname, &stat_buf);
if (verbose)
printf("Starting size = %d.\n", stat_buf.st_size);
i = stat_buf.st_size;
gettimeofday(&s, NULL);
if (readgifheader(stat_buf.st_size) < 0) {
fprintf(stderr, "Error: bad header in %s.\n", fname);
exit(10);
}
if (readgif() < 0)
fprintf(stderr, "Error: reading file %s... using what was "
"read.\n", fname);
gettimeofday(&e, NULL);
if (verbose)
printf("Time to read GIF = %d usec.\n", diff_time(&s, &e));
gettimeofday(&s, NULL);
planes[0] = r;
planes[1] = g;
planes[2] = b;
tiff = [[NXBitmapImageRep alloc] initDataPlanes: planes
pixelsWide: (int) GIF_xsize
pixelsHigh: (int) GIF_ysize bitsPerSample: 8
samplesPerPixel: 3 hasAlpha: NO isPlanar: YES
colorSpace: NX_RGBColorSpace bytesPerRow: GIF_xsize
bitsPerPixel: 8];
gettimeofday(&e, NULL);
if (verbose)
printf("Time to convert = %d usec.\n", diff_time(&s, &e));
gettimeofday(&s, NULL);
file = NXOpenMemory(NULL, 0, NX_WRITEONLY);
[tiff writeTIFF: file usingCompression: NX_TIFF_COMPRESSION_JPEG
andFactor: factor];
gettimeofday(&e, NULL);
if (verbose)
printf("Time to JPEG = %d usec.\n", diff_time(&s, &e));
NXSaveToFile(file, out);
stat(out, &stat_buf);
if (verbose)
printf("Ending size = %d.\n", stat_buf.st_size);
if (verbose)
printf("Compression = %f%%\n", ((float) stat_buf.st_size) /
((float) i) * 100.0);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.