summaryrefslogtreecommitdiff
path: root/include/pbmplus.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/pbmplus.h')
-rw-r--r--include/pbmplus.h196
1 files changed, 196 insertions, 0 deletions
diff --git a/include/pbmplus.h b/include/pbmplus.h
new file mode 100644
index 0000000..e001fea
--- /dev/null
+++ b/include/pbmplus.h
@@ -0,0 +1,196 @@
+/* pbmplus.h - header file for PBM, PGM, PPM, and PNM
+**
+** Copyright (C) 1988, 1989, 1991 by Jef Poskanzer.
+**
+** Permission to use, copy, modify, and distribute this software and its
+** documentation for any purpose and without fee is hereby granted, provided
+** that the above copyright notice appear in all copies and that both that
+** copyright notice and this permission notice appear in supporting
+** documentation. This software is provided "as is" without express or
+** implied warranty.
+
+ Configuration options modified for GNU --karl.
+*/
+
+#ifndef _PBMPLUS_H_
+#define _PBMPLUS_H_
+
+#include <sys/types.h>
+#include <stdio.h>
+
+#include "config.h"
+
+
+#if 0 /* karl */
+#if ! ( defined(BSD) || defined(SYSV) || defined(MSDOS))
+/* CONFIGURE: If your system is >= 4.2BSD, set the BSD option; if you're a
+** System V site, set the SYSV option; and if you're IBM-compatible, set
+** MSDOS. If your compiler is ANSI C, you're probably better off setting
+** SYSV.
+*/
+#define BSD
+/* #define SYSV */
+/* #define MSDOS */
+#endif
+#endif
+
+/* CONFIGURE: If you want to enable writing "raw" files, set this option.
+** "Raw" files are smaller, and much faster to read and write, but you
+** must have a filesystem that allows all 256 ASCII characters to be read
+** and written. You will no longer be able to mail P?M files without
+** using uuencode or the equivalent, or running the files through pnmnoraw.
+** Note that reading "raw" files works whether writing is enabled or not.
+*/
+#define PBMPLUS_RAWBITS
+
+/* CONFIGURE: On some systems, the putc() macro is broken and will return
+** EOF when you write out a 255. For example, ULTRIX does this. This
+** only matters if you have defined RAWBITS. To test whether your system
+** is broken this way, go ahead and compile things with RAWBITS defined,
+** and then try "pbmmake -b 8 1 > file". If it works, fine. If not,
+** define BROKENPUTC1 and try again - if that works, good. Otherwise,
+** BROKENPUTC2 is guaranteed to work, although it's about twice as slow.
+*/
+/* #define PBMPLUS_BROKENPUTC1 */
+/* #define PBMPLUS_BROKENPUTC2 */
+
+#ifdef PBMPLUS_BROKENPUTC1
+#undef putc
+/* This is a fixed version of putc() that should work on most Unix systems. */
+#define putc(x,p) (--(p)->_cnt>=0? ((int)(unsigned char)(*(p)->_ptr++=(unsigned char)(x))) : _flsbuf((unsigned char)(x),p))
+#endif /*PBMPLUS_BROKENPUTC1*/
+#ifdef PBMPLUS_BROKENPUTC2
+#undef putc
+/* For this one, putc() becomes a function, defined in pbm/libpbm1.c. */
+#endif /*PBMPLUS_BROKENPUTC2*/
+
+/* CONFIGURE: PGM can store gray values as either bytes or shorts. For most
+** applications, bytes will be big enough, and the memory savings can be
+** substantial. However, if you need more than 8 bits of resolution, then
+** define this symbol.
+**
+** If you are not making PGM, you can ignore this.
+*/
+/* #define PGM_BIGGRAYS */
+
+/* CONFIGURE: Normally, PPM handles a pixel as a struct of three grays.
+** It can also be configured to pack the three values into a single longword,
+** 10 bits each. If you have configured PGM with the PGM_BIGGRAYS option
+** (store grays as shorts), AND you don't need more than 10 bits for each
+** color component, AND you care more about memory use than speed, then
+** this option might be a win. Under these circumstances it will make
+** some of the programs use 1.5 times less space, but all of the programs
+** will run about 1.4 times slower.
+**
+** If you are not using PGM_BIGGRAYS, then this option is useless -- it
+** doesn't save any space, but it still slows things down.
+**
+** If you are not making PPM, you can ignore this.
+*/
+/* #define PPM_PACKCOLORS */
+
+/* CONFIGURE: uncomment this to enable debugging checks. */
+/* #define DEBUG */
+
+#if 0 /* karl */
+#ifdef SYSV
+#include <string.h>
+#define index strchr
+#define rindex strrchr
+#define srandom srand
+#define random rand
+#define bzero(dst,len) memset(dst, 0, len)
+#define bcopy(src,dst,len) memcpy(dst, src, len)
+#define bcmp memcmp
+#else /*SYSV*/
+#include <strings.h>
+#endif /*SYSV*/
+#endif /* 0 */
+
+/* CONFIGURE: On some systems, malloc.h doesn't declare these, so we have
+** to do it. On other systems, for example HP/UX, it declares them
+** incompatibly. And some systems, for example Dynix, don't have a
+** malloc.h at all. A sad situation. If you have compilation problems
+** that point here, feel free to tweak or remove these declarations.
+*/
+/* Thank you, I did remove them:
+#include <malloc.h>
+extern char* malloc();
+extern char* realloc();
+extern char* calloc();
+*/
+/* End of configurable definitions. */
+
+
+#undef max
+#define max(a,b) ((a) > (b) ? (a) : (b))
+#undef min
+#define min(a,b) ((a) < (b) ? (a) : (b))
+#undef abs
+#define abs(a) ((a) >= 0 ? (a) : -(a))
+#undef odd
+#define odd(n) ((n) & 1)
+
+
+/* Definitions to make PBMPLUS work with either ANSI C or C Classic. */
+
+#if __STDC__
+#define ARGS(alist) alist
+#else /*__STDC__*/
+#define ARGS(alist) ()
+#define const
+#endif /*__STDC__*/
+
+
+/* Initialization. */
+
+void pm_init ARGS(( int* argcP, char* argv[] ));
+
+
+/* Variable-sized arrays definitions. */
+
+char** pm_allocarray ARGS(( int cols, int rows, int size ));
+char* pm_allocrow ARGS(( int cols, int size ));
+void pm_freearray ARGS(( char** its, int rows ));
+void pm_freerow ARGS(( char* itrow ));
+
+
+/* Case-insensitive keyword matcher. */
+
+int pm_keymatch ARGS(( char* str, char* keyword, int minchars ));
+
+
+/* Log base two hacks. */
+
+int pm_maxvaltobits ARGS(( int maxval ));
+int pm_bitstomaxval ARGS(( int bits ));
+
+
+/* Error handling definitions. */
+
+void pm_message( /* char* fmt, char* v1, char* v2, char* v3, char* v4, char* v5 */ ); /* prototypes can't handle this */
+void pm_error( /* char* fmt, char* v1, char* v2, char* v3, char* v4, char* v5 */ ); /* doesn't return */
+void pm_perror ARGS(( char* reason )); /* doesn't return */
+void pm_usage ARGS(( char* usage )); /* doesn't return */
+
+
+/* File open/close that handles "-" as stdin and checks errors. */
+
+FILE* pm_openr ARGS(( char* name ));
+FILE* pm_openw ARGS(( char* name ));
+void pm_close ARGS(( FILE* f ));
+
+
+/* Endian I/O. */
+
+int pm_readbigshort ARGS(( FILE* in, short* sP ));
+int pm_writebigshort ARGS(( FILE* out, short s ));
+int pm_readbiglong ARGS(( FILE* in, long* lP ));
+int pm_writebiglong ARGS(( FILE* out, long l ));
+int pm_readlittleshort ARGS(( FILE* in, short* sP ));
+int pm_writelittleshort ARGS(( FILE* out, short s ));
+int pm_readlittlelong ARGS(( FILE* in, long* lP ));
+int pm_writelittlelong ARGS(( FILE* out, long l ));
+
+
+#endif /*_PBMPLUS_H_*/