add netpbm port
This commit is contained in:
parent
8bfaa418fd
commit
4b63af8b5c
@ -1,23 +1,25 @@
|
|||||||
--- pgm/Makefile.orig Fri Jan 28 11:14:02 1994
|
--- pbmplus.h.orig Tue Mar 1 10:46:36 1994
|
||||||
+++ pgm/Makefile Sat Dec 20 22:51:17 1997
|
+++ pbmplus.h Mon Jan 11 00:33:32 1999
|
||||||
@@ -39,10 +39,10 @@
|
@@ -119,10 +119,12 @@
|
||||||
LIBPGM = libpgm.a
|
#ifndef VMS
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
+#ifndef __OpenBSD__
|
||||||
|
extern int atoi();
|
||||||
|
extern void exit();
|
||||||
|
extern long time();
|
||||||
|
extern int write();
|
||||||
|
+#endif /* NetBSD */
|
||||||
|
#endif
|
||||||
|
|
||||||
PORTBINARIES = asciitopgm bioradtopgm fstopgm hipstopgm \
|
/* CONFIGURE: On most BSD systems, malloc() gets declared in stdlib.h, on
|
||||||
- lispmtopgm pbmtopgm pgmbentley pgmenhance pgmhist pgmkernel \
|
@@ -275,5 +277,9 @@
|
||||||
+ lispmtopgm pbmtopgm pgmbentley pgmenhance pgmhist \
|
int vfprintf ARGS(( FILE* stream, char* format, va_list args ));
|
||||||
pgmnoise pgmnorm pgmoil pgmramp pgmtofs pgmtolispm \
|
#endif /*NEED_VFPRINTF*/
|
||||||
pgmtopbm psidtopgm spottopgm
|
|
||||||
-MATHBINARIES = pgmcrater pgmedge pgmtexture rawtopgm
|
|
||||||
+MATHBINARIES = pgmcrater pgmedge pgmtexture rawtopgm pgmkernel
|
|
||||||
BINARIES = $(PORTBINARIES) $(MATHBINARIES)
|
|
||||||
|
|
||||||
OBJECTS = asciitopgm.o bioradtopgm.o fstopgm.o hipstopgm.o \
|
+#ifdef __OpenBSD__
|
||||||
@@ -134,7 +134,6 @@
|
+#include <errno.h>
|
||||||
pgmedge pgmedge.o: pgmedge.c
|
+#define A_STRERROR
|
||||||
pgmenhance pgmenhance.o: pgmenhance.c
|
+#endif
|
||||||
pgmhist pgmhist.o: pgmhist.c
|
|
||||||
-pgmkernel pgmkernel.o: pgmkernel.c
|
#endif /*_PBMPLUS_H_*/
|
||||||
pgmnoise pgmnoise.o: pgmnoise.c
|
|
||||||
pgmnorm pgmnorm.o: pgmnorm.c
|
|
||||||
pgmoil pgmoil.o: pgmoil.c
|
|
||||||
|
@ -1,66 +1,114 @@
|
|||||||
*** pnm/Makefile.orig Mon Jan 31 23:47:32 1994
|
--- pbm/Makefile.orig Sat Nov 20 15:59:20 1993
|
||||||
--- pnm/Makefile Thu May 14 12:01:28 1998
|
+++ pbm/Makefile Mon Jan 11 00:18:43 1999
|
||||||
***************
|
@@ -10,28 +10,31 @@
|
||||||
*** 60,69 ****
|
# implied warranty.
|
||||||
pnmcut pnmdepth pnmenlarge pnmfile pnmflip pnmhistmap \
|
|
||||||
pnminvert pnmnoraw pnmpad pnmpaste \
|
# Default values, usually overridden by top-level Makefile.
|
||||||
pnmtile pnmtoddif pnmtofits pnmtops pnmtorast \
|
-CC = cc
|
||||||
! pnmtosgi pnmtosir pnmtoxwd \
|
+CC = gcc
|
||||||
! rasttopnm sgitopnm sirtopnm xwdtopnm zeisstopnm
|
#CC = gcc -ansi -pedantic -fcombine-regs -fpcc-struct-return
|
||||||
MATHBINARIES = pnmgamma pnmnlfilt pnmrotate pnmscale pnmshear
|
#CFLAGS = -O
|
||||||
! BINARIES = $(PORTBINARIES) $(MATHBINARIES) $(TIFFBINARIES)
|
-CFLAGS = -g
|
||||||
SCRIPTS = anytopnm pnmindex pnmmargin pnmsmooth pstopnm
|
+CFLAGS = -O2
|
||||||
|
#CFLAGS = -g -O
|
||||||
PORTOBJECTS = fitstopnm.o giftopnm.o \
|
TIFFDEF = -DLIBTIFF
|
||||||
--- 60,70 ----
|
#LDFLAGS = -s
|
||||||
pnmcut pnmdepth pnmenlarge pnmfile pnmflip pnmhistmap \
|
LDFLAGS =
|
||||||
pnminvert pnmnoraw pnmpad pnmpaste \
|
-INSTALLBINARIES = /usr/new/pbm
|
||||||
pnmtile pnmtoddif pnmtofits pnmtops pnmtorast \
|
-INSTALLMANUALS1 = /usr/man/man1
|
||||||
! pnmtorle pnmtosgi pnmtosir pnmtoxwd \
|
+INSTALLBINARIES = $(PREFIX)/bin
|
||||||
! rasttopnm rletopnm sgitopnm sirtopnm xwdtopnm zeisstopnm
|
+INSTALLMANUALS1 = $(PREFIX)/man/man1
|
||||||
MATHBINARIES = pnmgamma pnmnlfilt pnmrotate pnmscale pnmshear
|
SUFFIXMANUALS1 = 1
|
||||||
! PNGBINARIES = pngtopnm pnmtopng
|
-INSTALLMANUALS3 = /usr/man/man3
|
||||||
! BINARIES = $(PORTBINARIES) $(MATHBINARIES) $(PNGBINARIES) $(TIFFBINARIES)
|
+INSTALLMANUALS3 = $(PREFIX)/man/man3
|
||||||
SCRIPTS = anytopnm pnmindex pnmmargin pnmsmooth pstopnm
|
SUFFIXMANUALS3 = 3
|
||||||
|
-INSTALLMANUALS5 = /usr/man/man5
|
||||||
PORTOBJECTS = fitstopnm.o giftopnm.o \
|
+INSTALLMANUALS5 = $(PREFIX)/man/man5
|
||||||
***************
|
SUFFIXMANUALS5 = 5
|
||||||
*** 74,80 ****
|
-MANCP = cp
|
||||||
pnmtosgi.o pnmtosir.o pnmtoxwd.o \
|
+MANCP = install -c -m 0644
|
||||||
rasttopnm.o sgitopnm.o sirtopnm.o xwdtopnm.o zeisstopnm.o \
|
+INSTALLLIBS = $(PREFIX)/lib
|
||||||
pnmgamma.o pnmnlfilt.o pnmrotate.o pnmscale.o pnmshear.o
|
+INSTALLDEFS = $(PREFIX)/include
|
||||||
! OBJECTS = $(PORTOBJECTS) $(TIFFOBJECTS)
|
|
||||||
|
SHELL = /bin/sh
|
||||||
MANUALS1 = $(BINARIES) $(SCRIPTS)
|
INCLUDE = -I..
|
||||||
MANUALS3 = libpnm
|
ALLCFLAGS = $(CFLAGS) $(TIFFDEF) $(INCLUDE)
|
||||||
--- 75,81 ----
|
LIBPBM = libpbm.a
|
||||||
pnmtosgi.o pnmtosir.o pnmtoxwd.o \
|
-DEFPBM = pbm.h ../pbmplus.h
|
||||||
rasttopnm.o sgitopnm.o sirtopnm.o xwdtopnm.o zeisstopnm.o \
|
+DEFPBM = pbm.h
|
||||||
pnmgamma.o pnmnlfilt.o pnmrotate.o pnmscale.o pnmshear.o
|
+DEFPBMPLUS = ../pbmplus.h
|
||||||
! OBJECTS = $(PORTOBJECTS)
|
|
||||||
|
PORTBINARIES = atktopbm brushtopbm cmuwmtopbm g3topbm \
|
||||||
MANUALS1 = $(BINARIES) $(SCRIPTS)
|
icontopbm gemtopbm macptopbm mgrtopbm \
|
||||||
MANUALS3 = libpnm
|
@@ -67,18 +70,19 @@
|
||||||
***************
|
MANUALS5 = pbm
|
||||||
*** 128,134 ****
|
|
||||||
|
|
||||||
|
-#all: binaries
|
||||||
# Rules for plain programs.
|
-all: merge
|
||||||
! $(PORTBINARIES) $(TIFFBINARIES): pnm.h $(DEFPPM) $(DEFPGM) $(DEFPBM) $(LIBPNM) $(LIBPPM) $(LIBPGM) $(LIBPBM) $(TIFFLIB)
|
-#install: install.bin
|
||||||
$(CC) $(ALLCFLAGS) $(LDFLAGS) -o $@ $@.c $(LIBPNM) $(LIBPPM) $(LIBPGM) $(LIBPBM) $(TIFFLIB)
|
-install: install.merge
|
||||||
|
+all: binaries
|
||||||
# Rule for math-dependent programs.
|
+#all: merge
|
||||||
--- 129,141 ----
|
+install: install.bin
|
||||||
|
+#install: install.merge
|
||||||
|
|
||||||
# Rules for plain programs.
|
|
||||||
! $(PORTBINARIES): pnm.h $(DEFPPM) $(DEFPGM) $(DEFPBM) $(LIBPNM) $(LIBPPM) $(LIBPGM) $(LIBPBM)
|
binaries: $(BINARIES)
|
||||||
! $(CC) $(ALLCFLAGS) $(LDFLAGS) -o $@ $@.c $(LIBPNM) $(LIBPPM) $(LIBPGM) $(LIBPBM)
|
|
||||||
!
|
install.bin: binaries
|
||||||
! $(PNGBINARIES): pnm.h $(DEFPPM) $(DEFPGM) $(DEFPBM) $(LIBPNM) $(LIBPPM) $(LIBPGM) $(LIBPBM)
|
cd $(INSTALLBINARIES) ; rm -f $(BINARIES)
|
||||||
! $(CC) $(ALLCFLAGS) $(LDFLAGS) -o $@ $@.c $(LIBPNM) $(LIBPPM) $(LIBPGM) $(LIBPBM) -L/usr/local/lib -lpng -lz
|
- cp $(BINARIES) $(INSTALLBINARIES)
|
||||||
!
|
-
|
||||||
! $(TIFFBINARIES): pnm.h $(DEFPPM) $(DEFPGM) $(DEFPBM) $(LIBPNM) $(LIBPPM) $(LIBPGM) $(LIBPBM)
|
+ install -c -s -m 0755 $(BINARIES) $(INSTALLBINARIES)
|
||||||
$(CC) $(ALLCFLAGS) $(LDFLAGS) -o $@ $@.c $(LIBPNM) $(LIBPPM) $(LIBPGM) $(LIBPBM) $(TIFFLIB)
|
+ install -c -m 0644 $(LIBPBM) $(INSTALLLIBS)
|
||||||
|
+ install -c -m 0644 $(DEFPBM) $(INSTALLDEFS)
|
||||||
# Rule for math-dependent programs.
|
|
||||||
|
merge: pbmmerge
|
||||||
|
pbmmerge: pbmmerge.c $(OBJECTS) $(LIBPBM)
|
||||||
|
@@ -107,15 +111,15 @@
|
||||||
|
done
|
||||||
|
|
||||||
|
# Rule for plain programs.
|
||||||
|
-$(PORTBINARIES): $(DEFPBM) $(LIBPBM)
|
||||||
|
+$(PORTBINARIES): $(DEFPBM) $(DEFPBMPLUS) $(LIBPBM)
|
||||||
|
$(CC) $(ALLCFLAGS) $(LDFLAGS) -o $@ $@.c $(LIBPBM)
|
||||||
|
|
||||||
|
# Rule for math-dependent programs.
|
||||||
|
-$(MATHBINARIES): $(DEFPBM) $(LIBPBM)
|
||||||
|
+$(MATHBINARIES): $(DEFPBM) $(DEFPBMPLUS) $(LIBPBM)
|
||||||
|
$(CC) $(ALLCFLAGS) $(LDFLAGS) -o $@ $@.c -lm $(LIBPBM)
|
||||||
|
|
||||||
|
# Rule for objects.
|
||||||
|
-$(OBJECTS): $(DEFPBM)
|
||||||
|
+$(OBJECTS): $(DEFPBM) $(DEFPBMPLUS)
|
||||||
|
$(CC) $(ALLCFLAGS) "-Dmain=$*_main" -c $*.c
|
||||||
|
|
||||||
|
# And library.
|
||||||
|
@@ -125,15 +129,15 @@
|
||||||
|
ar rc $(LIBPBM) libpbm1.o libpbm2.o libpbm3.o libpbm4.o libpbm5.o
|
||||||
|
-ranlib $(LIBPBM)
|
||||||
|
|
||||||
|
-libpbm1.o: $(DEFPBM) ../version.h ../compile.h libpbm.h libpbm1.c
|
||||||
|
+libpbm1.o: $(DEFPBM) $(DEFPBMPLUS) ../version.h ../compile.h libpbm.h libpbm1.c
|
||||||
|
$(CC) $(ALLCFLAGS) -c libpbm1.c
|
||||||
|
-libpbm2.o: $(DEFPBM) libpbm.h libpbm2.c
|
||||||
|
+libpbm2.o: $(DEFPBM) $(DEFPBMPLUS) libpbm.h libpbm2.c
|
||||||
|
$(CC) $(ALLCFLAGS) -c libpbm2.c
|
||||||
|
-libpbm3.o: $(DEFPBM) libpbm.h libpbm3.c
|
||||||
|
+libpbm3.o: $(DEFPBM) $(DEFPBMPLUS) libpbm.h libpbm3.c
|
||||||
|
$(CC) $(ALLCFLAGS) -c libpbm3.c
|
||||||
|
-libpbm4.o: $(DEFPBM) libpbm.h libpbm4.c
|
||||||
|
+libpbm4.o: $(DEFPBM) $(DEFPBMPLUS) libpbm.h libpbm4.c
|
||||||
|
$(CC) $(ALLCFLAGS) -c libpbm4.c
|
||||||
|
-libpbm5.o: $(DEFPBM) pbmfont.h libpbm5.c
|
||||||
|
+libpbm5.o: $(DEFPBM) $(DEFPBMPLUS) pbmfont.h libpbm5.c
|
||||||
|
$(CC) $(ALLCFLAGS) -c libpbm5.c
|
||||||
|
|
||||||
|
# Other dependencies.
|
||||||
|
@@ -184,4 +188,4 @@
|
||||||
|
pbmtoepsi pbmtoepsi.o: pbmtoepsi.c
|
||||||
|
|
||||||
|
clean:
|
||||||
|
- -rm -f *.o *.a *.cat *~ core $(BINARIES) pbmmerge
|
||||||
|
+ -rm -f *.o *.a *.cat *~ core *.core $(BINARIES) pbmmerge
|
||||||
|
@ -1,16 +1,11 @@
|
|||||||
*** pbmplus.h.orig Thu May 14 11:50:42 1998
|
--- pbm/libpbm1.c.orig Mon Jan 10 18:37:22 1994
|
||||||
--- pbmplus.h Thu May 14 11:51:59 1998
|
+++ pbm/libpbm1.c Sun Jan 10 23:48:40 1999
|
||||||
***************
|
@@ -132,7 +132,7 @@
|
||||||
*** 120,128 ****
|
if ( isupper( c1 ) )
|
||||||
--- 120,130 ----
|
c1 = tolower( c1 );
|
||||||
#include <unistd.h>
|
if ( isupper( c2 ) )
|
||||||
#endif
|
- c1 = tolower( c2 );
|
||||||
extern int atoi();
|
+ c2 = tolower( c2 );
|
||||||
+ #ifndef __OpenBSD__
|
if ( c1 != c2 )
|
||||||
extern void exit();
|
return 0;
|
||||||
extern long time();
|
}
|
||||||
extern int write();
|
|
||||||
+ #endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* CONFIGURE: On most BSD systems, malloc() gets declared in stdlib.h, on
|
|
||||||
|
13
graphics/netpbm/patches/patch-ai
Normal file
13
graphics/netpbm/patches/patch-ai
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
--- pgm/pgmmerge.c.orig Fri Jan 28 11:17:38 1994
|
||||||
|
+++ pgm/pgmmerge.c Sun Jan 10 23:48:40 1999
|
||||||
|
@@ -29,6 +29,10 @@
|
||||||
|
{
|
||||||
|
++argv;
|
||||||
|
--argc;
|
||||||
|
+ if(!*argv) {
|
||||||
|
+ fprintf(stderr, "Usage: pgmmerge pgm_program_name [args ...]\n");
|
||||||
|
+ exit(1);
|
||||||
|
+ }
|
||||||
|
goto again;
|
||||||
|
}
|
||||||
|
|
168
graphics/netpbm/patches/patch-aj
Normal file
168
graphics/netpbm/patches/patch-aj
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
--- pnm/Makefile.orig Mon Jan 31 17:47:32 1994
|
||||||
|
+++ pnm/Makefile Mon Jan 11 00:18:48 1999
|
||||||
|
@@ -10,27 +10,29 @@
|
||||||
|
# implied warranty.
|
||||||
|
|
||||||
|
# Default values, usually overridden by top-level Makefile.
|
||||||
|
-#CC = cc
|
||||||
|
-CC = gcc -ansi -pedantic -fcombine-regs -fpcc-struct-return
|
||||||
|
+CC = gcc
|
||||||
|
+#CC = gcc -ansi -pedantic -fcombine-regs -fpcc-struct-return
|
||||||
|
#CFLAGS = -O
|
||||||
|
-CFLAGS = -g
|
||||||
|
+CFLAGS = -O2
|
||||||
|
#CFLAGS = -g -O
|
||||||
|
TIFFDEF = -DLIBTIFF
|
||||||
|
-TIFFINC = -I../libtiff
|
||||||
|
-TIFFLIB = ../libtiff/libtiff.a
|
||||||
|
+TIFFINC = -I$(PREFIX)/include
|
||||||
|
+TIFFLIB = -L$(PREFIX)/lib -ltiff -ljpeg
|
||||||
|
TIFFBINARIES = tifftopnm pnmtotiff
|
||||||
|
TIFFOBJECTS = tifftopnm.o pnmtotiff.o
|
||||||
|
-#LDFLAGS = -s
|
||||||
|
-LDFLAGS =
|
||||||
|
-INSTALLBINARIES = /usr/new/pbm
|
||||||
|
+LDFLAGS = -s
|
||||||
|
+#LDFLAGS =
|
||||||
|
+INSTALLBINARIES = $(PREFIX)/bin
|
||||||
|
INSTALLSCRIPTS = $(INSTALLBINARIES)
|
||||||
|
-INSTALLMANUALS1 = /usr/man/man1
|
||||||
|
+INSTALLMANUALS1 = $(PREFIX)/man/man1
|
||||||
|
SUFFIXMANUALS1 = 1
|
||||||
|
-INSTALLMANUALS3 = /usr/man/man3
|
||||||
|
+INSTALLMANUALS3 = $(PREFIX)/man/man3
|
||||||
|
SUFFIXMANUALS3 = 3
|
||||||
|
-INSTALLMANUALS5 = /usr/man/man5
|
||||||
|
+INSTALLMANUALS5 = $(PREFIX)/man/man5
|
||||||
|
SUFFIXMANUALS5 = 5
|
||||||
|
-MANCP = cp
|
||||||
|
+MANCP = install -c -m 0644
|
||||||
|
+INSTALLLIBS = $(PREFIX)/lib
|
||||||
|
+INSTALLDEFS = $(PREFIX)/include
|
||||||
|
|
||||||
|
PPMDIR = ../ppm
|
||||||
|
INCLUDEPPM = -I$(PPMDIR)
|
||||||
|
@@ -54,48 +56,52 @@
|
||||||
|
INCLUDE = -I.. $(INCLUDEPPM) $(INCLUDEPGM) $(INCLUDEPBM)
|
||||||
|
ALLCFLAGS = $(CFLAGS) $(INCLUDE) $(TIFFDEF) $(TIFFINC)
|
||||||
|
LIBPNM = libpnm.a
|
||||||
|
+DEFPNM = pnm.h
|
||||||
|
|
||||||
|
PORTBINARIES = fitstopnm giftopnm \
|
||||||
|
pnmalias pnmarith pnmcat pnmcomp pnmconvol pnmcrop \
|
||||||
|
pnmcut pnmdepth pnmenlarge pnmfile pnmflip pnmhistmap \
|
||||||
|
pnminvert pnmnoraw pnmpad pnmpaste \
|
||||||
|
pnmtile pnmtoddif pnmtofits pnmtops pnmtorast \
|
||||||
|
- pnmtosgi pnmtosir pnmtoxwd \
|
||||||
|
- rasttopnm sgitopnm sirtopnm xwdtopnm zeisstopnm
|
||||||
|
+ pnmtorle pnmtosgi pnmtosir pnmtoxwd \
|
||||||
|
+ rasttopnm rletopnm sgitopnm sirtopnm xwdtopnm zeisstopnm \
|
||||||
|
+ pnmsmooth pnmhisteq
|
||||||
|
MATHBINARIES = pnmgamma pnmnlfilt pnmrotate pnmscale pnmshear
|
||||||
|
-BINARIES = $(PORTBINARIES) $(MATHBINARIES) $(TIFFBINARIES)
|
||||||
|
-SCRIPTS = anytopnm pnmindex pnmmargin pnmsmooth pstopnm
|
||||||
|
+PNGBINARIES = pngtopnm pnmtopng
|
||||||
|
+BINARIES = $(PORTBINARIES) $(MATHBINARIES) $(PNGBINARIES) $(TIFFBINARIES)
|
||||||
|
+SCRIPTS = anytopnm pnmindex pnmmargin pstopnm
|
||||||
|
|
||||||
|
PORTOBJECTS = fitstopnm.o giftopnm.o \
|
||||||
|
pnmalias.o pnmarith.o pnmcat.o pnmcomp.o pnmconvol.o pnmcrop.o \
|
||||||
|
pnmcut.o pnmdepth.o pnmenlarge.o pnmfile.o pnmflip.o pnmhistmap.o \
|
||||||
|
- pnminvert.o pnmnoraw.o pnmpad.o pnmpaste.o \
|
||||||
|
+ pnmhisteq.o pnminvert.o pnmnoraw.o pnmpad.o pnmpaste.o\
|
||||||
|
pnmtile.o pnmtoddif.o pnmtofits.o pnmtops.o pnmtorast.o \
|
||||||
|
pnmtosgi.o pnmtosir.o pnmtoxwd.o \
|
||||||
|
rasttopnm.o sgitopnm.o sirtopnm.o xwdtopnm.o zeisstopnm.o \
|
||||||
|
+ pnmsmooth.o pnmhisteq.o \
|
||||||
|
pnmgamma.o pnmnlfilt.o pnmrotate.o pnmscale.o pnmshear.o
|
||||||
|
-OBJECTS = $(PORTOBJECTS) $(TIFFOBJECTS)
|
||||||
|
+OBJECTS = $(PORTOBJECTS)
|
||||||
|
|
||||||
|
MANUALS1 = $(BINARIES) $(SCRIPTS)
|
||||||
|
MANUALS3 = libpnm
|
||||||
|
MANUALS5 = pnm
|
||||||
|
|
||||||
|
|
||||||
|
-#all: binaries
|
||||||
|
-all: merge
|
||||||
|
-#install: install.bin
|
||||||
|
-install: install.merge
|
||||||
|
+all: binaries
|
||||||
|
+#all: merge
|
||||||
|
+install: install.bin
|
||||||
|
+#install: install.merge
|
||||||
|
|
||||||
|
|
||||||
|
binaries: $(BINARIES)
|
||||||
|
|
||||||
|
install.bin: binaries $(SCRIPTS)
|
||||||
|
cd $(INSTALLBINARIES) ; rm -f $(BINARIES)
|
||||||
|
- cp $(BINARIES) $(INSTALLBINARIES)
|
||||||
|
+ install -c -s -m 0755 $(BINARIES) $(INSTALLBINARIES)
|
||||||
|
cd $(INSTALLSCRIPTS) ; rm -f $(SCRIPTS)
|
||||||
|
- cp $(SCRIPTS) $(INSTALLSCRIPTS)
|
||||||
|
- cd $(INSTALLSCRIPTS) ; chmod +x $(SCRIPTS)
|
||||||
|
-
|
||||||
|
+ install -c -m 0755 $(SCRIPTS) $(INSTALLSCRIPTS)
|
||||||
|
+ install -c -m 0644 $(LIBPNM) $(INSTALLLIBS)
|
||||||
|
+ install -c -m 0644 $(DEFPNM) $(INSTALLDEFS)
|
||||||
|
|
||||||
|
merge: pnmmerge
|
||||||
|
pnmmerge: pnmmerge.c $(OBJECTS) $(LIBPNM) $(LIBPPM) $(LIBPGM) $(LIBPBM)
|
||||||
|
@@ -128,16 +134,22 @@
|
||||||
|
|
||||||
|
|
||||||
|
# Rules for plain programs.
|
||||||
|
-$(PORTBINARIES) $(TIFFBINARIES): pnm.h $(DEFPPM) $(DEFPGM) $(DEFPBM) $(LIBPNM) $(LIBPPM) $(LIBPGM) $(LIBPBM) $(TIFFLIB)
|
||||||
|
- $(CC) $(ALLCFLAGS) $(LDFLAGS) -o $@ $@.c $(LIBPNM) $(LIBPPM) $(LIBPGM) $(LIBPBM) $(TIFFLIB)
|
||||||
|
+$(PORTBINARIES): $(DEFPNM) $(DEFPPM) $(DEFPGM) $(DEFPBM) $(LIBPNM) $(LIBPPM) $(LIBPGM) $(LIBPBM)
|
||||||
|
+ $(CC) $(ALLCFLAGS) $(LDFLAGS) -o $@ $@.c $(LIBPNM) $(LIBPPM) $(LIBPGM) $(LIBPBM)
|
||||||
|
+
|
||||||
|
+$(PNGBINARIES): $(DEFPNM) $(DEFPPM) $(DEFPGM) $(DEFPBM) $(LIBPNM) $(LIBPPM) $(LIBPGM) $(LIBPBM)
|
||||||
|
+ $(CC) $(ALLCFLAGS) $(LDFLAGS) -o $@ $@.c $(LIBPNM) $(LIBPPM) $(LIBPGM) $(LIBPBM) -L${LOCALBASE}/lib -lpng -lz -lm
|
||||||
|
+
|
||||||
|
+$(TIFFBINARIES): $(DEFPNM) $(DEFPPM) $(DEFPGM) $(DEFPBM) $(LIBPNM) $(LIBPPM) $(LIBPGM) $(LIBPBM)
|
||||||
|
+ $(CC) $(ALLCFLAGS) $(LDFLAGS) -o $@ $@.c $(LIBPNM) $(LIBPPM) $(LIBPGM) $(LIBPBM) $(TIFFLIB) -lm -lz
|
||||||
|
|
||||||
|
# Rule for math-dependent programs.
|
||||||
|
-$(MATHBINARIES): pnm.h $(DEFPPM) $(DEFPGM) $(DEFPBM) $(LIBPNM) \
|
||||||
|
+$(MATHBINARIES): $(DEFPNM) $(DEFPPM) $(DEFPGM) $(DEFPBM) $(LIBPNM) \
|
||||||
|
$(LIBPPM) $(LIBPGM) $(LIBPBM)
|
||||||
|
$(CC) $(ALLCFLAGS) $(LDFLAGS) -o $@ $@.c -lm $(LIBPNM) $(LIBPPM) $(LIBPGM) $(LIBPBM)
|
||||||
|
|
||||||
|
# Rule for objects.
|
||||||
|
-$(OBJECTS): pnm.h $(DEFPPM) $(DEFPGM) $(DEFPBM)
|
||||||
|
+$(OBJECTS): $(DEFPNM) $(DEFPPM) $(DEFPGM) $(DEFPBM)
|
||||||
|
$(CC) $(ALLCFLAGS) "-Dmain=$*_main" -c $*.c
|
||||||
|
|
||||||
|
# And libraries.
|
||||||
|
@@ -153,15 +165,15 @@
|
||||||
|
ar rc $(LIBPNM) libpnm1.o libpnm2.o libpnm3.o libpnm4.o
|
||||||
|
-ranlib $(LIBPNM)
|
||||||
|
|
||||||
|
-libpnm1.o: pnm.h $(DEFPPM) $(DEFPGM) $(DEFPBM) libpnm1.c
|
||||||
|
+libpnm1.o: $(DEFPNM) $(DEFPPM) $(DEFPGM) $(DEFPBM) libpnm1.c
|
||||||
|
$(CC) $(ALLCFLAGS) -c libpnm1.c
|
||||||
|
-libpnm2.o: pnm.h $(DEFPPM) $(DEFPGM) $(DEFPBM) libpnm2.c $(DEFLIBPPM) \
|
||||||
|
+libpnm2.o: $(DEFPNM) $(DEFPPM) $(DEFPGM) $(DEFPBM) libpnm2.c $(DEFLIBPPM) \
|
||||||
|
$(DEFLIBPGM) $(DEFLIBPBM)
|
||||||
|
$(CC) $(ALLCFLAGS) -c libpnm2.c
|
||||||
|
-libpnm3.o: pnm.h $(DEFPPM) $(DEFPGM) $(DEFPBM) libpnm3.c $(DEFLIBPPM) \
|
||||||
|
+libpnm3.o: $(DEFPNM) $(DEFPPM) $(DEFPGM) $(DEFPBM) libpnm3.c $(DEFLIBPPM) \
|
||||||
|
$(DEFLIBPGM) $(DEFLIBPBM)
|
||||||
|
$(CC) $(ALLCFLAGS) -c libpnm3.c
|
||||||
|
-libpnm4.o: pnm.h $(DEFPPM) $(DEFPGM) $(DEFPBM) rast.h libpnm4.c
|
||||||
|
+libpnm4.o: $(DEFPNM) $(DEFPPM) $(DEFPGM) $(DEFPBM) rast.h libpnm4.c
|
||||||
|
$(CC) $(ALLCFLAGS) -c libpnm4.c
|
||||||
|
|
||||||
|
# Other dependencies.
|
||||||
|
@@ -202,6 +214,8 @@
|
||||||
|
tifftopnm tifftopnm.o: tifftopnm.c
|
||||||
|
xwdtopnm xwdtopnm.o: xwdtopnm.c x10wd.h x11wd.h
|
||||||
|
zeisstopnm zeisstopnm.o: zeisstopnm.c
|
||||||
|
+pnmhisteq pnmhisteq.o: pnmhisteq.c
|
||||||
|
+pnmsmooth pnmsmooth.o: pnmsmooth.c
|
||||||
|
|
||||||
|
clean:
|
||||||
|
- -rm -f *.o *.a *.cat *~ core $(BINARIES) pnmmerge
|
||||||
|
+ -rm -f *.o *.a *.cat *~ core *.core $(BINARIES) pnmmerge
|
50
graphics/netpbm/patches/patch-ak
Normal file
50
graphics/netpbm/patches/patch-ak
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
--- pnm/anytopnm.orig Mon Oct 4 10:11:29 1993
|
||||||
|
+++ pnm/anytopnm Sun Jan 10 23:48:40 1999
|
||||||
|
@@ -53,7 +53,7 @@
|
||||||
|
;;
|
||||||
|
|
||||||
|
*GIF* )
|
||||||
|
- giftoppm "$file"
|
||||||
|
+ giftopnm "$file"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
|
||||||
|
@@ -82,6 +82,15 @@
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
|
||||||
|
+ *JPEG* | *JFIF* )
|
||||||
|
+ djpeg "$file"
|
||||||
|
+ ;;
|
||||||
|
+
|
||||||
|
+ *PNG* )
|
||||||
|
+ pngtopnm "$file"
|
||||||
|
+ break
|
||||||
|
+ ;;
|
||||||
|
+
|
||||||
|
* )
|
||||||
|
# Can't figure out the file type from the magic number,
|
||||||
|
# try the extension.
|
||||||
|
@@ -130,7 +139,7 @@
|
||||||
|
fitstopgm "$file"
|
||||||
|
;;
|
||||||
|
*.gif | *.gif.* )
|
||||||
|
- giftoppm "$file"
|
||||||
|
+ giftopnm "$file"
|
||||||
|
;;
|
||||||
|
*.iff | *.iff.* | *.ilbm | *.ilbm.* )
|
||||||
|
ilbmtoppm "$file"
|
||||||
|
@@ -168,6 +177,13 @@
|
||||||
|
*.ybm | *.ybm.* | *.face | *.face.* )
|
||||||
|
ybmtopbm "$file"
|
||||||
|
;;
|
||||||
|
+ *.JPEG | *.jpeg | *.jpg | *.JPG )
|
||||||
|
+ djpeg "$file"
|
||||||
|
+ ;;
|
||||||
|
+ *.png | *.PNG )
|
||||||
|
+ pngtopnm "$file"
|
||||||
|
+ break
|
||||||
|
+ ;;
|
||||||
|
* )
|
||||||
|
echo "$0: unknown file type" 1>&2
|
||||||
|
exit 1
|
11
graphics/netpbm/patches/patch-al
Normal file
11
graphics/netpbm/patches/patch-al
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
--- pnm/pnmarith.1.orig Mon Oct 4 10:11:34 1993
|
||||||
|
+++ pnm/pnmarith.1 Sun Jan 10 23:48:40 1999
|
||||||
|
@@ -4,7 +4,7 @@
|
||||||
|
pnmarith - perform arithmetic on two portable anymaps
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B pnmarith
|
||||||
|
-.BR -add | -subtract | -multiply | -difference
|
||||||
|
+.BR -add | -subtract | -multiply | -difference | -minimum | -maximum.
|
||||||
|
.I pnmfile1 pnmfile2
|
||||||
|
.SH DESCRIPTION
|
||||||
|
Reads two portable anymaps as input.
|
66
graphics/netpbm/patches/patch-am
Normal file
66
graphics/netpbm/patches/patch-am
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
--- pnm/pnmarith.c.orig Wed Jan 5 11:04:53 1994
|
||||||
|
+++ pnm/pnmarith.c Sun Jan 10 23:48:40 1999
|
||||||
|
@@ -29,7 +29,8 @@
|
||||||
|
xelval maxval1, maxval2, maxval3;
|
||||||
|
int argn, rows1, cols1, format1, rows2, cols2, format2, format3, row, col;
|
||||||
|
char function;
|
||||||
|
- char* usage = "-add|-subtract|-multiply|-difference pnmfile1 pnmfile2";
|
||||||
|
+ char* usage =
|
||||||
|
+"-add|-subtract|-multiply|-difference|-minimum|-maximum pnmfile1 pnmfile2";
|
||||||
|
|
||||||
|
|
||||||
|
pnm_init( &argc, argv );
|
||||||
|
@@ -48,6 +49,10 @@
|
||||||
|
function = '*';
|
||||||
|
else if ( pm_keymatch( argv[argn], "-difference", 2 ) )
|
||||||
|
function = 'D';
|
||||||
|
+ else if ( pm_keymatch( argv[argn], "-minimum", 2 ) )
|
||||||
|
+ function = 'N';
|
||||||
|
+ else if ( pm_keymatch( argv[argn], "-maximum", 2 ) )
|
||||||
|
+ function = 'X';
|
||||||
|
else
|
||||||
|
pm_usage( usage );
|
||||||
|
++argn;
|
||||||
|
@@ -112,7 +117,7 @@
|
||||||
|
pnm_promoteformatrow(
|
||||||
|
xelrow2, cols1, maxval2, format2, maxval3, format3 );
|
||||||
|
|
||||||
|
- for ( col = 0, x1P = xelrow1, x2P = xelrow2;
|
||||||
|
+ for ( col = 0, x1P = xelrow1, x2P = xelrow2;
|
||||||
|
col < cols1; ++col, ++x1P, ++x2P )
|
||||||
|
{
|
||||||
|
switch ( PNM_FORMAT_TYPE(format3) )
|
||||||
|
@@ -153,6 +158,18 @@
|
||||||
|
b1 = (b1>b2)?(b1-b2):(b2-b1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
+ case 'N':
|
||||||
|
+ r1 = (r1>r2)?(r2):(r1);
|
||||||
|
+ g1 = (g1>g2)?(g2):(g1);
|
||||||
|
+ b1 = (b1>b2)?(b2):(b1);
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case 'X':
|
||||||
|
+ r1 = (r1>r2)?(r1):(r2);
|
||||||
|
+ g1 = (g1>g2)?(g1):(g2);
|
||||||
|
+ b1 = (b1>b2)?(b1):(b2);
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
default:
|
||||||
|
pm_error( "can't happen" );
|
||||||
|
}
|
||||||
|
@@ -188,6 +205,14 @@
|
||||||
|
|
||||||
|
case 'D':
|
||||||
|
g1 = (g1>g2)?(g1-g2):(g2-g1);
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case 'N':
|
||||||
|
+ g1 = (g1>g2)?(g2):(g1);
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case 'X':
|
||||||
|
+ g1 = (g1>g2)?(g1):(g2);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
1872
graphics/netpbm/patches/patch-an
Normal file
1872
graphics/netpbm/patches/patch-an
Normal file
File diff suppressed because it is too large
Load Diff
164
graphics/netpbm/patches/patch-ao
Normal file
164
graphics/netpbm/patches/patch-ao
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
--- pnm/pnmhisteq.1.orig Sun Jan 10 23:48:41 1999
|
||||||
|
+++ pnm/pnmhisteq.1 Sun Jan 10 23:48:41 1999
|
||||||
|
@@ -0,0 +1,161 @@
|
||||||
|
+.TH pnmhisteq 1 "19 March 1995"
|
||||||
|
+.IX "pnmhisteq command"
|
||||||
|
+.IX histogram
|
||||||
|
+.SH NAME
|
||||||
|
+pnmhisteq \- histogram equalise a portable anymap
|
||||||
|
+.SH SYNOPSIS
|
||||||
|
+.na
|
||||||
|
+.B pnmhisteq
|
||||||
|
+'ti 15
|
||||||
|
+.RB [ \-gray ]
|
||||||
|
+.RB [ \-rmap
|
||||||
|
+.IR pgmfile ]
|
||||||
|
+.RB [ \-wmap
|
||||||
|
+.IR pgmfile ]
|
||||||
|
+.RB [ \-verbose ]
|
||||||
|
+.RI [ pnmfile ]
|
||||||
|
+.ad
|
||||||
|
+.SH DESCRIPTION
|
||||||
|
+.B pnmhisteq
|
||||||
|
+increases the contrast of a portable graymap or pixmap through the
|
||||||
|
+technique of
|
||||||
|
+.IR "histogram equalisation" [1].
|
||||||
|
+A histogram of the luminance of pixels in the map is computed, from
|
||||||
|
+which a transfer function is calculated which spreads out intensity levels
|
||||||
|
+around histogram peaks and compresses them at troughs. This has the
|
||||||
|
+effect of using the available levels of intensity more efficiently and
|
||||||
|
+thereby increases the detail visible in the image.
|
||||||
|
+.PP
|
||||||
|
+Mathematically, if
|
||||||
|
+.I N[i]
|
||||||
|
+is the number of pixels of luminosity
|
||||||
|
+.I i
|
||||||
|
+in the image and
|
||||||
|
+.I T
|
||||||
|
+is the total number of pixels, luminosity
|
||||||
|
+.I j
|
||||||
|
+is replaced by:
|
||||||
|
+.PP
|
||||||
|
+.NF
|
||||||
|
+.vs 9p
|
||||||
|
+ j
|
||||||
|
+ ---
|
||||||
|
+ \\
|
||||||
|
+ \> N[i] / T
|
||||||
|
+ \/
|
||||||
|
+ ---
|
||||||
|
+ i=0
|
||||||
|
+.vs
|
||||||
|
+.FI
|
||||||
|
+.PP
|
||||||
|
+If you're processing a related set of images, for example frames of an
|
||||||
|
+animation, it's generally best to apply the same intensity map to
|
||||||
|
+every frame, since otherwise you'll get distracting frame-to-frame
|
||||||
|
+changes in the brightness of objects.
|
||||||
|
+.BR pnmhisteq 's
|
||||||
|
+.B \-wmap
|
||||||
|
+option
|
||||||
|
+allows you to save, as a portable graymap, the luminosity map computed
|
||||||
|
+from an image (usually a composite of the images you intend
|
||||||
|
+to process created with
|
||||||
|
+.BR pnmcat ).
|
||||||
|
+Then, you can subsequently process each of the individual images using
|
||||||
|
+the luminosity map saved in the file, supplied with the
|
||||||
|
+.B \-rmap
|
||||||
|
+option.
|
||||||
|
+.SH OPTIONS
|
||||||
|
+.TP 10
|
||||||
|
+.B \-gray
|
||||||
|
+When processing a pixmap, only gray pixels (those with identical red,
|
||||||
|
+green, and blue values) are included in the histogram and modified
|
||||||
|
+in the output image. This is a special purpose option intended
|
||||||
|
+for images where the actual data are gray scale, with
|
||||||
|
+colour annotations you don't want modified. Weather
|
||||||
|
+satellite images that show continent outlines in colour are best
|
||||||
|
+processed using this option. The option has no effect when the input
|
||||||
|
+is a graymap.
|
||||||
|
+.TP
|
||||||
|
+.BI \-rmap " mapfile"
|
||||||
|
+Process the image using the luminosity map specified by the portable
|
||||||
|
+graymap
|
||||||
|
+.I mapfile.
|
||||||
|
+The graymap, usually created by an earlier run of
|
||||||
|
+.B pnmhisteq
|
||||||
|
+with the
|
||||||
|
+.B \-wmap
|
||||||
|
+option, contains a single row with number of columns equal to
|
||||||
|
+the
|
||||||
|
+.I maxval
|
||||||
|
+(greatest intensity) of the image. Each pixel in the image is
|
||||||
|
+transformed by looking up its luminosity in the corresponding
|
||||||
|
+column in the map file and changing it to the value
|
||||||
|
+given by that column.
|
||||||
|
+.TP
|
||||||
|
+.BI \-wmap " mapfile"
|
||||||
|
+Creates a portable graymap,
|
||||||
|
+.I mapfile,
|
||||||
|
+containing the luminosity map computed from the histogram of the
|
||||||
|
+input image. This map file can be read on subsequent runs of
|
||||||
|
+.B pnmhisteq
|
||||||
|
+with the
|
||||||
|
+.B \-rmap
|
||||||
|
+option, allowing a group of images to be processed with
|
||||||
|
+an identical map.
|
||||||
|
+.TP
|
||||||
|
+.B \-verbose
|
||||||
|
+Prints the histogram and luminosity map on standard error.
|
||||||
|
+.PP
|
||||||
|
+All flags can be abbreviated to their shortest unique prefix.
|
||||||
|
+.SH BUGS
|
||||||
|
+Histogram equalisation is effective for increasing the visible detail
|
||||||
|
+in scientific imagery and in some continuous-tone pictures. It is
|
||||||
|
+often too drastic, however, for scanned halftone images, where it
|
||||||
|
+does an excellent job of making halftone artifacts apparent. You
|
||||||
|
+might want to experiment with
|
||||||
|
+.BR pgnnorm ,
|
||||||
|
+.BR ppmnorm ,
|
||||||
|
+and
|
||||||
|
+.B pnmgamma
|
||||||
|
+for more subtle contrast enhancement.
|
||||||
|
+.PP
|
||||||
|
+The luminosity map file supplied by the
|
||||||
|
+.B \-rmap
|
||||||
|
+option must have the same
|
||||||
|
+.I maxval
|
||||||
|
+as the input image. This is always the case when the
|
||||||
|
+map file was created by the
|
||||||
|
+.B \-wmap
|
||||||
|
+option of
|
||||||
|
+.BR pnmhisteq .
|
||||||
|
+If this restriction causes a problem, simply adjust the
|
||||||
|
+.I maxval
|
||||||
|
+of the map with
|
||||||
|
+.B pnmdepth
|
||||||
|
+to agree with the input image.
|
||||||
|
+.PP
|
||||||
|
+If the input is a PBM file (on which histogram equalisation is an
|
||||||
|
+identity operation), the only effect of passing the file through
|
||||||
|
+.B pnmhisteq
|
||||||
|
+will be the passage of time.
|
||||||
|
+.SH "SEE ALSO"
|
||||||
|
+.PD
|
||||||
|
+.BR pgmnorm (1),
|
||||||
|
+.BR pnm (5),
|
||||||
|
+.BR pnmcat (1),
|
||||||
|
+.BR pnmdepth (1),
|
||||||
|
+.BR pnmgamma (1),
|
||||||
|
+.BR pnmnorm (1)
|
||||||
|
+.TP 5
|
||||||
|
+[1]
|
||||||
|
+Russ, John C. The Image Processing Handbook.
|
||||||
|
+Boca Raton: CRC Press, 1992. Pages 105-110.
|
||||||
|
+.ne 10
|
||||||
|
+.SH AUTHOR
|
||||||
|
+.ce 2
|
||||||
|
+Copyright (C) 1995 by John Walker (kelvin@fourmilab.ch).
|
||||||
|
+WWW home page: http://www.fourmilab.ch/
|
||||||
|
+.PP
|
||||||
|
+Permission to use, copy, modify, and distribute this software and its
|
||||||
|
+documentation for any purpose and without fee is hereby granted,
|
||||||
|
+without any conditions or restrictions. This software is provided ``as
|
||||||
|
+is'' without express or implied warranty.
|
374
graphics/netpbm/patches/patch-ap
Normal file
374
graphics/netpbm/patches/patch-ap
Normal file
@ -0,0 +1,374 @@
|
|||||||
|
--- pnm/pnmhisteq.c.orig Sun Jan 10 23:48:41 1999
|
||||||
|
+++ pnm/pnmhisteq.c Sun Jan 10 23:48:41 1999
|
||||||
|
@@ -0,0 +1,371 @@
|
||||||
|
+/*
|
||||||
|
+ pnmhisteq.c
|
||||||
|
+
|
||||||
|
+ Equalise histogram for a PGM or PPM file
|
||||||
|
+
|
||||||
|
+ Options: -gray: modify gray pixels only; leave colours unchanged
|
||||||
|
+ -rmap fn: read luminosity map from PGM file fn
|
||||||
|
+ -wmap wn: write luminosity map to PGM file fn
|
||||||
|
+ -verbose: print histogram and luminosity map
|
||||||
|
+
|
||||||
|
+ Accepts PGM and PPM as input. PBM input is allowed, but histogram
|
||||||
|
+ equalisation does not modify a PBM file.
|
||||||
|
+
|
||||||
|
+ by John Walker (kelvin@fourmilab.ch) -- March MVM.
|
||||||
|
+ WWW home page: http://www.fourmilab.ch/
|
||||||
|
+
|
||||||
|
+ Copyright (C) 1995 by John Walker
|
||||||
|
+
|
||||||
|
+ Permission to use, copy, modify, and distribute this software and
|
||||||
|
+ its documentation for any purpose and without fee is hereby
|
||||||
|
+ granted, without any conditions or restrictions. This software is
|
||||||
|
+ provided "as is" without express or implied warranty.
|
||||||
|
+
|
||||||
|
+*/
|
||||||
|
+
|
||||||
|
+#include "pnm.h"
|
||||||
|
+
|
||||||
|
+/* Prototypes */
|
||||||
|
+
|
||||||
|
+static void hsv_rgb ARGS((double h, double s, double v,
|
||||||
|
+ double *r, double *g, double *b));
|
||||||
|
+static void rgb_hsv ARGS((double r, double g, double b,
|
||||||
|
+ double *h, double *s, double *v));
|
||||||
|
+
|
||||||
|
+/* HSV_RGB -- Convert HSV colour specification to RGB intensities.
|
||||||
|
+ Hue is specified as a real value from 0 to 360,
|
||||||
|
+ Saturation and Intensity as reals from 0 to 1. The
|
||||||
|
+ RGB components are returned as reals from 0 to 1. */
|
||||||
|
+
|
||||||
|
+static void hsv_rgb(h, s, v, r, g, b)
|
||||||
|
+ double h, s, v;
|
||||||
|
+ double *r, *g, *b;
|
||||||
|
+{
|
||||||
|
+ int i;
|
||||||
|
+ double f, p, q, t;
|
||||||
|
+
|
||||||
|
+ if (s == 0) {
|
||||||
|
+ *r = *g = *b = v;
|
||||||
|
+ } else {
|
||||||
|
+ if (h == 360.0) {
|
||||||
|
+ h = 0;
|
||||||
|
+ }
|
||||||
|
+ h /= 60.0;
|
||||||
|
+
|
||||||
|
+ i = h;
|
||||||
|
+ f = h - i;
|
||||||
|
+ p = v * (1.0 - s);
|
||||||
|
+ q = v * (1.0 - (s * f));
|
||||||
|
+ t = v * (1.0 - (s * (1.0 - f)));
|
||||||
|
+ switch (i) {
|
||||||
|
+
|
||||||
|
+ case 0:
|
||||||
|
+ *r = v;
|
||||||
|
+ *g = t;
|
||||||
|
+ *b = p;
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case 1:
|
||||||
|
+ *r = q;
|
||||||
|
+ *g = v;
|
||||||
|
+ *b = p;
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case 2:
|
||||||
|
+ *r = p;
|
||||||
|
+ *g = v;
|
||||||
|
+ *b = t;
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case 3:
|
||||||
|
+ *r = p;
|
||||||
|
+ *g = q;
|
||||||
|
+ *b = v;
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case 4:
|
||||||
|
+ *r = t;
|
||||||
|
+ *g = p;
|
||||||
|
+ *b = v;
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case 5:
|
||||||
|
+ *r = v;
|
||||||
|
+ *g = p;
|
||||||
|
+ *b = q;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/* RGB_HSV -- Map R, G, B intensities in the range from 0 to 1 into
|
||||||
|
+ Hue, Saturation, and Value: Hue from 0 to 360,
|
||||||
|
+ Saturation from 0 to 1, and Value from 0 to 1.
|
||||||
|
+ Special case: if Saturation is 0 (it's a grey scale
|
||||||
|
+ tone), Hue is undefined and is returned as -1.
|
||||||
|
+
|
||||||
|
+ This follows Foley & van Dam, section 17.4.4. */
|
||||||
|
+
|
||||||
|
+static void rgb_hsv(r, g, b, h, s, v)
|
||||||
|
+ double r, g, b;
|
||||||
|
+ double *h, *s, *v;
|
||||||
|
+{
|
||||||
|
+ double imax = max(r, max(g, b)),
|
||||||
|
+ imin = min(r, min(g, b)),
|
||||||
|
+ rc, gc, bc;
|
||||||
|
+
|
||||||
|
+ *v = imax;
|
||||||
|
+ if (imax != 0) {
|
||||||
|
+ *s = (imax - imin) / imax;
|
||||||
|
+ } else {
|
||||||
|
+ *s = 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (*s == 0) {
|
||||||
|
+ *h = -1;
|
||||||
|
+ } else {
|
||||||
|
+ rc = (imax - r) / (imax - imin);
|
||||||
|
+ gc = (imax - g) / (imax - imin);
|
||||||
|
+ bc = (imax - b) / (imax - imin);
|
||||||
|
+ if (r == imax) {
|
||||||
|
+ *h = bc - gc;
|
||||||
|
+ } else if (g == imax) {
|
||||||
|
+ *h = 2.0 + rc - bc;
|
||||||
|
+ } else {
|
||||||
|
+ *h = 4.0 + gc - rc;
|
||||||
|
+ }
|
||||||
|
+ *h *= 60.0;
|
||||||
|
+ if (*h < 0.0) {
|
||||||
|
+ *h += 360.0;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int main(argc, argv)
|
||||||
|
+ int argc;
|
||||||
|
+ char *argv[];
|
||||||
|
+{
|
||||||
|
+ FILE *ifp;
|
||||||
|
+ int argn = 1, i, j, verbose = 0, mono_only = 0;
|
||||||
|
+ gray lmin, lmax;
|
||||||
|
+ gray **lumamap; /* Luminosity map */
|
||||||
|
+ long *lumahist; /* Histogram of luminosity values */
|
||||||
|
+ int rows, hist_cols; /* Rows, columns of input image */
|
||||||
|
+ xelval maxval; /* Maxval of input image */
|
||||||
|
+ int format; /* Format indicator (PBM/PGM/PPM) */
|
||||||
|
+ xel** xels; /* Pixel array */
|
||||||
|
+ unsigned long pixels = 0, pixsum = 0, maxluma = 0;
|
||||||
|
+ double lscale;
|
||||||
|
+ xel *grayrow;
|
||||||
|
+ pixel *pixrow;
|
||||||
|
+ FILE *rmap = NULL, *wmap = NULL;
|
||||||
|
+ char *usage = "[-gray] [-verbose] [-rmap pgmfile] [-wmap pgmfile] [pnmfile]";
|
||||||
|
+
|
||||||
|
+ pnm_init(&argc, argv);
|
||||||
|
+
|
||||||
|
+ /* Check for flags. */
|
||||||
|
+
|
||||||
|
+ while (argn < argc && argv[argn][0] == '-' && argv[argn][1] != '\0') {
|
||||||
|
+ if (pm_keymatch(argv[argn], "-gray", 1)) {
|
||||||
|
+ mono_only = 1;
|
||||||
|
+ } else if (pm_keymatch(argv[argn], "-verbose", 1)) {
|
||||||
|
+ verbose = 1;
|
||||||
|
+ } else if (pm_keymatch(argv[argn], "-rmap", 1)) {
|
||||||
|
+ if (rmap != NULL) {
|
||||||
|
+ pm_error("already specified an input map");
|
||||||
|
+ }
|
||||||
|
+ argn++;
|
||||||
|
+ if (argn == argc || strcmp(argv[argn], "-") == 0) {
|
||||||
|
+ pm_usage(usage);
|
||||||
|
+ }
|
||||||
|
+ rmap = pm_openr(argv[argn]);
|
||||||
|
+ } else if (pm_keymatch(argv[argn], "-wmap", 1)) {
|
||||||
|
+ if (wmap != NULL) {
|
||||||
|
+ pm_error("already specified an output map");
|
||||||
|
+ }
|
||||||
|
+ argn++;
|
||||||
|
+ if (argn == argc) {
|
||||||
|
+ pm_usage(usage);
|
||||||
|
+ }
|
||||||
|
+ wmap = pm_openw(argv[argn]);
|
||||||
|
+ } else {
|
||||||
|
+ pm_usage(usage);
|
||||||
|
+ }
|
||||||
|
+ argn++;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (--argc > argn) {
|
||||||
|
+ pm_usage(usage);
|
||||||
|
+ } else if (argc == argn) {
|
||||||
|
+ ifp = pm_openr(argv[argn]);
|
||||||
|
+ } else {
|
||||||
|
+ ifp = stdin;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ xels = pnm_readpnm(ifp, &hist_cols, &rows, &maxval, &format);
|
||||||
|
+ pm_close(ifp);
|
||||||
|
+
|
||||||
|
+ /* Allocate histogram and luminosity map arrays. If the
|
||||||
|
+ user has specified an input map file, read it in at
|
||||||
|
+ this point. */
|
||||||
|
+
|
||||||
|
+ lumahist = (long *) pm_allocrow(maxval + 1, sizeof(long));
|
||||||
|
+ bzero((char *) lumahist, (maxval + 1) * sizeof(long));
|
||||||
|
+
|
||||||
|
+ if (rmap == NULL) {
|
||||||
|
+ lumamap = pgm_allocarray(maxval + 1, 1);
|
||||||
|
+ } else {
|
||||||
|
+ int rmcols, rmrows;
|
||||||
|
+ gray rmmaxv;
|
||||||
|
+
|
||||||
|
+ lumamap = pgm_readpgm(rmap, &rmcols, &rmrows, &rmmaxv);
|
||||||
|
+ if (rmmaxv != maxval) {
|
||||||
|
+ pm_error("maxval in map file (%d) different from input (%d)",
|
||||||
|
+ rmmaxv, maxval);
|
||||||
|
+ }
|
||||||
|
+ if (rmrows != 1 || rmcols != rmmaxv) {
|
||||||
|
+ pm_error("map size (%d by %d) wrong; must be (%d by 1)",
|
||||||
|
+ rmcols, rmrows, maxval);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Scan the image and build the luminosity histogram. If
|
||||||
|
+ the input is a PPM, we calculate the luminosity of each
|
||||||
|
+ pixel from its RGB components. */
|
||||||
|
+
|
||||||
|
+ lmin = maxval;
|
||||||
|
+ lmax = 0;
|
||||||
|
+ if (PNM_FORMAT_TYPE(format) == PGM_TYPE ||
|
||||||
|
+ PNM_FORMAT_TYPE(format) == PBM_TYPE) {
|
||||||
|
+
|
||||||
|
+ /* Compute intensity histogram */
|
||||||
|
+
|
||||||
|
+ pixels = ((unsigned long) rows) * ((unsigned long) hist_cols);
|
||||||
|
+ for (i = 0; i < rows; i++) {
|
||||||
|
+ xel *grayrow = xels[i];
|
||||||
|
+ for (j = 0; j < hist_cols; j++) {
|
||||||
|
+ gray l = PNM_GET1(grayrow[j]);
|
||||||
|
+ lmin = min(lmin, l);
|
||||||
|
+ lmax = max(lmax, l);
|
||||||
|
+ lumahist[l]++;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ } else if (PNM_FORMAT_TYPE(format) == PPM_TYPE) {
|
||||||
|
+ for (i = 0; i < rows; i++) {
|
||||||
|
+ pixel *pixrow = (pixel *) xels[i];
|
||||||
|
+
|
||||||
|
+ for (j = 0; j < hist_cols; j++) {
|
||||||
|
+ if (!mono_only ||
|
||||||
|
+ ((PPM_GETR(pixrow[j]) == PPM_GETG(pixrow[j])) &&
|
||||||
|
+ (PPM_GETR(pixrow[j]) == PPM_GETB(pixrow[j])))) {
|
||||||
|
+ gray l = (gray) PPM_LUMIN(pixrow[j]);
|
||||||
|
+ lmin = min(lmin, l);
|
||||||
|
+ lmax = max(lmax, l);
|
||||||
|
+ lumahist[l]++;
|
||||||
|
+ pixels++;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ } else {
|
||||||
|
+ pm_error("unknown input format");
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* The PGM and PPM branches rejoin here to calculate the
|
||||||
|
+ luminosity mapping table which gives the histogram-equalised
|
||||||
|
+ luminosity for each original luminosity. */
|
||||||
|
+
|
||||||
|
+ /* Calculate initial histogram equalisation curve. */
|
||||||
|
+
|
||||||
|
+ for (i = 0; i <= (int) maxval; i++) {
|
||||||
|
+
|
||||||
|
+ /* Yick. If PGM_BIGGRAYS is defined (I thought they were little
|
||||||
|
+ guys, about four foot, with funny eyes...) the following
|
||||||
|
+ calculation can overflow a 32 bit long. So, we do it in
|
||||||
|
+ floating point. Since this happens only maxval times, the
|
||||||
|
+ inefficiency is trivial compared to the every-pixel code above
|
||||||
|
+ and below. */
|
||||||
|
+
|
||||||
|
+ lumamap[0][i] = (gray) (((((double) pixsum * maxval)) / pixels) + 0.5);
|
||||||
|
+ if (lumahist[i] > 0) {
|
||||||
|
+ maxluma = i;
|
||||||
|
+ }
|
||||||
|
+ pixsum += lumahist[i];
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Normalise so that the brightest pixels are set to
|
||||||
|
+ maxval. */
|
||||||
|
+
|
||||||
|
+ lscale = ((double) maxval) / ((lumahist[maxluma] > 0) ?
|
||||||
|
+ ((double) lumamap[0][maxluma]) : ((double) maxval));
|
||||||
|
+ for (i = 0; i <= (int) maxval; i++) {
|
||||||
|
+ lumamap[0][i] = (gray)
|
||||||
|
+ min(((long) maxval), ((long) (lumamap[0][i] * lscale + 0.5)));
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* If requested, print the luminosity map and original histogram. */
|
||||||
|
+
|
||||||
|
+ if (verbose) {
|
||||||
|
+ fprintf(stderr,
|
||||||
|
+ " Luminosity map Number of\n Original New Pixels\n");
|
||||||
|
+ for (i = 0; i <= (int) maxval; i++) {
|
||||||
|
+ if (lumahist[i] > 0) {
|
||||||
|
+ fprintf(stderr,"%6d -> %6d %8d\n", i,
|
||||||
|
+ lumamap[0][i], lumahist[i]);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ switch (PNM_FORMAT_TYPE(format)) {
|
||||||
|
+ case PBM_TYPE:
|
||||||
|
+ case PPM_TYPE:
|
||||||
|
+ for (i = 0; i < rows; i++) {
|
||||||
|
+ pixrow = (pixel *) xels[i];
|
||||||
|
+ for (j = 0; j < hist_cols; j++) {
|
||||||
|
+ if (!mono_only ||
|
||||||
|
+ ((PPM_GETR(pixrow[j]) == PPM_GETG(pixrow[j])) &&
|
||||||
|
+ (PPM_GETR(pixrow[j]) == PPM_GETB(pixrow[j])))) {
|
||||||
|
+ double r, g, b, h, s, v;
|
||||||
|
+ int iv;
|
||||||
|
+
|
||||||
|
+ r = (double) PPM_GETR(pixrow[j]) / ((double) maxval);
|
||||||
|
+ g = (double) PPM_GETG(pixrow[j]) / ((double) maxval);
|
||||||
|
+ b = (double) PPM_GETB(pixrow[j]) / ((double) maxval);
|
||||||
|
+ rgb_hsv(r, g, b, &h, &s, &v);
|
||||||
|
+ iv = (int) ((v * maxval) + 0.5);
|
||||||
|
+
|
||||||
|
+ if (iv > ((int) maxval)) {
|
||||||
|
+ iv = maxval;
|
||||||
|
+ }
|
||||||
|
+ v = ((double) lumamap[0][iv]) / ((double) maxval);
|
||||||
|
+ if (v > 1.0) {
|
||||||
|
+ v = 1.0;
|
||||||
|
+ }
|
||||||
|
+ hsv_rgb(h, s, v, &r, &g, &b);
|
||||||
|
+ PPM_ASSIGN(pixrow[j], (int) (r * maxval),
|
||||||
|
+ (int) (g * maxval), (int) (b * maxval));
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case PGM_TYPE:
|
||||||
|
+ for (i = 0; i < rows; i++) {
|
||||||
|
+ grayrow = xels[i];
|
||||||
|
+ for (j = 0; j < hist_cols; j++) {
|
||||||
|
+ PNM_ASSIGN1(grayrow[j], lumamap[0][PNM_GET1(grayrow[j])]);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ pnm_writepnm(stdout, xels, hist_cols, rows, maxval, format, 0);
|
||||||
|
+
|
||||||
|
+ /* If requested, save the map as a PGM file. */
|
||||||
|
+
|
||||||
|
+ if (wmap != NULL) {
|
||||||
|
+ pgm_writepgm(wmap, lumamap, maxval, 1, maxval, 0);
|
||||||
|
+ fclose(wmap);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
29
graphics/netpbm/patches/patch-aq
Normal file
29
graphics/netpbm/patches/patch-aq
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
--- pnm/pnmmerge.c.orig Mon Jan 31 12:31:47 1994
|
||||||
|
+++ pnm/pnmmerge.c Sun Jan 10 23:48:40 1999
|
||||||
|
@@ -30,6 +30,10 @@
|
||||||
|
{
|
||||||
|
++argv;
|
||||||
|
--argc;
|
||||||
|
+ if(!*argv) {
|
||||||
|
+ fprintf(stderr, "Usage: pnmmerge pnm_program_name [args ...]\n");
|
||||||
|
+ exit(1);
|
||||||
|
+ }
|
||||||
|
goto again;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -51,6 +55,7 @@
|
||||||
|
TRY("pnmgamma", pnmgamma_main);
|
||||||
|
TRY("pnminvert", pnminvert_main);
|
||||||
|
TRY("pnmhistmap", pnmhistmap_main);
|
||||||
|
+ TRY("pnmhisteq", pnmhisteq_main);
|
||||||
|
TRY("pnmnlfilt", pnmnlfilt_main);
|
||||||
|
TRY("pnmnoraw", pnmnoraw_main);
|
||||||
|
TRY("pnmpaste", pnmpaste_main);
|
||||||
|
@@ -76,6 +81,7 @@
|
||||||
|
#endif /*LIBTIFF*/
|
||||||
|
TRY("xwdtopnm", xwdtopnm_main);
|
||||||
|
TRY("zeisstopnm", zeisstopnm_main);
|
||||||
|
+ TRY("pnmsmooth", pnmsmooth_main);
|
||||||
|
|
||||||
|
(void) fprintf(
|
||||||
|
stderr, "pnmmerge: \"%s\" is an unknown PNM program!\n", cp );
|
52
graphics/netpbm/patches/patch-ar
Normal file
52
graphics/netpbm/patches/patch-ar
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
--- pnm/pnmsmooth.1.orig Mon Oct 4 10:11:56 1993
|
||||||
|
+++ pnm/pnmsmooth.1 Sun Jan 10 23:48:40 1999
|
||||||
|
@@ -1,25 +1,42 @@
|
||||||
|
-.TH pnmsmooth 1 "13 January 1991"
|
||||||
|
+.TH pnmsmooth 1 "4 December 1994"
|
||||||
|
.IX pnmsmooth
|
||||||
|
.SH NAME
|
||||||
|
pnmsmooth - smooth out an image
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B pnmsmooth
|
||||||
|
+.RB [ -size
|
||||||
|
+.IR width
|
||||||
|
+.IR height ]
|
||||||
|
+.RB [ -dump
|
||||||
|
+.IR dumpfile ]
|
||||||
|
.RI [ pnmfile ]
|
||||||
|
.SH DESCRIPTION
|
||||||
|
Smooths out an image by replacing each pixel with the
|
||||||
|
-average of its nine immediate neighbors.
|
||||||
|
+average of its width X height neighbors.
|
||||||
|
.IX smoothing
|
||||||
|
.IX anti-aliasing
|
||||||
|
-It is implemented as a simple script using
|
||||||
|
+It is implemented as a C progam that generates a PGM convolution matrix
|
||||||
|
+and then invokes
|
||||||
|
.IR pnmconvol .
|
||||||
|
.IX pnmconvol
|
||||||
|
+.SH OPTIONS
|
||||||
|
+.TP
|
||||||
|
+.B -size width height
|
||||||
|
+Specifies the size of the convolution matrix.
|
||||||
|
+Default size is a 3x3 matrix.
|
||||||
|
+Width and height sizes must be odd.
|
||||||
|
+Maximum size of convolution matrix is limited by the maximum value for a
|
||||||
|
+pixel such that (width * height * 2) must not exceed the maximum pixel value.
|
||||||
|
+.TP
|
||||||
|
+.B -dump dumpfile
|
||||||
|
+Generates and saves the convolution file only.
|
||||||
|
+Use of this option does not invoke pnmconvol.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
pnmconvol(1), pnm(5)
|
||||||
|
-.SH BUGS
|
||||||
|
-It's a script.
|
||||||
|
-Scripts are not portable to non-Unix environments.
|
||||||
|
-.SH AUTHOR
|
||||||
|
+.SH AUTHORS
|
||||||
|
Copyright (C) 1989, 1991 by Jef Poskanzer.
|
||||||
|
+.br
|
||||||
|
+Converted from script to C program December 1994 by Mike Burns (burns@chem.psu.edu).
|
||||||
|
.\" 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
|
24
graphics/netpbm/patches/patch-as
Normal file
24
graphics/netpbm/patches/patch-as
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
--- pnm/pnmsmooth.README.orig Sun Jan 10 23:48:41 1999
|
||||||
|
+++ pnm/pnmsmooth.README Sun Jan 10 23:48:41 1999
|
||||||
|
@@ -0,0 +1,21 @@
|
||||||
|
+README for pnmsmooth.c 2.0
|
||||||
|
+
|
||||||
|
+This is a replacement for the pnmsmooth script that is distributed with
|
||||||
|
+pbmplus/netpbm. This version of pnmsmooth is written as a C program rather
|
||||||
|
+than a shell script. It accepts command line arguments to specify a size
|
||||||
|
+other than 3x3 for the convolution matrix and an argument for dumping the
|
||||||
|
+resultant convolution matrix as a PGM file. By default it uses the same 3x3
|
||||||
|
+matrix size as the pnmsmooth script and can be used as a direct replacement.
|
||||||
|
+
|
||||||
|
+Also included are an updated man page and a patch file to update the Imakefile
|
||||||
|
+in the pnm directory. You may want to apply the patches by hand if you have
|
||||||
|
+already modified the Imakefile to add other new programs. You will then
|
||||||
|
+have to remake the Makefiles and then type 'make all' in the pnm directory.
|
||||||
|
+
|
||||||
|
+- Mike
|
||||||
|
+
|
||||||
|
+----------------------------------------------------------------------------
|
||||||
|
+Mike Burns System Administrator
|
||||||
|
+burns@chem.psu.edu Department of Chemistry
|
||||||
|
+(814) 863-2123 The Pennsylvania State University
|
||||||
|
+
|
174
graphics/netpbm/patches/patch-at
Normal file
174
graphics/netpbm/patches/patch-at
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
--- pnm/pnmsmooth.c.orig Sun Jan 10 23:48:41 1999
|
||||||
|
+++ pnm/pnmsmooth.c Sun Jan 10 23:48:41 1999
|
||||||
|
@@ -0,0 +1,171 @@
|
||||||
|
+/* pnmsmooth.c - smooth out an image by replacing each pixel with the
|
||||||
|
+** average of its width x height neighbors.
|
||||||
|
+**
|
||||||
|
+** Version 2.0 December 5, 1994
|
||||||
|
+**
|
||||||
|
+** Copyright (C) 1994 by Mike Burns (burns@chem.psu.edu)
|
||||||
|
+**
|
||||||
|
+** 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.
|
||||||
|
+*/
|
||||||
|
+
|
||||||
|
+/* Version 2.0 - December 5, 1994
|
||||||
|
+** ------------------------------
|
||||||
|
+** Rewrote as a C program that accepts a few options instead of a shell
|
||||||
|
+** script with no options.
|
||||||
|
+**
|
||||||
|
+*/
|
||||||
|
+
|
||||||
|
+#include "pnm.h"
|
||||||
|
+#include <sys/wait.h>
|
||||||
|
+
|
||||||
|
+#define TRUE 1
|
||||||
|
+#define FALSE 0
|
||||||
|
+
|
||||||
|
+int
|
||||||
|
+main( argc, argv )
|
||||||
|
+ int argc;
|
||||||
|
+ char* argv[];
|
||||||
|
+ {
|
||||||
|
+ FILE *cofp;
|
||||||
|
+ char *tempfn;
|
||||||
|
+ char *pnmfn;
|
||||||
|
+ int argn;
|
||||||
|
+ int col, row;
|
||||||
|
+ int format, forceplain;
|
||||||
|
+ int cols, rows;
|
||||||
|
+ int newmaxval; /* normally xelval, but want int here */
|
||||||
|
+ xelval g;
|
||||||
|
+ xel *outputrow;
|
||||||
|
+ int pid, status;
|
||||||
|
+ int DUMPFLAG = FALSE;
|
||||||
|
+ char *usage = "[-size width height] [-dump dumpfile] [pnmfile]";
|
||||||
|
+
|
||||||
|
+ pnm_init( &argc, argv );
|
||||||
|
+
|
||||||
|
+ /* set up defaults */
|
||||||
|
+ cols = 3;
|
||||||
|
+ rows = 3;
|
||||||
|
+ format = PGM_FORMAT;
|
||||||
|
+ forceplain = 1;
|
||||||
|
+ pnmfn = (char *) 0; /* initialize to NULL just in case */
|
||||||
|
+
|
||||||
|
+ argn = 1;
|
||||||
|
+ while ( argn < argc && argv[argn][0] == '-' && argv[argn][1] != '\0' )
|
||||||
|
+ {
|
||||||
|
+ if ( pm_keymatch( argv[argn], "-size", 2 ) )
|
||||||
|
+ {
|
||||||
|
+ ++argn;
|
||||||
|
+ if ( argn+1 >= argc )
|
||||||
|
+ {
|
||||||
|
+ pm_message( "incorrect number of arguments for -size option" );
|
||||||
|
+ pm_usage( usage );
|
||||||
|
+ }
|
||||||
|
+ else if ( argv[argn][0] == '-' || argv[argn+1][0] == '-' )
|
||||||
|
+ {
|
||||||
|
+ pm_message( "invalid arguments to -size option: %s %s",
|
||||||
|
+ argv[argn], argv[argn+1] );
|
||||||
|
+ pm_usage( usage );
|
||||||
|
+ }
|
||||||
|
+ if ( (cols = atoi(argv[argn])) == 0 )
|
||||||
|
+ pm_error( "invalid width size specification: %s", argv[argn] );
|
||||||
|
+ ++argn;
|
||||||
|
+ if ( (rows = atoi(argv[argn])) == 0 )
|
||||||
|
+ pm_error( "invalid height size specification: %s",argv[argn] );
|
||||||
|
+ if ( cols % 2 != 1 || rows % 2 != 1 )
|
||||||
|
+ pm_error( "the convolution matrix must have an odd number of rows and columns" );
|
||||||
|
+ }
|
||||||
|
+ else if ( pm_keymatch( argv[argn], "-dump", 2 ) )
|
||||||
|
+ {
|
||||||
|
+ ++argn;
|
||||||
|
+ if ( argn >= argc )
|
||||||
|
+ {
|
||||||
|
+ pm_message( "missing argument to -dump option" );
|
||||||
|
+ pm_usage( usage );
|
||||||
|
+ }
|
||||||
|
+ else if ( argv[argn][0] == '-' )
|
||||||
|
+ {
|
||||||
|
+ pm_message( "invalid argument to -dump option: %s",
|
||||||
|
+ argv[argn] );
|
||||||
|
+ pm_usage( usage );
|
||||||
|
+ }
|
||||||
|
+ cofp = pm_openw( argv[argn] );
|
||||||
|
+ DUMPFLAG = TRUE;
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ pm_usage( usage );
|
||||||
|
+ ++argn;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Only get file name if given on command line to pass through to
|
||||||
|
+ ** pnmconvol. If filename is coming from stdin, pnmconvol will read it.
|
||||||
|
+ */
|
||||||
|
+ if ( argn < argc )
|
||||||
|
+ {
|
||||||
|
+ pnmfn = argv[argn];
|
||||||
|
+ ++argn;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if ( argn != argc )
|
||||||
|
+ pm_usage( usage );
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+ if ( !DUMPFLAG )
|
||||||
|
+ {
|
||||||
|
+ if ( (tempfn = tmpnam((char *) 0)) == NULL )
|
||||||
|
+ pm_error( "could not create temporary file name" );
|
||||||
|
+ if ( (cofp = pm_openw(tempfn)) == NULL )
|
||||||
|
+ pm_error( "could not create temporary convolution file" );
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Generate mean value for all pixels in convolution matrix. */
|
||||||
|
+ g = rows * cols + 1;
|
||||||
|
+
|
||||||
|
+ /* Make sure newmaxval is not larger than PNM_MAXMAXVAL or else
|
||||||
|
+ ** newmaxval will overrun its defined data size and become garbage.
|
||||||
|
+ */
|
||||||
|
+ newmaxval = ( rows * cols ) * 2;
|
||||||
|
+ if ( newmaxval > PNM_MAXMAXVAL )
|
||||||
|
+ pm_error( "generated maxval is too large: %d", newmaxval );
|
||||||
|
+
|
||||||
|
+ pnm_writepnminit( cofp, cols, rows, newmaxval, format, forceplain );
|
||||||
|
+ outputrow = pnm_allocrow( cols );
|
||||||
|
+
|
||||||
|
+ for ( row = 0; row < rows; ++ row )
|
||||||
|
+ {
|
||||||
|
+ for ( col = 0; col < cols; ++col )
|
||||||
|
+ PNM_ASSIGN1( outputrow[col], g );
|
||||||
|
+ pnm_writepnmrow( cofp, outputrow, cols, newmaxval, format, forceplain );
|
||||||
|
+ }
|
||||||
|
+ pm_close( cofp );
|
||||||
|
+ pnm_freerow( outputrow );
|
||||||
|
+
|
||||||
|
+ /* If we're only going to dump the file, now is the time to stop. */
|
||||||
|
+ if ( DUMPFLAG )
|
||||||
|
+ exit( 0 );
|
||||||
|
+
|
||||||
|
+ /* fork a child process */
|
||||||
|
+ if ( (pid = fork()) < 0 )
|
||||||
|
+ pm_error( "fork" );
|
||||||
|
+
|
||||||
|
+ /* child process executes following code */
|
||||||
|
+ if ( pid == 0 )
|
||||||
|
+ {
|
||||||
|
+ /* If pnmfile name is not given on command line, then pnmfn will be
|
||||||
|
+ ** (char *) 0 and the arglist will terminate there.
|
||||||
|
+ */
|
||||||
|
+ execlp( "pnmconvol", "pnmconvol", tempfn, pnmfn, (char *) 0 );
|
||||||
|
+ pm_error( "error executing pnmconvol command" );
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* wait for child to finish */
|
||||||
|
+ while ( wait(&status) != pid )
|
||||||
|
+ ;
|
||||||
|
+
|
||||||
|
+ unlink( tempfn );
|
||||||
|
+ exit( 0 );
|
||||||
|
+ }
|
23
graphics/netpbm/patches/patch-au
Normal file
23
graphics/netpbm/patches/patch-au
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
--- pnm/pnmsmooth.orig.orig Sun Jan 10 23:48:41 1999
|
||||||
|
+++ pnm/pnmsmooth.orig Sun Jan 10 23:48:41 1999
|
||||||
|
@@ -0,0 +1,20 @@
|
||||||
|
+#!/bin/sh
|
||||||
|
+#
|
||||||
|
+# pnmsmooth - smooth out an image by replacing each xel with the
|
||||||
|
+# average of its nine immediate neighbors
|
||||||
|
+
|
||||||
|
+tmp=/tmp/psm.$$
|
||||||
|
+rm -f $tmp
|
||||||
|
+
|
||||||
|
+cat > $tmp << MOO
|
||||||
|
+P2
|
||||||
|
+3 3
|
||||||
|
+18
|
||||||
|
+10 10 10
|
||||||
|
+10 10 10
|
||||||
|
+10 10 10
|
||||||
|
+MOO
|
||||||
|
+
|
||||||
|
+pnmconvol $tmp ${1+"$@"}
|
||||||
|
+
|
||||||
|
+rm -f $tmp
|
38
graphics/netpbm/patches/patch-av
Normal file
38
graphics/netpbm/patches/patch-av
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
--- pnm/pnmtotiff.c.orig Thu Jan 27 17:59:25 1994
|
||||||
|
+++ pnm/pnmtotiff.c Sun Jan 10 23:48:40 1999
|
||||||
|
@@ -196,6 +196,7 @@
|
||||||
|
samplesperpixel = 1;
|
||||||
|
bitspersample = pm_maxvaltobits( maxval );
|
||||||
|
photometric = PHOTOMETRIC_MINISBLACK;
|
||||||
|
+ i = 8 / bitspersample;
|
||||||
|
bytesperrow = ( cols + i - 1 ) / i;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
@@ -276,20 +277,20 @@
|
||||||
|
for ( col = 0, xP = xels[row], tP = buf;
|
||||||
|
col < cols; ++col, ++xP )
|
||||||
|
{
|
||||||
|
- register unsigned char s;
|
||||||
|
+ register xelval s;
|
||||||
|
|
||||||
|
s = PPM_GETR( *xP );
|
||||||
|
if ( maxval != 255 )
|
||||||
|
- s = (long) s * 255 / maxval;
|
||||||
|
- *tP++ = s;
|
||||||
|
+ s = s * 255 / maxval;
|
||||||
|
+ *tP++ = (unsigned char)s;
|
||||||
|
s = PPM_GETG( *xP );
|
||||||
|
if ( maxval != 255 )
|
||||||
|
- s = (long) s * 255 / maxval;
|
||||||
|
- *tP++ = s;
|
||||||
|
+ s = s * 255 / maxval;
|
||||||
|
+ *tP++ = (unsigned char)s;
|
||||||
|
s = PPM_GETB( *xP );
|
||||||
|
if ( maxval != 255 )
|
||||||
|
- s = (long) s * 255 / maxval;
|
||||||
|
- *tP++ = s;
|
||||||
|
+ s = s * 255 / maxval;
|
||||||
|
+ *tP++ = (unsigned char)s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
113
graphics/netpbm/patches/patch-aw
Normal file
113
graphics/netpbm/patches/patch-aw
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
--- pnm/tifftopnm.c.orig Mon Oct 4 10:12:01 1993
|
||||||
|
+++ pnm/tifftopnm.c Sun Jan 10 23:48:40 1999
|
||||||
|
@@ -54,7 +54,7 @@
|
||||||
|
int headerdump;
|
||||||
|
register u_char sample;
|
||||||
|
register int bitsleft;
|
||||||
|
- unsigned short bps, spp, photomet;
|
||||||
|
+ unsigned short bps, spp, photomet, planarconfig;
|
||||||
|
unsigned short* redcolormap;
|
||||||
|
unsigned short* greencolormap;
|
||||||
|
unsigned short* bluecolormap;
|
||||||
|
@@ -101,6 +101,13 @@
|
||||||
|
spp = 1;
|
||||||
|
if ( ! TIFFGetField( tif, TIFFTAG_PHOTOMETRIC, &photomet ) )
|
||||||
|
pm_error( "error getting photometric" );
|
||||||
|
+ if( spp > 1 ){
|
||||||
|
+ if ( ! TIFFGetField( tif, TIFFTAG_PLANARCONFIG, &planarconfig ) )
|
||||||
|
+ pm_error( "error getting planarconfig" );
|
||||||
|
+ }else{
|
||||||
|
+ planarconfig = PLANARCONFIG_CONTIG;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
|
||||||
|
switch ( spp )
|
||||||
|
{
|
||||||
|
@@ -114,6 +121,18 @@
|
||||||
|
"can only handle 1-channel gray scale or 1- or 3-channel color" );
|
||||||
|
}
|
||||||
|
|
||||||
|
+ switch( planarconfig )
|
||||||
|
+ {
|
||||||
|
+ case PLANARCONFIG_CONTIG:
|
||||||
|
+ break;
|
||||||
|
+ case PLANARCONFIG_SEPARATE:
|
||||||
|
+ if( photomet != PHOTOMETRIC_RGB )
|
||||||
|
+ pm_error( "can only handle separate planes with RGB data" );
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ pm_error("Unrecongnized PLANARCONFIG tag!\n");
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
(void) TIFFGetField( tif, TIFFTAG_IMAGEWIDTH, &cols );
|
||||||
|
(void) TIFFGetField( tif, TIFFTAG_IMAGELENGTH, &rows );
|
||||||
|
|
||||||
|
@@ -259,20 +278,54 @@
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PHOTOMETRIC_RGB:
|
||||||
|
- for ( col = 0; col < cols; ++col, ++xP )
|
||||||
|
- {
|
||||||
|
- register xelval r, g, b;
|
||||||
|
-
|
||||||
|
- NEXTSAMPLE
|
||||||
|
- r = sample;
|
||||||
|
- NEXTSAMPLE
|
||||||
|
- g = sample;
|
||||||
|
- NEXTSAMPLE
|
||||||
|
- b = sample;
|
||||||
|
- if ( spp == 4 )
|
||||||
|
- NEXTSAMPLE /* skip alpha channel */
|
||||||
|
- PPM_ASSIGN( *xP, r, g, b );
|
||||||
|
- }
|
||||||
|
+ if( planarconfig == PLANARCONFIG_CONTIG ){
|
||||||
|
+ for ( col = 0; col < cols; ++col, ++xP )
|
||||||
|
+ {
|
||||||
|
+ register xelval r, g, b;
|
||||||
|
+
|
||||||
|
+ NEXTSAMPLE
|
||||||
|
+ r = sample;
|
||||||
|
+ NEXTSAMPLE
|
||||||
|
+ g = sample;
|
||||||
|
+ NEXTSAMPLE
|
||||||
|
+ b = sample;
|
||||||
|
+ if ( spp == 4 )
|
||||||
|
+ NEXTSAMPLE /* skip alpha channel */
|
||||||
|
+ PPM_ASSIGN( *xP, r, g, b );
|
||||||
|
+ }
|
||||||
|
+ }else{
|
||||||
|
+ /* First clear the value and assign the reds */
|
||||||
|
+ for ( col = 0; col < cols; ++col, ++xP )
|
||||||
|
+ {
|
||||||
|
+ NEXTSAMPLE
|
||||||
|
+ PPM_ASSIGN( *xP, 0, 0, 0 );
|
||||||
|
+ PPM_PUTR( *xP, sample );
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Next the greens */
|
||||||
|
+ if ( TIFFReadScanline( tif, buf, row, 1 ) < 0 )
|
||||||
|
+ pm_error( "bad data read on green line %d", row );
|
||||||
|
+ xP = xelrow;
|
||||||
|
+ inP = buf;
|
||||||
|
+ bitsleft = 8;
|
||||||
|
+ for ( col = 0; col < cols; ++col, ++xP )
|
||||||
|
+ {
|
||||||
|
+ NEXTSAMPLE
|
||||||
|
+ PPM_PUTG( *xP, sample );
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* And finally the blues */
|
||||||
|
+ if ( TIFFReadScanline( tif, buf, row, 2 ) < 0 )
|
||||||
|
+ pm_error( "bad data read on green line %d", row );
|
||||||
|
+ xP = xelrow;
|
||||||
|
+ inP = buf;
|
||||||
|
+ bitsleft = 8;
|
||||||
|
+ for ( col = 0; col < cols; ++col, ++xP )
|
||||||
|
+ {
|
||||||
|
+ NEXTSAMPLE
|
||||||
|
+ PPM_PUTB( *xP, sample );
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
122
graphics/netpbm/patches/patch-ax
Normal file
122
graphics/netpbm/patches/patch-ax
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
--- ppm/Makefile.orig Mon Jan 31 17:44:34 1994
|
||||||
|
+++ ppm/Makefile Mon Jan 11 00:18:52 1999
|
||||||
|
@@ -10,22 +10,24 @@
|
||||||
|
# implied warranty.
|
||||||
|
|
||||||
|
# Default values, usually overridden by top-level Makefile.
|
||||||
|
-#CC = cc
|
||||||
|
-CC = gcc -ansi -pedantic -fcombine-regs -fpcc-struct-return
|
||||||
|
+CC = gcc
|
||||||
|
+#CC = gcc -ansi -pedantic -fcombine-regs -fpcc-struct-return
|
||||||
|
#CFLAGS = -O
|
||||||
|
-CFLAGS = -g
|
||||||
|
+CFLAGS = -O2
|
||||||
|
#CFLAGS = -g -O
|
||||||
|
-#LDFLAGS = -s
|
||||||
|
-LDFLAGS =
|
||||||
|
-INSTALLBINARIES = /usr/new/pbm
|
||||||
|
+LDFLAGS = -s
|
||||||
|
+#LDFLAGS =
|
||||||
|
+INSTALLBINARIES = $(PREFIX)/bin
|
||||||
|
INSTALLSCRIPTS = $(INSTALLBINARIES)
|
||||||
|
-INSTALLMANUALS1 = /usr/man/mann
|
||||||
|
+INSTALLMANUALS1 = $(PREFIX)/man/man1
|
||||||
|
SUFFIXMANUALS1 = 1
|
||||||
|
-INSTALLMANUALS3 = /usr/man/mann
|
||||||
|
+INSTALLMANUALS3 = $(PREFIX)/man/man3
|
||||||
|
SUFFIXMANUALS3 = 3
|
||||||
|
-INSTALLMANUALS5 = /usr/man/mann
|
||||||
|
+INSTALLMANUALS5 = $(PREFIX)/man/man5
|
||||||
|
SUFFIXMANUALS5 = 5
|
||||||
|
-MANCP = cp
|
||||||
|
+MANCP = install -c -m 0644
|
||||||
|
+INSTALLLIBS = $(PREFIX)/lib
|
||||||
|
+INSTALLDEFS = $(PREFIX)/include
|
||||||
|
|
||||||
|
PGMDIR = ../pgm
|
||||||
|
INCLUDEPGM = -I$(PGMDIR)
|
||||||
|
@@ -43,6 +45,7 @@
|
||||||
|
INCLUDE = -I.. $(INCLUDEPGM) $(INCLUDEPBM)
|
||||||
|
ALLCFLAGS = $(CFLAGS) $(INCLUDE)
|
||||||
|
LIBPPM = libppm.a
|
||||||
|
+DEFPPM = ppm.h
|
||||||
|
|
||||||
|
PORTBINARIES = bmptoppm gouldtoppm hpcdtoppm ilbmtoppm imgtoppm \
|
||||||
|
mtvtoppm pcxtoppm pgmtoppm pi1toppm picttoppm \
|
||||||
|
@@ -85,21 +88,21 @@
|
||||||
|
MANUALS5 = ppm
|
||||||
|
|
||||||
|
|
||||||
|
-#all: binaries
|
||||||
|
-all: merge
|
||||||
|
-#install: install.bin
|
||||||
|
-install: install.merge
|
||||||
|
+all: binaries
|
||||||
|
+#all: merge
|
||||||
|
+install: install.bin
|
||||||
|
+#install: install.merge
|
||||||
|
|
||||||
|
|
||||||
|
binaries: $(BINARIES)
|
||||||
|
|
||||||
|
install.bin: binaries $(SCRIPTS)
|
||||||
|
cd $(INSTALLBINARIES) ; rm -f $(BINARIES)
|
||||||
|
- cp $(BINARIES) $(INSTALLBINARIES)
|
||||||
|
+ install -c -s -m 0755 $(BINARIES) $(INSTALLBINARIES)
|
||||||
|
cd $(INSTALLSCRIPTS) ; rm -f $(SCRIPTS)
|
||||||
|
- cp $(SCRIPTS) $(INSTALLSCRIPTS)
|
||||||
|
- cd $(INSTALLSCRIPTS) ; chmod +x $(SCRIPTS)
|
||||||
|
-
|
||||||
|
+ install -c -m 0755 $(SCRIPTS) $(INSTALLSCRIPTS)
|
||||||
|
+ install -c -m 0644 $(LIBPPM) $(INSTALLLIBS)
|
||||||
|
+ install -c -m 0644 $(DEFPPM) $(INSTALLDEFS)
|
||||||
|
|
||||||
|
merge: ppmmerge
|
||||||
|
ppmmerge: ppmmerge.c $(OBJECTS) $(LIBPPM) $(LIBPGM) $(LIBPBM)
|
||||||
|
@@ -132,15 +135,15 @@
|
||||||
|
|
||||||
|
|
||||||
|
# Rule for plain programs.
|
||||||
|
-$(PORTBINARIES): ppm.h $(DEFPGM) $(DEFPBM) $(LIBPPM) $(LIBPGM) $(LIBPBM)
|
||||||
|
+$(PORTBINARIES): $(DEFPPM) $(DEFPGM) $(DEFPBM) $(LIBPPM) $(LIBPGM) $(LIBPBM)
|
||||||
|
$(CC) $(ALLCFLAGS) $(LDFLAGS) -o $@ $@.c $(LIBPPM) $(LIBPGM) $(LIBPBM)
|
||||||
|
|
||||||
|
# Rule for math-dependent programs.
|
||||||
|
-$(MATHBINARIES): ppm.h $(DEFPGM) $(DEFPBM) $(LIBPPM) $(LIBPGM) $(LIBPBM)
|
||||||
|
+$(MATHBINARIES): $(DEFPPM) $(DEFPGM) $(DEFPBM) $(LIBPPM) $(LIBPGM) $(LIBPBM)
|
||||||
|
$(CC) $(ALLCFLAGS) $(LDFLAGS) -o $@ $@.c -lm $(LIBPPM) $(LIBPGM) $(LIBPBM)
|
||||||
|
|
||||||
|
# Rule for objects.
|
||||||
|
-$(OBJECTS): ppm.h $(DEFPGM) $(DEFPBM)
|
||||||
|
+$(OBJECTS): $(DEFPPM) $(DEFPGM) $(DEFPBM)
|
||||||
|
$(CC) $(ALLCFLAGS) "-Dmain=$*_main" -c $*.c
|
||||||
|
|
||||||
|
# And libraries.
|
||||||
|
@@ -155,16 +158,16 @@
|
||||||
|
libppm5.o bitio.o
|
||||||
|
-ranlib $(LIBPPM)
|
||||||
|
|
||||||
|
-libppm1.o: ppm.h $(DEFPGM) $(DEFPBM) libppm.h libppm1.c
|
||||||
|
+libppm1.o: $(DEFPPM) $(DEFPGM) $(DEFPBM) libppm.h libppm1.c
|
||||||
|
$(CC) $(ALLCFLAGS) -c libppm1.c
|
||||||
|
-libppm2.o: ppm.h $(DEFPGM) $(DEFPBM) libppm.h libppm2.c $(DEFLIBPGM) \
|
||||||
|
+libppm2.o: $(DEFPPM) $(DEFPGM) $(DEFPBM) libppm.h libppm2.c $(DEFLIBPGM) \
|
||||||
|
$(DEFLIBPBM)
|
||||||
|
$(CC) $(ALLCFLAGS) -c libppm2.c
|
||||||
|
-libppm3.o: ppm.h $(DEFPGM) $(DEFPBM) ppmcmap.h libppm.h libppm3.c
|
||||||
|
+libppm3.o: $(DEFPPM) $(DEFPGM) $(DEFPBM) ppmcmap.h libppm.h libppm3.c
|
||||||
|
$(CC) $(ALLCFLAGS) -c libppm3.c
|
||||||
|
-libppm4.o: ppm.h $(DEFPGM) $(DEFPBM) libppm4.c
|
||||||
|
+libppm4.o: $(DEFPPM) $(DEFPGM) $(DEFPBM) libppm4.c
|
||||||
|
$(CC) $(ALLCFLAGS) -c libppm4.c
|
||||||
|
-libppm5.o: ppm.h $(DEFPGM) $(DEFPBM) ppmdraw.h libppm5.c
|
||||||
|
+libppm5.o: $(DEFPPM) $(DEFPGM) $(DEFPBM) ppmdraw.h libppm5.c
|
||||||
|
$(CC) $(ALLCFLAGS) -c libppm5.c
|
||||||
|
bitio.o: ../pbmplus.h bitio.c
|
||||||
|
$(CC) $(ALLCFLAGS) -c bitio.c
|
||||||
|
@@ -235,4 +238,4 @@
|
||||||
|
yuvsplittoppm yuvsplittoppm.o: yuvsplittoppm.c
|
||||||
|
|
||||||
|
clean:
|
||||||
|
- -rm -f *.o *.a *.cat *~ core $(BINARIES) ppmmerge
|
||||||
|
+ -rm -f *.o *.a *.cat *~ core *.core $(BINARIES) ppmmerge
|
11
graphics/netpbm/patches/patch-ay
Normal file
11
graphics/netpbm/patches/patch-ay
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
--- ppm/ppm.5.orig Mon Oct 4 10:12:19 1993
|
||||||
|
+++ ppm/ppm.5 Sun Jan 10 23:48:41 1999
|
||||||
|
@@ -73,7 +73,7 @@
|
||||||
|
it will automatically fall back on the slower but more general plain
|
||||||
|
format.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
-giftoppm(1), gouldtoppm(1), ilbmtoppm(1), imgtoppm(1), mtvtoppm(1),
|
||||||
|
+giftopnm(1), gouldtoppm(1), ilbmtoppm(1), imgtoppm(1), mtvtoppm(1),
|
||||||
|
pcxtoppm(1), pgmtoppm(1), pi1toppm(1), picttoppm(1), pjtoppm(1), qrttoppm(1),
|
||||||
|
rawtoppm(1), rgb3toppm(1), sldtoppm(1), spctoppm(1), sputoppm(1), tgatoppm(1),
|
||||||
|
ximtoppm(1), xpmtoppm(1), yuvtoppm(1),
|
13
graphics/netpbm/patches/patch-az
Normal file
13
graphics/netpbm/patches/patch-az
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
--- ppm/ppmmerge.c.orig Mon Jan 31 17:44:31 1994
|
||||||
|
+++ ppm/ppmmerge.c Sun Jan 10 23:48:41 1999
|
||||||
|
@@ -29,6 +29,10 @@
|
||||||
|
{
|
||||||
|
++argv;
|
||||||
|
--argc;
|
||||||
|
+ if(!*argv) {
|
||||||
|
+ fprintf(stderr, "Usage: ppmmerge ppm_program_name [args ...]\n");
|
||||||
|
+ exit(1);
|
||||||
|
+ }
|
||||||
|
goto again;
|
||||||
|
}
|
||||||
|
|
11
graphics/netpbm/patches/patch-ba
Normal file
11
graphics/netpbm/patches/patch-ba
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
--- ppm/ppmtogif.1.orig Fri Nov 12 10:18:30 1993
|
||||||
|
+++ ppm/ppmtogif.1 Sun Jan 10 23:48:41 1999
|
||||||
|
@@ -54,7 +54,7 @@
|
||||||
|
.PP
|
||||||
|
All flags can be abbreviated to their shortest unique prefix.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
-giftoppm(1), ppmquant(1), ppm(5)
|
||||||
|
+giftopnm(1), ppmquant(1), ppm(5)
|
||||||
|
.SH AUTHOR
|
||||||
|
Based on GIFENCOD by David Rowley <mgardi@watdcsu.waterloo.edu>.
|
||||||
|
Lempel-Ziv compression based on "compress".
|
11
graphics/netpbm/patches/patch-bb
Normal file
11
graphics/netpbm/patches/patch-bb
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
--- ppm/ppmtoicr.1.orig Mon Oct 4 10:12:38 1993
|
||||||
|
+++ ppm/ppmtoicr.1 Sun Jan 10 23:48:41 1999
|
||||||
|
@@ -83,7 +83,7 @@
|
||||||
|
the displayed image by a factor of 2, and
|
||||||
|
run-length encode the data:
|
||||||
|
.nf
|
||||||
|
- giftoppm giffile | ppmtoicr -w giffile -r -e 2
|
||||||
|
+ giftopnm giffile | ppmtoicr -w giffile -r -e 2
|
||||||
|
.fi
|
||||||
|
.SH BUGS
|
||||||
|
.PP
|
27
graphics/netpbm/patches/patch-bc
Normal file
27
graphics/netpbm/patches/patch-bc
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
--- ppm/ppmtoxpm.1.orig Mon Jan 31 12:49:48 1994
|
||||||
|
+++ ppm/ppmtoxpm.1 Sun Jan 10 23:48:41 1999
|
||||||
|
@@ -8,20 +8,20 @@
|
||||||
|
Produces X11 pixmap (version 3) as output which
|
||||||
|
can be loaded directly by the XPM library.
|
||||||
|
.PP
|
||||||
|
-The \fB-name\fP option allows one to specify the prefix string which is printed
|
||||||
|
+The \fB-name\f option allows one to specify the prefix string which is printed
|
||||||
|
in the resulting XPM output. If not specified, will default to the
|
||||||
|
filename (without extension) of the <ppmfile> argument.
|
||||||
|
-If \fB-name\fP is not specified and <ppmfile>
|
||||||
|
+If \fB-name\f is not specified and <ppmfile>
|
||||||
|
is not specified (i.e. piped input), the prefix string will default to
|
||||||
|
the string "noname".
|
||||||
|
.PP
|
||||||
|
-The \fB-rgb\fP option allows one to specify an X11 rgb text file for the
|
||||||
|
+The \fB-rgb\f option allows one to specify an X11 rgb text file for the
|
||||||
|
lookup of color name mnemonics. This rgb text file is typically the
|
||||||
|
/usr/lib/X11/rgb.txt of the MIT X11 distribution, but any file using the
|
||||||
|
same format may be used. When specified and
|
||||||
|
a RGB value from the ppm input matches a RGB value from the <rgb-textfile>,
|
||||||
|
then the corresponding color name mnemonic is printed in the XPM's colormap.
|
||||||
|
-If \fB-rgb\fP is not specified, or if the RGB values don't match, then the color
|
||||||
|
+If \fB-rgb\f is not specified, or if the RGB values don't match, then the color
|
||||||
|
will be printed with the #RGB, #RRGGBB, #RRRGGGBBB, or #RRRRGGGGBBBB
|
||||||
|
hexadecimal format.
|
||||||
|
.PP
|
211
graphics/netpbm/patches/patch-bd
Normal file
211
graphics/netpbm/patches/patch-bd
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
--- ppm/ppmtoxpm.c.orig Mon Jan 31 08:44:41 1994
|
||||||
|
+++ ppm/ppmtoxpm.c Sun Jan 10 23:48:41 1999
|
||||||
|
@@ -27,11 +27,25 @@
|
||||||
|
**
|
||||||
|
** - lowercase conversion of RGB names def'ed out,
|
||||||
|
** considered harmful.
|
||||||
|
+**
|
||||||
|
+** Michael Pall (pall@rz.uni-karlsruhe.de) - 29 Nov 93:
|
||||||
|
+** - Use the algorithm from xpm-lib for pixel encoding
|
||||||
|
+** (base 93 not base 28 -> saves a lot of space for colorful xpms)
|
||||||
|
*/
|
||||||
|
|
||||||
|
+#include <stdio.h>
|
||||||
|
+#include <ctype.h>
|
||||||
|
#include "ppm.h"
|
||||||
|
#include "ppmcmap.h"
|
||||||
|
|
||||||
|
+#if defined(SYSV) || defined(SVR4)
|
||||||
|
+#include <string.h>
|
||||||
|
+#ifndef index
|
||||||
|
+#define index strchr
|
||||||
|
+#endif
|
||||||
|
+#else /* SYSV */
|
||||||
|
+#include <strings.h>
|
||||||
|
+#endif /* SYSV */
|
||||||
|
|
||||||
|
/* Max number of colors allowed in ppm input. */
|
||||||
|
#define MAXCOLORS 256
|
||||||
|
@@ -39,15 +53,19 @@
|
||||||
|
/* Max number of rgb mnemonics allowed in rgb text file. */
|
||||||
|
#define MAX_RGBNAMES 1024
|
||||||
|
|
||||||
|
-/* Lower bound and upper bound of character-pixels printed in XPM output.
|
||||||
|
- Be careful, don't want the character '"' in this range. */
|
||||||
|
-/*#define LOW_CHAR '#' <-- minimum ascii character allowed */
|
||||||
|
-/*#define HIGH_CHAR '~' <-- maximum ascii character allowed */
|
||||||
|
-#define LOW_CHAR '`'
|
||||||
|
-#define HIGH_CHAR 'z'
|
||||||
|
+#define MAXPRINTABLE 92 /* number of printable ascii chars
|
||||||
|
+ * minus \ and " for string compat
|
||||||
|
+ * and ? to avoid ANSI trigraphs. */
|
||||||
|
+
|
||||||
|
+static char *printable =
|
||||||
|
+" .XoO+@#$%&*=-;:>,<1234567890qwertyuipasdfghjklzxcvbnmMNBVCZ\
|
||||||
|
+ASDFGHJKLPIUYTREWQ!~^/()_`'][{}|";
|
||||||
|
+
|
||||||
|
|
||||||
|
#define max(a,b) ((a) > (b) ? (a) : (b))
|
||||||
|
|
||||||
|
+void read_rgb_names(); /* forward reference */
|
||||||
|
+void gen_cmap(); /* forward reference */
|
||||||
|
|
||||||
|
typedef struct { /* rgb values and ascii names (from
|
||||||
|
* rgb text file) */
|
||||||
|
@@ -62,17 +80,8 @@
|
||||||
|
* mnemonic or #rgb value */
|
||||||
|
} cixel_map;
|
||||||
|
|
||||||
|
-
|
||||||
|
-/* prototypes/forward reference */
|
||||||
|
-static void read_rgb_names ARGS((char *, rgb_names *, int *));
|
||||||
|
-static char * gen_numstr ARGS((int, int, int));
|
||||||
|
-static void gen_cmap ARGS((colorhist_vector, int, pixval, int, rgb_names *, int, cixel_map *, int *));
|
||||||
|
-
|
||||||
|
-
|
||||||
|
pixel **pixels;
|
||||||
|
|
||||||
|
-
|
||||||
|
-int
|
||||||
|
main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char *argv[];
|
||||||
|
@@ -88,11 +97,11 @@
|
||||||
|
|
||||||
|
/* Used for rgb value -> rgb mnemonic mapping */
|
||||||
|
int map_rgb_names = 0;
|
||||||
|
- rgb_names *rgbn; /* rgb_names rgbn[MAX_RGBNAMES]; */
|
||||||
|
+ rgb_names rgbn[MAX_RGBNAMES];
|
||||||
|
int rgbn_max;
|
||||||
|
|
||||||
|
/* Used for rgb value -> character-pixel string mapping */
|
||||||
|
- cixel_map *cmap; /* cixel_map cmap[MAXCOLORS]; */
|
||||||
|
+ cixel_map cmap[MAXCOLORS];
|
||||||
|
int charspp; /* chars per pixel */
|
||||||
|
|
||||||
|
char out_name[100], rgb_fname[100], *cp;
|
||||||
|
@@ -188,17 +197,9 @@
|
||||||
|
* If a rgb text file was specified, read in the rgb mnemonics. Does not
|
||||||
|
* return if fatal error occurs.
|
||||||
|
*/
|
||||||
|
- rgbn = (rgb_names *) malloc(MAX_RGBNAMES * sizeof(rgb_names));
|
||||||
|
- if (rgbn == (rgb_names *) NULL)
|
||||||
|
- pm_error("out of memory");
|
||||||
|
-
|
||||||
|
if (map_rgb_names)
|
||||||
|
read_rgb_names(rgb_fname, rgbn, &rgbn_max);
|
||||||
|
|
||||||
|
- cmap = (cixel_map *)malloc(ncolors * sizeof(cixel_map));
|
||||||
|
- if (cmap == (cixel_map *) NULL)
|
||||||
|
- pm_error("out of memory");
|
||||||
|
-
|
||||||
|
/* Now generate the character-pixel colormap table. */
|
||||||
|
gen_cmap(chv, ncolors, maxval, map_rgb_names, rgbn, rgbn_max,
|
||||||
|
cmap, &charspp);
|
||||||
|
@@ -231,12 +232,12 @@
|
||||||
|
/* This routine reads a rgb text file. It stores the rgb values (0->65535)
|
||||||
|
and the rgb mnemonics (malloc'ed) into the "rgbn" array. Returns the
|
||||||
|
number of entries stored in "rgbn_max". */
|
||||||
|
-static
|
||||||
|
void
|
||||||
|
read_rgb_names(rgb_fname, rgbn, rgbn_max)
|
||||||
|
char *rgb_fname;
|
||||||
|
- rgb_names *rgbn;
|
||||||
|
- int *rgbn_max;
|
||||||
|
+ rgb_names rgbn[MAX_RGBNAMES];
|
||||||
|
+int *rgbn_max;
|
||||||
|
+
|
||||||
|
{
|
||||||
|
FILE *rgbf;
|
||||||
|
int i, items, red, green, blue;
|
||||||
|
@@ -303,16 +304,16 @@
|
||||||
|
} /* read_rgb_names */
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
-/* Given a number and a base, (base == HIGH_CHAR-LOW_CHAR+1), this routine
|
||||||
|
+/* Given a number and a base (MAXPRINTABLE), this routine
|
||||||
|
prints the number into a malloc'ed string and returns it. The length of
|
||||||
|
the string is specified by "digits". The ascii characters of the printed
|
||||||
|
- number range from LOW_CHAR to HIGH_CHAR. The string is LOW_CHAR filled,
|
||||||
|
- (e.g. if LOW_CHAR==0, HIGH_CHAR==1, digits==5, i=3, routine would return
|
||||||
|
- the malloc'ed string "00011"). */
|
||||||
|
-static
|
||||||
|
+ number range from printable[0] to printable[MAXPRINTABLE]. The string is
|
||||||
|
+ printable[0] filled, (e.g. if printable[0]==0, printable[1]==1,
|
||||||
|
+ MAXPRINTABLE==2, digits==5, i=3, routine would return the malloc'ed
|
||||||
|
+ string "00011"). */
|
||||||
|
char *
|
||||||
|
-gen_numstr(i, base, digits)
|
||||||
|
- int i, base, digits;
|
||||||
|
+gen_numstr(i, digits)
|
||||||
|
+ int i, digits;
|
||||||
|
{
|
||||||
|
char *str, *p;
|
||||||
|
int d;
|
||||||
|
@@ -325,9 +326,9 @@
|
||||||
|
p = str + digits;
|
||||||
|
*p-- = '\0'; /* nul terminate string */
|
||||||
|
while (p >= str) {
|
||||||
|
- d = i % base;
|
||||||
|
- i /= base;
|
||||||
|
- *p-- = (char) ((int) LOW_CHAR + d);
|
||||||
|
+ d = i % MAXPRINTABLE;
|
||||||
|
+ i /= MAXPRINTABLE;
|
||||||
|
+ *p-- = printable[d];
|
||||||
|
}
|
||||||
|
|
||||||
|
return str;
|
||||||
|
@@ -336,7 +337,6 @@
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
/* This routine generates the character-pixel colormap table. */
|
||||||
|
-static
|
||||||
|
void
|
||||||
|
gen_cmap(chv, ncolors, maxval, map_rgb_names, rgbn, rgbn_max,
|
||||||
|
cmap, charspp)
|
||||||
|
@@ -348,16 +348,16 @@
|
||||||
|
* == unsigned short) */
|
||||||
|
int map_rgb_names; /* == 1 if mapping rgb values to rgb
|
||||||
|
* mnemonics */
|
||||||
|
- rgb_names *rgbn; /* rgb mnemonics from rgb text file */
|
||||||
|
+ rgb_names rgbn[MAX_RGBNAMES]; /* rgb mnemonics from rgb text file */
|
||||||
|
int rgbn_max; /* number of rgb mnemonics in table */
|
||||||
|
|
||||||
|
/* output: */
|
||||||
|
-cixel_map *cmap; /* pixel strings and ascii rgb
|
||||||
|
+cixel_map cmap[MAXCOLORS]; /* pixel strings and ascii rgb
|
||||||
|
* colors */
|
||||||
|
int *charspp; /* characters per pixel */
|
||||||
|
|
||||||
|
{
|
||||||
|
- int i, j, base, cpp, mval, red, green, blue, r, g, b, matched;
|
||||||
|
+ int i, j, cpp, mval, red, green, blue, r, g, b, matched;
|
||||||
|
char *str;
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -365,9 +365,8 @@
|
||||||
|
* to be forced to link with libm.a, so using a division loop rather
|
||||||
|
* than a log function.
|
||||||
|
*/
|
||||||
|
- base = (int) HIGH_CHAR - (int) LOW_CHAR + 1;
|
||||||
|
for (cpp = 0, j = ncolors; j; cpp++)
|
||||||
|
- j /= base;
|
||||||
|
+ j /= MAXPRINTABLE;
|
||||||
|
*charspp = cpp;
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -392,10 +391,11 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The character-pixel string is simply a printed number in base
|
||||||
|
- * "base" where the digits of the number range from LOW_CHAR to
|
||||||
|
- * HIGH_CHAR and the printed length of the number is "cpp".
|
||||||
|
+ * MAXPRINTABLE where the digits of the number range from
|
||||||
|
+ * printable[0] .. printable[MAXPRINTABLE-1] and the printed length
|
||||||
|
+ * of the number is "cpp".
|
||||||
|
*/
|
||||||
|
- cmap[i].cixel = gen_numstr(i, base, cpp);
|
||||||
|
+ cmap[i].cixel = gen_numstr(i, cpp);
|
||||||
|
|
||||||
|
/* Fetch the rgb value of the current colormap entry. */
|
||||||
|
red = PPM_GETR(chv[i].color);
|
51
graphics/netpbm/patches/patch-be
Normal file
51
graphics/netpbm/patches/patch-be
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
--- ppm/xpmtoppm.c.orig Mon Jan 31 08:42:05 1994
|
||||||
|
+++ ppm/xpmtoppm.c Sun Jan 10 23:48:41 1999
|
||||||
|
@@ -30,9 +30,8 @@
|
||||||
|
|
||||||
|
#include "ppm.h"
|
||||||
|
|
||||||
|
-static void ReadXPMFile ARGS((FILE *stream, int *widthP, int *heightP,
|
||||||
|
- int *ncolorsP, int *chars_per_pixelP, pixel **colorsP, int **dataP));
|
||||||
|
-static void getline ARGS((char *line, int size, FILE *stream));
|
||||||
|
+void ReadXPMFile();
|
||||||
|
+static void getline();
|
||||||
|
|
||||||
|
/* number of xpmColorKeys */
|
||||||
|
#define NKEYS 5
|
||||||
|
@@ -46,7 +45,27 @@
|
||||||
|
"c", /* key #5: color visual */
|
||||||
|
};
|
||||||
|
|
||||||
|
-int
|
||||||
|
+#ifdef NEED_STRSTR
|
||||||
|
+/* for systems which do not provide it */
|
||||||
|
+static char *
|
||||||
|
+strstr(s1, s2)
|
||||||
|
+ char *s1, *s2;
|
||||||
|
+{
|
||||||
|
+ int ls2 = strlen(s2);
|
||||||
|
+
|
||||||
|
+ if (ls2 == 0)
|
||||||
|
+ return (s1);
|
||||||
|
+ while (strlen(s1) >= ls2) {
|
||||||
|
+ if (strncmp(s1, s2, ls2) == 0)
|
||||||
|
+ return (s1);
|
||||||
|
+ s1++;
|
||||||
|
+ }
|
||||||
|
+ return (0);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char *argv[];
|
||||||
|
@@ -89,7 +108,6 @@
|
||||||
|
|
||||||
|
#define MAX_LINE 2048
|
||||||
|
|
||||||
|
-static
|
||||||
|
void
|
||||||
|
ReadXPMFile(stream, widthP, heightP, ncolorsP,
|
||||||
|
chars_per_pixelP, colorsP, dataP)
|
@ -1,4 +1,3 @@
|
|||||||
@comment $NetBSD: PLIST,v 1.3 1997/12/31 03:34:57 hubertf Exp $
|
|
||||||
bin/anytopnm
|
bin/anytopnm
|
||||||
bin/asciitopgm
|
bin/asciitopgm
|
||||||
bin/atktopbm
|
bin/atktopbm
|
||||||
@ -89,6 +88,7 @@ bin/pnmenlarge
|
|||||||
bin/pnmfile
|
bin/pnmfile
|
||||||
bin/pnmflip
|
bin/pnmflip
|
||||||
bin/pnmgamma
|
bin/pnmgamma
|
||||||
|
bin/pnmhisteq
|
||||||
bin/pnmhistmap
|
bin/pnmhistmap
|
||||||
bin/pnmindex
|
bin/pnmindex
|
||||||
bin/pnminvert
|
bin/pnminvert
|
||||||
@ -178,6 +178,14 @@ bin/ybmtopbm
|
|||||||
bin/yuvsplittoppm
|
bin/yuvsplittoppm
|
||||||
bin/yuvtoppm
|
bin/yuvtoppm
|
||||||
bin/zeisstopnm
|
bin/zeisstopnm
|
||||||
|
include/pbm.h
|
||||||
|
include/pgm.h
|
||||||
|
include/pnm.h
|
||||||
|
include/ppm.h
|
||||||
|
lib/libpbm.a
|
||||||
|
lib/libpgm.a
|
||||||
|
lib/libpnm.a
|
||||||
|
lib/libppm.a
|
||||||
man/man1/anytopnm.1
|
man/man1/anytopnm.1
|
||||||
man/man1/asciitopgm.1
|
man/man1/asciitopgm.1
|
||||||
man/man1/atktopbm.1
|
man/man1/atktopbm.1
|
||||||
@ -268,6 +276,7 @@ man/man1/pnmenlarge.1
|
|||||||
man/man1/pnmfile.1
|
man/man1/pnmfile.1
|
||||||
man/man1/pnmflip.1
|
man/man1/pnmflip.1
|
||||||
man/man1/pnmgamma.1
|
man/man1/pnmgamma.1
|
||||||
|
man/man1/pnmhisteq.1
|
||||||
man/man1/pnmhistmap.1
|
man/man1/pnmhistmap.1
|
||||||
man/man1/pnmindex.1
|
man/man1/pnmindex.1
|
||||||
man/man1/pnminvert.1
|
man/man1/pnminvert.1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user