ftp.nice.ch/pub/next/unix/graphics/tiff-utils.s.tar.gz#/tiff-utils/squeeze.c

This is squeeze.c in view mode; [Download] [Up]

/*
 * squeeze.c - A utility to check a set of .tiff files for compression "none".
 * Then use tiffutil to compress them with LZW compression.
 *
 * Version 1.0, Michael.Glenn@Dartmouth.edu, March 3, 1993.
 */

#include <stdio.h>
#include <sys/types.h>
#include <sys/dir.h>
#include <sys/stat.h>

#define SCRATCH_FILE "./squeeze_scratch"
#define SQUEEZE_COMMAND "tiffutil -lzw \"%s\" -out %s 2>>/dev/null"

extern needs_fixing(char *);

file_exists(char *fname)
{
    struct stat s;
    return stat(fname, &s) == 0;
}

is_tiff_file(char *fname) {
	int l;
	return (l=strlen(fname)) > 4 && !strcmp(&(fname[l-5]), ".tiff");
}

do_file(char *fname) {
	char buff[256];
	struct stat s;
	DIR *dp;
	struct direct *p;

	if (lstat(fname,&s) == -1) {
		fprintf(stderr, "Could not find %s\n", fname);
		return;
	}

	if ((s.st_mode & S_IFMT) == S_IFLNK) {
		if (is_tiff_file(fname))
			printf("Ignoring symbolic link at %s\n", fname);
		else if (stat(fname,&s) == -1)
			fprintf(stderr, "Could not follow link at %s\n", fname);
		else if ((s.st_mode & S_IFMT) == S_IFDIR)
			printf("Ignoring symbolic link at %s\n", fname);
		return;
	}

	if ((s.st_mode & S_IFMT) == S_IFDIR) {
		if (!(dp=opendir(fname))) {
			fprintf (stderr, "Failed to open directory %s\n", fname);
			return;
		}
		while (p=readdir(dp))
			if (strcmp(p->d_name,".") && strcmp(p->d_name,"..")) {
				sprintf(buff,"%s/%s", fname, p->d_name);
				do_file(buff);
			}
		closedir(dp);
		return;
	}

	if (is_tiff_file(fname)) {
		if (!needs_fixing(fname))
			printf("Skipping %s\n", fname);
		else {
			printf("Squeezing %s\n", fname);
			sprintf(buff, SQUEEZE_COMMAND, fname, SCRATCH_FILE);
			system(buff);
			if (file_exists(SCRATCH_FILE))
				rename(SCRATCH_FILE, fname);
			else
				fprintf(stderr, "File %s failed.\n", fname);
		}
	}

}

main(int argc, char **argv)
{
	if (argc == 1) {
		fprintf(stderr, "usage: %s file1 [file2 file3 ...]\n", argv[0]);
		fprintf(stderr, "       %s all\n", argv[0]);
		exit(1);
	}
	if (argc == 2 && !strcmp(argv[1], "all"))
		do_file(".");
	else
		for (; argc > 1; argc--, argv++)
			do_file(argv[1]);
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.