Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 24 Jun 2026 15:31:51 +0000
From:      Thierry Thomas <thierry@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: 3f229fd0f455 - main - science/minc-tools: split from science/minc2 and upgrade to 2-3-00
Message-ID:  <6a3bf867.22c94.339eadf0@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by thierry:

URL: https://cgit.FreeBSD.org/ports/commit/?id=3f229fd0f455dd56ed9bb7f2899329d835f4b2cb

commit 3f229fd0f455dd56ed9bb7f2899329d835f4b2cb
Author:     Thierry Thomas <thierry@FreeBSD.org>
AuthorDate: 2026-06-24 15:25:54 +0000
Commit:     Thierry Thomas <thierry@FreeBSD.org>
CommitDate: 2026-06-24 15:31:48 +0000

    science/minc-tools: split from science/minc2 and upgrade to 2-3-00
    
    minc2 is obsolete: this package is now split into two parts: libminc and
    minc-tools.
---
 science/minc-tools/Makefile                        | 36 +++++++++
 science/minc-tools/distinfo                        |  3 +
 .../minc-tools/files/patch-Testing_CMakeLists.txt  | 74 +++++++++++++++++++
 .../files/patch-conversion_CMakeLists.txt          | 11 +++
 .../patch-conversion_minctoecat_ecat__write.c      | 12 +++
 .../patch-conversion_minctoecat_ecat__write.h      | 14 ++++
 .../minc-tools/files/patch-progs_CMakeLists.txt    | 11 +++
 .../files/patch-progs_mincdump_mincdump.c          | 72 ++++++++++++++++++
 .../files/patch-progs_mincdump_mincdump.h          | 11 +++
 .../files/patch-progs_mincdump_vardata.c           | 11 +++
 .../files/patch-progs_mincgen_ncgentab.y           | 19 +++++
 science/minc-tools/pkg-descr                       |  7 ++
 science/minc-tools/pkg-plist                       | 85 ++++++++++++++++++++++
 13 files changed, 366 insertions(+)

