This is texttotiff.c in view mode; [Download] [Up]
/* Produce "no alpha" .tiff files from text file input */
/* Eric P. Scott, San Francisco State University, July 1989 */
/* cc -bsd -O -o texttotiff -s texttotiff.c */
#include <stdio.h>
struct {
long tiff_magic, tiff_firstifd;
short tiff_ifdents;
struct ifdent {
short ifd_tag, ifd_type;
long ifd_len, ifd_off;
} tiff_ifd[8];
long tiff_ifdchain;
} header={ /* warning: nonportable */
0x4d4d002aL, 8L, 8, {
{ 255, 3, 1L, 1L<<16 },
{ 256, 3, 1L, 0L<<16 }, /* ImageWidth */
{ 257, 3, 1L, 0L<<16 }, /* ImageLength */
{ 262, 3, 1L, 1L<<16 },
{ 277, 3, 1L, 1L<<16 },
{ 284, 3, 1L, 2L<<16 },
{ 258, 3, 1L, 2L<<16 },
{ 273, 4, 1L, 110L }
}, 0L
}; /* "just like Icon" */
char lex[]="#*+."; /* these characters represent gray levels */
main(argc, argv)
int argc;
char *argv[];
{
char *index(), *malloc();
register char *q, *p;
register unsigned char *o;
register int n;
register char *a, *w;
char line[1122];
if (argc!=3) {
fprintf(stderr, "Usage: %s text-file tiff-file\n", *argv);
exit(1);
}
if (strcmp(argv[1], "-")&&!freopen(argv[1], "r", stdin)) {
perror(argv[1]);
exit(1);
}
if (strcmp(argv[2], "-")&&!freopen(argv[2], "w", stdout)) {
perror(argv[2]);
exit(1);
}
if (!fgets(line, sizeof line, stdin)) {
fprintf(stderr, "%s: empty file?!?\n", *argv);
exit(1);
}
if (p=index(line, '\n')) *p='\0';
else {
fprintf(stderr, "%s: internal buffer overflow\n",
*argv);
exit(1);
}
if (p==line) {
fprintf(stderr, "%s: blank line?!?\n", *argv);
exit(1);
}
if (!(a=malloc((p-line)*208))) {
fprintf(stderr, "%s: malloc failure\n", *argv);
exit(1);
}
header.tiff_ifd[1].ifd_off=(p-line)<<16;
w=p; o=(unsigned char *)a;
for (n=1;;) {
p=line; do {
if (!(q=index(lex, *p++))) {
bad:
fprintf(stderr,
"%s: illegal character on line %d col %d\n", *argv, n, p-line);
exit(1);
}
*o=(q-lex)<<6;
if (!*p) { o++; break; }
if (!(q=index(lex, *p++))) goto bad;
*o|=(q-lex)<<4;
if (!*p) { o++; break; }
if (!(q=index(lex, *p++))) goto bad;
*o|=(q-lex)<<2;
if (!*p) { o++; break; }
if (!(q=index(lex, *p++))) goto bad;
*o++|=(q-lex);
} while (*p);
if (!fgets(line, sizeof line, stdin)) break;
if (++n>832||(p=index(line, '\n'))) *p='\0';
else {
fprintf(stderr,
"%s: internal buffer overflow on line %d\n",
*argv, n);
exit(1);
}
if (p!=w) {
fprintf(stderr,
"%s: image not rectangular on line %d\n", *argv, n);
exit(1);
}
}
header.tiff_ifd[2].ifd_off=n<<16;
fwrite((char *)&header, sizeof header, 1, stdout);
fwrite(a, (char *)o-a, 1, stdout);
fflush(stdout);
exit(0);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.