diff --git a/science/minc-tools/Makefile b/science/minc-tools/Makefile
new file mode 100644
index 000000000000..ce5ca4378725
--- /dev/null
+++ b/science/minc-tools/Makefile
@@ -0,0 +1,36 @@
+PORTNAME=	minc-tools
+DISTVERSION=	2-3-00
+CATEGORIES=	science biology
+MASTER_SITES=	https://github.com/BIC-MNI/${PORTNAME}/archive/refs/tags/
+
+MAINTAINER=	ports@FreeBSD.org
+COMMENT=	Basic minc-tools from former minc repository
+WWW=		https://www.bic.mni.mcgill.ca/ServicesSoftware/MINC
+
+LICENSE=	MIT
+LICENSE_FILE=	${WRKSRC}/COPYING
+
+BUILD_DEPENDS=	nifticlib>0:science/nifticlib
+LIB_DEPENDS=	libhdf5.so:science/hdf5 \
+		libnetcdf.so:science/netcdf \
+		libminc2.so:science/libminc
+RUN_DEPENDS=	bash:shells/bash
+
+#USE_GITHUB=	yes
+#GH_ACCOUNT=	BIC-MNI
+
+USES=		bison cmake localbase perl5 shebangfix
+SHEBANG_FILES=	progs/mincview/mincview Testing/*.sh
+CMAKE_ARGS=	-DCMAKE_PREFIX_PATH=${LOCALBASE}/lib/cmake
+
+WRKSRC=		${WRKDIR}/${PORTNAME}-${PORTNAME}-${DISTVERSION}
+USE_LDCONFIG=	yes
+
+#CFLAGS+=	-Wno-error=return-type
+
+pre-patch:
+	${RM} ${WRKSRC}/progs/minccalc/gram.[ch]
+	${RM} ${WRKSRC}/progs/mincgen/ncgentab.[ch]
+	${RM} ${WRKSRC}/cmake-modules/FindHDF5.cmake
+
+.include <bsd.port.mk>
diff --git a/science/minc-tools/distinfo b/science/minc-tools/distinfo
new file mode 100644
index 000000000000..d72ed737cee5
--- /dev/null
+++ b/science/minc-tools/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1782294411
+SHA256 (minc-tools-2-3-00.tar.gz) = b505e9666706ac2e7f58febb1e5fcda24fc858b0dc7625d433d409cff33e85b4
+SIZE (minc-tools-2-3-00.tar.gz) = 3002667
diff --git a/science/minc-tools/files/patch-Testing_CMakeLists.txt b/science/minc-tools/files/patch-Testing_CMakeLists.txt
new file mode 100644
index 000000000000..ba98aede3c49
--- /dev/null
+++ b/science/minc-tools/files/patch-Testing_CMakeLists.txt
@@ -0,0 +1,74 @@
+--- Testing/CMakeLists.txt.orig	2015-09-11 19:22:24 UTC
++++ Testing/CMakeLists.txt
+@@ -1,21 +1,7 @@
+ # Fix tools tests to avoid modifications to source directory (bert).
+ # 
+ 
+-# Get path to mincstats binary.
+-GET_PROPERTY(mincstats_bin TARGET mincstats PROPERTY LOCATION)
+ 
+-# Get path to mincinfo binary.
+-GET_PROPERTY(mincinfo_bin TARGET mincinfo PROPERTY LOCATION)
+-
+-# Get path to mincextract binary
+-GET_PROPERTY(mincextract_bin TARGET mincextract PROPERTY LOCATION)
+-
+-# Get path to mincaverage binary.
+-GET_PROPERTY(mincaverage_bin TARGET mincaverage PROPERTY LOCATION)
+-
+-# Get path to mincaverage binary.
+-GET_PROPERTY(mincresample_bin TARGET mincresample PROPERTY LOCATION)
+-
+ # Copy files used by minccalc-test and other tests.
+ CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/test-zero.mnc" "${CMAKE_CURRENT_BINARY_DIR}/test-zero.mnc" COPYONLY)
+ CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/test-one.mnc" "${CMAKE_CURRENT_BINARY_DIR}/test-one.mnc" COPYONLY)
+@@ -24,11 +10,11 @@ SET_TESTS_PROPERTIES(mincinfo-test
+ 
+ ADD_TEST(mincinfo-test ${CMAKE_CURRENT_SOURCE_DIR}/mincinfo-test.pl)
+ SET_TESTS_PROPERTIES(mincinfo-test
+-  PROPERTIES ENVIRONMENT "MINCINFO_BIN=${mincinfo_bin}")
++  PROPERTIES ENVIRONMENT "MINCINFO_BIN=bin")
+ 
+ ADD_TEST(mincstats-test ${CMAKE_CURRENT_SOURCE_DIR}/mincstats-test.pl)
+ SET_TESTS_PROPERTIES(mincstats-test
+-  PROPERTIES ENVIRONMENT "MINCSTATS_BIN=${mincstats_bin}")
++  PROPERTIES ENVIRONMENT "MINCSTATS_BIN=bin")
+ 
+ # Copy files used by mincaverage-test
+ CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/mincaverage-in0.mnc" "${CMAKE_CURRENT_BINARY_DIR}/mincaverage-in0.mnc" COPYONLY)
+@@ -39,31 +25,27 @@ SET_TESTS_PROPERTIES(mincaverage-test
+ 
+ # Set its environment variables.
+ SET_TESTS_PROPERTIES(mincaverage-test
+-    PROPERTIES ENVIRONMENT "MINCAVERAGE_BIN=${mincaverage_bin};MINCSTATS_BIN=${mincstats_bin}")
++    PROPERTIES ENVIRONMENT "MINCAVERAGE_BIN=bin;MINCSTATS_BIN=bin")
+ 
+-# Get path to the binary.
+-GET_PROPERTY(minccalc_bin TARGET minccalc PROPERTY LOCATION)
+ 
+ # Add the test.
+ ADD_TEST(minccalc-test ${CMAKE_CURRENT_SOURCE_DIR}/minccalc-test.sh)
+ 
+ # Set the test's environment.
+ SET_TESTS_PROPERTIES(minccalc-test
+-    PROPERTIES ENVIRONMENT "MINCCALC_BIN=${minccalc_bin};MINCSTATS_BIN=${mincstats_bin}")
++    PROPERTIES ENVIRONMENT "MINCCALC_BIN=bin;MINCSTATS_BIN=bin")
+ 
+ # Add the test itself.
+ ADD_TEST(mincresample-test ${CMAKE_CURRENT_SOURCE_DIR}/mincresample-test.sh)
+ 
+ # Set its environment variables.
+ SET_TESTS_PROPERTIES(mincresample-test
+-    PROPERTIES ENVIRONMENT "MINCRESAMPLE_BIN=${mincresample_bin};MINCSTATS_BIN=${mincstats_bin}")
++    PROPERTIES ENVIRONMENT "MINCRESAMPLE_BIN=bin;MINCSTATS_BIN=bin")
+ 
+-# Get path to mincaverage binary.
+-GET_PROPERTY(mincreshape_bin TARGET mincreshape PROPERTY LOCATION)
+ 
+ ADD_TEST(mincreshape-test ${CMAKE_CURRENT_SOURCE_DIR}/mincreshape-test.pl)
+ 
+ SET_TESTS_PROPERTIES(mincreshape-test
+-  PROPERTIES ENVIRONMENT "MINCRESHAPE_BIN=${mincreshape_bin};MINCSTATS_BIN=${mincstats_bin};MINCINFO_BIN=${mincinfo_bin};MINCEXTRACT_BIN=${mincextract_bin}")
++  PROPERTIES ENVIRONMENT "MINCRESHAPE_BIN=bin;MINCSTATS_BIN=bin;MINCINFO_BIN=bin;MINCEXTRACT_BIN=bin")
+ 
+ #TODO: add more tests?
diff --git a/science/minc-tools/files/patch-conversion_CMakeLists.txt b/science/minc-tools/files/patch-conversion_CMakeLists.txt
new file mode 100644
index 000000000000..7af74fbc92df
--- /dev/null
+++ b/science/minc-tools/files/patch-conversion_CMakeLists.txt
@@ -0,0 +1,11 @@
+--- conversion/CMakeLists.txt.orig	2026-06-24 14:11:21 UTC
++++ conversion/CMakeLists.txt
+@@ -84,7 +84,7 @@ INSTALL(TARGETS
+    DESTINATION bin)
+ 
+ 
+-INSTALL_MAN_PAGES( ${CMAKE_INSTALL_PREFIX}/man
++INSTALL_MAN_PAGES( ${CMAKE_INSTALL_PREFIX}/share/man
+   dcm2mnc/dcm2mnc.man1
+   ecattominc/ecattominc.man1
+   micropet/upet2mnc.man1
diff --git a/science/minc-tools/files/patch-conversion_minctoecat_ecat__write.c b/science/minc-tools/files/patch-conversion_minctoecat_ecat__write.c
new file mode 100644
index 000000000000..4369323f90d8
--- /dev/null
+++ b/science/minc-tools/files/patch-conversion_minctoecat_ecat__write.c
@@ -0,0 +1,12 @@
+--- conversion/minctoecat/ecat_write.c.orig	2023-04-11 00:36:34 UTC
++++ conversion/minctoecat/ecat_write.c
+@@ -11,6 +11,9 @@
+ #define ERROR   -1
+ #define V7 70
+ 
++MatrixErrorCode matrix_errno;
++
++char matrix_errtxt[132];
+ 
+ char* dstypecode[NumDataSetTypes] =
+ 	{ "u","s","i","a","n","pm","v8","v","p8","p","i8","S","S8","N", "FS"};
diff --git a/science/minc-tools/files/patch-conversion_minctoecat_ecat__write.h b/science/minc-tools/files/patch-conversion_minctoecat_ecat__write.h
new file mode 100644
index 000000000000..902eafc23a84
--- /dev/null
+++ b/science/minc-tools/files/patch-conversion_minctoecat_ecat__write.h
@@ -0,0 +1,14 @@
+--- conversion/minctoecat/ecat_write.h.orig	2023-04-11 00:36:27 UTC
++++ conversion/minctoecat/ecat_write.h
+@@ -39,9 +39,9 @@ typedef enum {
+   BitData
+ } MatrixDataType;
+ 
+-MatrixErrorCode matrix_errno;
++extern MatrixErrorCode matrix_errno;
+ 
+-char matrix_errtxt[132];
++extern char matrix_errtxt[132];
+ 
+ typedef struct XMAIN_HEAD {
+   char magic_number[14];
diff --git a/science/minc-tools/files/patch-progs_CMakeLists.txt b/science/minc-tools/files/patch-progs_CMakeLists.txt
new file mode 100644
index 000000000000..ef0660931f29
--- /dev/null
+++ b/science/minc-tools/files/patch-progs_CMakeLists.txt
@@ -0,0 +1,11 @@
+--- progs/CMakeLists.txt.orig	2015-09-11 19:22:24 UTC
++++ progs/CMakeLists.txt
+@@ -222,7 +222,7 @@ INSTALL(PROGRAMS
+   DESTINATION bin )
+ 
+ 
+-INSTALL_MAN_PAGES( ${CMAKE_INSTALL_PREFIX}/man
++INSTALL_MAN_PAGES( ${CMAKE_INSTALL_PREFIX}/share/man
+   coordinates/voxeltoworld.man1
+   mincaverage/mincaverage.man1
+   mincblob/mincblob.man1
diff --git a/science/minc-tools/files/patch-progs_mincdump_mincdump.c b/science/minc-tools/files/patch-progs_mincdump_mincdump.c
new file mode 100644
index 000000000000..f9503b67535c
--- /dev/null
+++ b/science/minc-tools/files/patch-progs_mincdump_mincdump.c
@@ -0,0 +1,72 @@
+--- progs/mincdump/mincdump.c.orig	2015-09-11 19:22:24 UTC
++++ progs/mincdump/mincdump.c
+@@ -478,17 +478,17 @@ do_ncdump(char *path, struct fspec* specp)
+ 		/* get _FillValue attribute */
+                 old_nc_opts = ncopts;
+                 ncopts = 0;
+-                nc_status = ncattinq(ncid,varid,_FillValue,&att.type,&att.len);
++                nc_status = ncattinq(ncid,varid,NC_FillValue,&att.type,&att.len);
+                 ncopts = old_nc_opts;
+ 		if(nc_status == NC_NOERR &&
+ 		   att.type == var.type && att.len == 1) {
+ 		    if(var.type == NC_CHAR) {
+ 			char fillc;
+-			ncattget(ncid, varid, _FillValue, &fillc );
++			ncattget(ncid, varid, NC_FillValue, &fillc );
+ 			var.fillval = fillc;
+ 		    } 
+                     else {
+-			ncattget(ncid, varid, _FillValue, &var.fillval);
++			ncattget(ncid, varid, NC_FillValue, &var.fillval);
+ 		    }
+ 		} else {
+ 		    switch (var.type) {
+@@ -537,7 +537,7 @@ set_brief(struct fspec * fspecp, char *key, char *opta
+ static void
+ set_brief(struct fspec * fspecp, char *key, char *optarg)
+ {
+-    fspecp->brief_data_cmnts = true;
++    fspecp->brief_data_cmnts = my_true;
+     switch (tolower(optarg[0])) {
+     case 'c':
+         fspecp->data_lang = LANG_C;
+@@ -553,7 +553,7 @@ set_full(struct fspec * fspecp, char *key, char *optar
+ static void
+ set_full(struct fspec * fspecp, char *key, char *optarg)
+ {
+-    fspecp->full_data_cmnts = true;
++    fspecp->full_data_cmnts = my_true;
+     switch (tolower(optarg[0])) {
+     case 'c':
+         fspecp->data_lang = LANG_C;
+@@ -672,10 +672,10 @@ main(int argc, char *argv[])
+     static struct fspec fspec =	/* defaults, overridden on command line */
+       {
+ 	  0,			/* construct netcdf name from file name */
+-	  false,		/* print header info only, no data? */
+-	  false,		/* just print coord vars? */
+-	  false,		/* brief  comments in data section? */
+-	  false,		/* full annotations in data section?  */
++	  my_false,		/* print header info only, no data? */
++	  my_false,		/* just print coord vars? */
++	  my_false,		/* brief  comments in data section? */
++	  my_false,		/* full annotations in data section?  */
+ 	  LANG_C,		/* language conventions for indices */
+ 	  0,			/* if -v specified, number of variables */
+ 	  0			/* if -v specified, list of variable names */
+@@ -685,13 +685,13 @@ main(int argc, char *argv[])
+     static ArgvInfo argTable[] = {
+         {"-b", ARGV_FUNC, (char *) set_brief, (char *) &fspec,
+          "Brief annotations for C or Fortran indices in data" },
+-        {"-c", ARGV_CONSTANT, (char *) true, (char *) &fspec.coord_vals,
++        {"-c", ARGV_CONSTANT, (char *) my_true, (char *) &fspec.coord_vals,
+          "Coordinate variable data and header information" },
+         {"-d", ARGV_FUNC, (char *) set_sigdigs, (char *) NULL,
+          "Obsolete option for setting significant digits" },
+         {"-f", ARGV_FUNC, (char *) set_full, (char *) &fspec,
+          "Full annotations for C or Fortran indices in data" },
+-        {"-h", ARGV_CONSTANT, (char *) true, (char *) &fspec.header_only, 
++        {"-h", ARGV_CONSTANT, (char *) my_true, (char *) &fspec.header_only, 
+          "Header information only, no data" }, 
+         {"-l", ARGV_INT, (char *) 1, (char *) &max_len, 
+          "Line length maximum in data section" },
diff --git a/science/minc-tools/files/patch-progs_mincdump_mincdump.h b/science/minc-tools/files/patch-progs_mincdump_mincdump.h
new file mode 100644
index 000000000000..ee9704df9d93
--- /dev/null
+++ b/science/minc-tools/files/patch-progs_mincdump_mincdump.h
@@ -0,0 +1,11 @@
+--- progs/mincdump/mincdump.h.orig	2012-09-24 17:35:36 UTC
++++ progs/mincdump/mincdump.h
+@@ -15,7 +15,7 @@
+ #define  Printf  (void) printf
+ 
+ typedef int boolean;
+-enum {false=0, true=1};
++enum {my_false=0, my_true=1};
+ 
+ struct ncdim {			/* dimension */
+     char name[NC_MAX_NAME];
diff --git a/science/minc-tools/files/patch-progs_mincdump_vardata.c b/science/minc-tools/files/patch-progs_mincdump_vardata.c
new file mode 100644
index 000000000000..b22617aa7391
--- /dev/null
+++ b/science/minc-tools/files/patch-progs_mincdump_vardata.c
@@ -0,0 +1,11 @@
+--- progs/mincdump/vardata.c.orig	2012-09-24 17:35:36 UTC
++++ progs/mincdump/vardata.c
+@@ -775,7 +775,7 @@ vardata(
+ 
+ 	if (vrank > 0) {
+ 	    corsav = cor[vrank-1];
+-	    if (fsp->brief_data_cmnts != false
++	    if (fsp->brief_data_cmnts != my_false
+ 		&& vrank > 1
+ 		&& left > 0) {	/* print brief comment with indices range */
+ 		Printf("// %s(",vp->name);
diff --git a/science/minc-tools/files/patch-progs_mincgen_ncgentab.y b/science/minc-tools/files/patch-progs_mincgen_ncgentab.y
new file mode 100644
index 000000000000..7b52dccc11d2
--- /dev/null
+++ b/science/minc-tools/files/patch-progs_mincgen_ncgentab.y
@@ -0,0 +1,19 @@
+--- progs/mincgen/ncgentab.y.orig	2015-09-11 19:22:24 UTC
++++ progs/mincgen/ncgentab.y
+@@ -275,14 +275,14 @@ attdecl:        att
+ 		       /* shrink space down to what was really needed */
+ 		       att_space = erealloc(att_space, valnum*nctypesize(valtype));
+ 		       atts[natts].val = att_space;
+-		       if (STREQ(atts[natts].name, _FillValue) &&
++		       if (STREQ(atts[natts].name, NC_FillValue) &&
+ 			   atts[natts].var != NC_GLOBAL) {
+ 			   nc_putfill(atts[natts].type,
+ 				       atts[natts].val,
+ 				       &vars[atts[natts].var].fill_value);
+ 			   if(atts[natts].type != vars[atts[natts].var].type) {
+ 			       derror("variable %s: %s type mismatch",
+-				      vars[atts[natts].var].name, _FillValue);
++				      vars[atts[natts].var].name, NC_FillValue);
+ 			   }
+ 		       }
+ 		       natts++;
diff --git a/science/minc-tools/pkg-descr b/science/minc-tools/pkg-descr
new file mode 100644
index 000000000000..7c23a89b11bb
--- /dev/null
+++ b/science/minc-tools/pkg-descr
@@ -0,0 +1,7 @@
+MINC - Medical Image NetCDF or MINC isn't netCDF.
+
+This metaproject bundles multiple MINC-based packages that historically have
+been developed somewhat independently.
+
+Note: previously, this port was science/mint2, but it is now split into two
+parts: libminc and minc-tools.
diff --git a/science/minc-tools/pkg-plist b/science/minc-tools/pkg-plist
new file mode 100644
index 000000000000..636d162edb9c
--- /dev/null
+++ b/science/minc-tools/pkg-plist
@@ -0,0 +1,85 @@
+bin/dcm2mnc
+bin/ecattominc
+bin/invert_raw_image
+bin/minc_modify_header
+bin/mincaverage
+bin/mincblob
+bin/minccalc
+bin/minccmp
+bin/mincconcat
+bin/mincconvert
+bin/minccopy
+bin/mincdiff
+bin/mincdump
+bin/mincedit
+bin/mincexpand
+bin/mincextract
+bin/mincgen
+bin/mincheader
+bin/minchistory
+bin/mincinfo
+bin/minclookup
+bin/mincmakescalar
+bin/mincmakevector
+bin/mincmath
+bin/mincmorph
+bin/mincpik
+bin/mincresample
+bin/mincreshape
+bin/mincsample
+bin/mincstats
+bin/minctoecat
+bin/minctoraw
+bin/mincview
+bin/mincwindow
+bin/mnc2nii
+bin/nii2mnc
+bin/rawtominc
+bin/transformtags
+bin/upet2mnc
+bin/voxeltoworld
+bin/worldtovoxel
+bin/xfmconcat
+bin/xfminvert
+share/man/man1/dcm2mnc.1.gz
+share/man/man1/ecattominc.1.gz
+share/man/man1/invert_raw_image.1.gz
+share/man/man1/minc_modify_header.1.gz
+share/man/man1/mincaverage.1.gz
+share/man/man1/mincblob.1.gz
+share/man/man1/minccalc.1.gz
+share/man/man1/minccmp.1.gz
+share/man/man1/mincconcat.1.gz
+share/man/man1/mincconvert.1.gz
+share/man/man1/minccopy.1.gz
+share/man/man1/mincdiff.1.gz
+share/man/man1/mincdump.1.gz
+share/man/man1/mincedit.1.gz
+share/man/man1/mincexpand.1.gz
+share/man/man1/mincextract.1.gz
+share/man/man1/mincgen.1.gz
+share/man/man1/mincheader.1.gz
+share/man/man1/mincinfo.1.gz
+share/man/man1/minclookup.1.gz
+share/man/man1/mincmakescalar.1.gz
+share/man/man1/mincmakevector.1.gz
+share/man/man1/mincmath.1.gz
+share/man/man1/mincresample.1.gz
+share/man/man1/mincreshape.1.gz
+share/man/man1/mincsample.1.gz
+share/man/man1/mincstats.1.gz
+share/man/man1/minctoecat.1.gz
+share/man/man1/minctoraw.1.gz
+share/man/man1/mincview.1.gz
+share/man/man1/mincwindow.1.gz
+share/man/man1/mnc2nii.1.gz
+share/man/man1/nii2mnc.1.gz
+share/man/man1/rawtominc.1.gz
+share/man/man1/transformtags.1.gz
+share/man/man1/upet2mnc.1.gz
+share/man/man1/vff2mnc.1.gz
+share/man/man1/voxeltoworld.1.gz
+share/man/man1/xfm2def.1.gz
+share/man/man1/xfmconcat.1.gz
+share/man/man1/xfmflip.1.gz
+share/man/man1/xfminvert.1.gz


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a3bf867.22c94.339eadf0>