Date: Sat, 28 Apr 2001 15:26:40 -0400 (EDT) From: aa8vb@nc.rr.com To: FreeBSD-gnats-submit@freebsd.org Cc: aa8vb@nc.rr.com Subject: ports/26930: (NEW PORT) Virtual Terrain SDK Message-ID: <200104281926.f3SJQef09304@stealth.dummynet>
next in thread | raw e-mail | index | archive | help
>Number: 26930 >Category: ports >Synopsis: (NEW PORT) Virtual Terrain SDK >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Sat Apr 28 12:30:07 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Randall Hopper >Release: FreeBSD 4.2-RELEASE i386 >Organization: self >Environment: Stock 4.2-RELEASE >Description: Attached shar adds the Virtual Terrain Project's SDK as a port. (see http://www.vterrain.org/ for details). >How-To-Repeat: >Fix: # This is a shell archive. Save it in a file, remove anything before # this line, and then unpack it by entering "sh file". Note, it may # create directories; files and directories will be owned by you and # have default permissions. # # This archive contains: # # vterrain-sdk # vterrain-sdk/Makefile # vterrain-sdk/distinfo # vterrain-sdk/pkg-comment # vterrain-sdk/pkg-descr # vterrain-sdk/pkg-plist # vterrain-sdk/files # vterrain-sdk/files/patch-aa # vterrain-sdk/files/patch-ab # vterrain-sdk/files/patch-ac # vterrain-sdk/files/patch-ad # vterrain-sdk/files/patch-ae # echo c - vterrain-sdk mkdir -p vterrain-sdk > /dev/null 2>&1 echo x - vterrain-sdk/Makefile sed 's/^X//' >vterrain-sdk/Makefile << 'END-of-vterrain-sdk/Makefile' X# New ports collection makefile for: vterrain-sdk virtual terrain development and modeling libraries X# Date created: 27 Apr 2001 X# Whom: Randall Hopper X# X# $FreeBSD: ports/devel/libgetline/Makefile,v 1.9 2000/09/23 18:47:27 will Exp $ X# X XPORTNAME= vterrain-sdk XPORTVERSION= 010423 XCATEGORIES= graphics XMASTER_SITES= ftp://ftp.vterrain.org/pub/vterrain/dist/ \ X http://www.boost.org/libs/ XDISTFILES= TerrainSDK-${PORTVERSION}.zip \ X dir_it.zip XEXTRACT_ONLY= TerrainSDK-${PORTVERSION}.zip XUSE_ZIP= yes XEXTRACT_CMD= unzip -a X XWRKSRC= ${WRKDIR}/TerrainSDK X XMAINTAINER= aa8vb@nc.rr.com X XUSE_X_PREFIX= yes XUSE_MESA= yes XUSE_GMAKE= yes XINSTALLS_SHLIB= yes X XLIB_DEPENDS= netcdf.1:${PORTSDIR}/math/netcdf \ X shp.1:${PORTSDIR}/devel/shapelib \ X png.4:${PORTSDIR}/graphics/png \ X osg.1:${PORTSDIR}/graphics/osg \ X projection.1:${PORTSDIR}/devel/projectionlib X Xpost-extract: X cd ${WRKSRC}/vtdata && \ X unzip -aj ${DISTDIR}/dir_it.zip boost/directory.h src/directory.cpp X Xdo-install: X ${INSTALL_DATA} ${WRKSRC}/vtdata/libvtdata.so ${PREFIX}/lib/libvtdata.so.1 X ${INSTALL_DATA} ${WRKSRC}/vtlib/vtosg/libvtosg.so ${PREFIX}/lib/libvtosg.so.1 X ${LN} -sf libvtdata.so.1 ${PREFIX}/lib/libvtdata.so X ${LN} -sf libvtosg.so.1 ${PREFIX}/lib/libvtosg.so X ${MKDIR} ${PREFIX}/include/TerrainSDK X cd ${WRKSRC} && \ X find . -name '*.h' -o -name '*.inl' \ X | cpio -dumpv ${PREFIX}/include/TerrainSDK X find ${PREFIX}/include/TerrainSDK -type d | xargs chmod 755 X find ${PREFIX}/include/TerrainSDK -type f | xargs chmod 644 X X.include <bsd.port.mk> END-of-vterrain-sdk/Makefile echo x - vterrain-sdk/distinfo sed 's/^X//' >vterrain-sdk/distinfo << 'END-of-vterrain-sdk/distinfo' XMD5 (TerrainSDK-010423.zip) = e351209bf0644e72efb46ad23d5baadb XMD5 (dir_it.zip) = 3b4335de9d1bc8a9c95883d031435a79 END-of-vterrain-sdk/distinfo echo x - vterrain-sdk/pkg-comment sed 's/^X//' >vterrain-sdk/pkg-comment << 'END-of-vterrain-sdk/pkg-comment' XVirtual Terrain Project Software Developement Kit END-of-vterrain-sdk/pkg-comment echo x - vterrain-sdk/pkg-descr sed 's/^X//' >vterrain-sdk/pkg-descr << 'END-of-vterrain-sdk/pkg-descr' X VTP SDK - Virtual Terrain Project Software Development Kit X XThe goal of VTP is to foster the creation of tools for easily constructing Xany part of the real world in interactive, 3D digital form. X XThe VTP Terrain SDK contains the base libraries needed to build virtual Xterrain applications. X Xhttp://www.vterrain.org/ X END-of-vterrain-sdk/pkg-descr echo x - vterrain-sdk/pkg-plist sed 's/^X//' >vterrain-sdk/pkg-plist << 'END-of-vterrain-sdk/pkg-plist' Xinclude/TerrainSDK/vtdata/Array.h Xinclude/TerrainSDK/vtdata/Building.h Xinclude/TerrainSDK/vtdata/BuildingArray.h Xinclude/TerrainSDK/vtdata/ByteOrder.h Xinclude/TerrainSDK/vtdata/DLG.h Xinclude/TerrainSDK/vtdata/ElevationGrid.h Xinclude/TerrainSDK/vtdata/Icosa.h Xinclude/TerrainSDK/vtdata/LULC.h Xinclude/TerrainSDK/vtdata/MathTypes.h Xinclude/TerrainSDK/vtdata/Plants.h Xinclude/TerrainSDK/vtdata/Projections.h Xinclude/TerrainSDK/vtdata/RoadMap.h Xinclude/TerrainSDK/vtdata/Selectable.h Xinclude/TerrainSDK/vtdata/SOG.h Xinclude/TerrainSDK/vtdata/Triangulate.h Xinclude/TerrainSDK/vtdata/utm_cproj.h Xinclude/TerrainSDK/vtdata/vtDIB.h Xinclude/TerrainSDK/vtdata/directory.h Xinclude/TerrainSDK/vtdata/Array.inl X@dirrm include/TerrainSDK/vtdata Xinclude/TerrainSDK/vtlib/core/AreaMap.h Xinclude/TerrainSDK/vtlib/core/AttribMap.h Xinclude/TerrainSDK/vtlib/core/Base.h Xinclude/TerrainSDK/vtlib/core/BryanTerrain.h Xinclude/TerrainSDK/vtlib/core/Building3d.h Xinclude/TerrainSDK/vtlib/core/CustomTerrain.h Xinclude/TerrainSDK/vtlib/core/DynTerrain.h Xinclude/TerrainSDK/vtlib/core/Engine.h Xinclude/TerrainSDK/vtlib/core/Fences.h Xinclude/TerrainSDK/vtlib/core/FP8.h Xinclude/TerrainSDK/vtlib/core/Light.h Xinclude/TerrainSDK/vtlib/core/FrameTimer.h Xinclude/TerrainSDK/vtlib/core/HeightField.h Xinclude/TerrainSDK/vtlib/core/IntersectionEngine.h Xinclude/TerrainSDK/vtlib/core/LKTerrain.h Xinclude/TerrainSDK/vtlib/core/LocalGrid.h Xinclude/TerrainSDK/vtlib/core/LocalProjection.h Xinclude/TerrainSDK/vtlib/core/Location.h Xinclude/TerrainSDK/vtlib/core/LodGrid.h Xinclude/TerrainSDK/vtlib/core/NavEngines.h Xinclude/TerrainSDK/vtlib/core/Roads.h Xinclude/TerrainSDK/vtlib/core/SkyDome.h Xinclude/TerrainSDK/vtlib/core/Trees.h Xinclude/TerrainSDK/vtlib/core/SMTerrain.h Xinclude/TerrainSDK/vtlib/core/Terrain.h Xinclude/TerrainSDK/vtlib/core/TerrainErr.h Xinclude/TerrainSDK/vtlib/core/TerrainPatch.h Xinclude/TerrainSDK/vtlib/core/TerrainScene.h Xinclude/TerrainSDK/vtlib/core/TerrainSurface.h Xinclude/TerrainSDK/vtlib/core/TimeEngines.h Xinclude/TerrainSDK/vtlib/core/TParams.h Xinclude/TerrainSDK/vtlib/core/TVTerrain.h Xinclude/TerrainSDK/vtlib/core/vtSOG.h Xinclude/TerrainSDK/vtlib/core/vtString.h Xinclude/TerrainSDK/vtlib/core/winglue.h X@dirrm include/TerrainSDK/vtlib/core Xinclude/TerrainSDK/vtlib/vtosg/ImageOSG.h Xinclude/TerrainSDK/vtlib/vtosg/MathOSG.h Xinclude/TerrainSDK/vtlib/vtosg/MeshMat.h Xinclude/TerrainSDK/vtlib/vtosg/NodeOSG.h Xinclude/TerrainSDK/vtlib/vtosg/SceneOSG.h X@dirrm include/TerrainSDK/vtlib/vtosg Xinclude/TerrainSDK/vtlib/vtlib.h X@dirrm include/TerrainSDK/vtlib X@dirrm include/TerrainSDK Xlib/libvtdata.so Xlib/libvtdata.so.1 Xlib/libvtosg.so Xlib/libvtosg.so.1 END-of-vterrain-sdk/pkg-plist echo c - vterrain-sdk/files mkdir -p vterrain-sdk/files > /dev/null 2>&1 echo x - vterrain-sdk/files/patch-aa sed 's/^X//' >vterrain-sdk/files/patch-aa << 'END-of-vterrain-sdk/files/patch-aa' X--- Make.defs.orig Wed Apr 4 07:27:18 2001 X+++ Make.defs Fri Apr 27 20:17:26 2001 X@@ -22,21 +22,6 @@ X # SGI IRIX with GCC (tested with ver. 2.95.3-test2) X # (IRIX Folks: Read TerrainApps/README.sgi!) X #------------------------------------------------------------------------------ X-CC = gcc X-CXX = g++ X-AR = ar ruv X-COPT = -O -g X-LD = $(CXX) X-LD_SHARED = $(CXX) -shared X- X-GLUT_LIB = $(HOME)/software/Mesa-3.4.1/lib/libglut.a X-GLU_LIB = $(HOME)/software/Mesa-3.4.1/lib/libGLU.a X-LDIRFLAGS = $(LDIRS:%=-L%) \ X- -Wl,-rpath,$(subst $(space),$(colon),$(LDIRS)) X- X-#------------------------------------------------------------------------------ X-# FreeBSD with GCC (tested with ver. 2.95.2) X-#------------------------------------------------------------------------------ X ## CC = gcc X ## CXX = g++ X ## AR = ar ruv X@@ -44,11 +29,26 @@ X ## LD = $(CXX) X ## LD_SHARED = $(CXX) -shared X ## X-## GLUT_LIB = -lglut X-## GLU_LIB = -lGLU X-## EXTRA_LIBS = -lXi X+## GLUT_LIB = $(HOME)/software/Mesa-3.4.1/lib/libglut.a X+## GLU_LIB = $(HOME)/software/Mesa-3.4.1/lib/libGLU.a X ## LDIRFLAGS = $(LDIRS:%=-L%) \ X-## -rpath $(subst $(space),$(colon),$(LDIRS)) X+## -Wl,-rpath,$(subst $(space),$(colon),$(LDIRS)) X+ X+#------------------------------------------------------------------------------ X+# FreeBSD with GCC (tested with ver. 2.95.2) X+#------------------------------------------------------------------------------ X+#CC = gcc X+#CXX = g++ X+AR = ar ruv X+COPT = -O X+LD = $(CXX) X+LD_SHARED = $(CXX) -shared X+ X+GLUT_LIB = -lglut X+GLU_LIB = -lGLU X+EXTRA_LIBS = -lXi X+LDIRFLAGS = $(LDIRS:%=-L%) \ X+ -rpath $(subst $(space),$(colon),$(LDIRS)) X X #------------------------------------------------------------------------------ X # Linux with GCC (tested with ver. 2.95.3) X@@ -92,35 +92,35 @@ X VTLIB_DIR = $(TERRAIN_SDK_DIR)/vtlib X VTOSG_DIR = $(VTLIB_DIR)/vtosg X X-NETCDF_INC = $(APIS_DIR)/NetCDF/include X-NETCDF_LIB = $(APIS_DIR)/NetCDF/lib X-#NETCDF_INC = /usr/local/include X-#NETCDF_LIB = /usr/local/lib X- X-SHAPE_INC = $(APIS_DIR)/shapelib/include X-SHAPE_LIB = $(APIS_DIR)/shapelib/lib X-#SHAPE_INC = /usr/local/include X-#SHAPE_LIB = /usr/local/lib X- X-PNG_INC = $(APIS_DIR)/libpng-1.0.8/include X-PNG_LIB = $(APIS_DIR)/libpng-1.0.8/lib X-#PNG_INC = /usr/local/include X-#PNG_LIB = /usr/local/lib X- X-OSG_INC = $(VTP_ROOT)/OpenSceneGraph-0.8/include X-OSG_LIB = $(VTP_ROOT)/OpenSceneGraph-0.8/lib X-#OSG_INC = /usr/local/include X-#OSG_LIB = /usr/local/lib X- X-PROJECTION_INC = $(APIS_DIR)/ProjectionLib X-PROJECTION_LIB = $(APIS_DIR)/ProjectionLib X-#PROJECTION_INC = /usr/local/include X-#PROJECTION_LIB = /usr/local/lib X- X-BOOST_SRC = $(APIS_DIR)/boost X-BOOST_INC = $(APIS_DIR) X- X-VTDATA_INST_DIR = $(VTDATA_DIR) X-VTOSG_INST_DIR = $(VTOSG_DIR) X-#VTDATA_INST_DIR = /usr/local/lib X-#VTOSG_INST_DIR = /usr/local/lib X+#NETCDF_INC = $(APIS_DIR)/NetCDF/include X+#NETCDF_LIB = $(APIS_DIR)/NetCDF/lib X+NETCDF_INC = $(LOCALBASE)/include X+NETCDF_LIB = $(LOCALBASE)/lib X+ X+#SHAPE_INC = $(APIS_DIR)/shapelib/include X+#SHAPE_LIB = $(APIS_DIR)/shapelib/lib X+SHAPE_INC = $(LOCALBASE)/include X+SHAPE_LIB = $(LOCALBASE)/lib X+ X+#PNG_INC = $(APIS_DIR)/libpng-1.0.8/include X+#PNG_LIB = $(APIS_DIR)/libpng-1.0.8/lib X+PNG_INC = $(LOCALBASE)/include X+PNG_LIB = $(LOCALBASE)/lib X+ X+#OSG_INC = $(VTP_ROOT)/OpenSceneGraph-0.8/include X+#OSG_LIB = $(VTP_ROOT)/OpenSceneGraph-0.8/lib X+OSG_INC = $(LOCALBASE)/include X+OSG_LIB = $(LOCALBASE)/lib X+ X+#PROJECTION_INC = $(APIS_DIR)/ProjectionLib X+#PROJECTION_LIB = $(APIS_DIR)/ProjectionLib X+PROJECTION_INC = $(LOCALBASE)/include X+PROJECTION_LIB = $(LOCALBASE)/lib X+ X+BOOST_SRC = $(VTDATA_DIR) X+BOOST_INC = $(VTDATA_DIR) X+ X+#VTDATA_INST_DIR = $(VTDATA_DIR) X+#VTOSG_INST_DIR = $(VTOSG_DIR) X+VTDATA_INST_DIR = $(LOCALBASE)/lib X+VTOSG_INST_DIR = $(LOCALBASE)/lib END-of-vterrain-sdk/files/patch-aa echo x - vterrain-sdk/files/patch-ab sed 's/^X//' >vterrain-sdk/files/patch-ab << 'END-of-vterrain-sdk/files/patch-ab' X--- vtdata/directory.cpp.orig Wed Nov 11 04:06:16 1998 X+++ vtdata/directory.cpp Fri Apr 27 20:22:21 2001 X@@ -17,7 +17,7 @@ X X // -------------------------------------------------------------------------- X X-#include "boost/directory.h" X+#include "directory.h" X X #if defined(unix) || defined(__unix) || defined(__unix__) X # define BOOST_UNIX 1 X@@ -58,7 +58,7 @@ X operator++ (); X } X X- ~representation() { closedir(m_handle); } X+ ~representation() { if (m_handle) closedir(m_handle); } X X representation *reference() X { X@@ -175,6 +175,8 @@ X throw unknown_uid(it.rep->get_stat().st_uid); X return pw->pw_name; X } X+#ifdef BUGGY_CODE X+ // See directory.h for details X template <> void set<uname>(dir_it const &it, std::string name) X { X struct passwd *pw = getpwnam(name.c_str()); X@@ -183,6 +185,7 @@ X else X throw unknown_uname(name); X } X+#endif X X template <> gid_t get<gid>(dir_it const &it) { return it.rep->get_stat().st_gid; } X template <> void set<gid>(dir_it const &it, gid_t gid) { it.rep->change_group(gid); } X@@ -193,6 +196,8 @@ X throw unknown_gid(it.rep->get_stat().st_gid); X return grp->gr_name; X } X+#ifdef BUGGY_CODE X+ // See directory.h for details X template <> void set<gname>(dir_it const &it, std::string name) X { X struct group *grp = getgrnam(name.c_str()); X@@ -201,7 +206,7 @@ X else X throw unknown_gname(name); X } X- X+#endif X X template <> bool get<is_hidden>(dir_it const &it) { return (*it)[0] == '.'; } X } END-of-vterrain-sdk/files/patch-ab echo x - vterrain-sdk/files/patch-ac sed 's/^X//' >vterrain-sdk/files/patch-ac << 'END-of-vterrain-sdk/files/patch-ac' X--- vtdata/ORIG/directory.h Wed Nov 11 04:06:14 1998 X+++ vtdata/directory.h Tue Apr 3 12:33:38 2001 X@@ -24,9 +24,13 @@ X X #include <iterator> X #include <string> X-#include <ctime> X+#if defined(sgi) && !defined(__GNUG__) X+# include <time.h> X+#else X+# include <ctime> X+#endif X #include <stdexcept> X-#include <boost/boost.h> X+#define BOOST_DECL X X #if defined(unix) || defined(__unix) || defined(__unix__) X #include <sys/types.h> X@@ -40,7 +44,7 @@ X { X class dir_it; X X-#if defined(__GNUG__) X+#if defined(__GNUG__) || defined(sgi) X template <class Property> X typename Property::value_type get(dir_it const &); X template <class Property> X@@ -50,9 +54,13 @@ X template <class Property> class set; X #endif X X+#if defined(__GNUG__) X+ class BOOST_DECL dir_it: public input_iterator<std::string, ptrdiff_t> X+#else X class BOOST_DECL dir_it: public std::iterator<std::input_iterator_tag, std::string> X+#endif X { X-#if defined(__GNUG__) X+#if defined(__GNUG__) || defined(sgi) X template <class Property> X friend typename Property::value_type get(dir_it const &); X template <class Property> X@@ -90,7 +98,7 @@ X bool operator== (dir_it const &) const; X bool operator!= (dir_it const &) const; X X-#if defined(__GNUG__) X+#if defined(__GNUG__) || defined(sgi) X private: X #endif X representation *rep; X@@ -107,7 +115,7 @@ X struct user_write { typedef bool value_type; }; X struct user_execute { typedef bool value_type; }; X X-#if defined(__GNUG__) X+#if defined(__GNUG__) || defined(sgi) X template <> size::value_type get<size>(dir_it const &); X template <> mtime::value_type get<mtime>(dir_it const &); X template <> bool get<is_directory>(dir_it const &); X@@ -263,6 +271,9 @@ X template <> bool get<sticky>(dir_it const &); X template <> void set<sticky>(dir_it const &, bool); X X+#ifdef __unix__ X+ typedef mode_t umode_t; X+#endif X struct mode { typedef umode_t value_type; }; X template <> umode_t get<mode>(dir_it const &); X template <> void set<mode>(dir_it const &, umode_t); X@@ -285,19 +296,22 @@ X struct uid { typedef uid_t value_type; }; X template<> uid_t get<uid>(dir_it const &); X template<> void set<uid>(dir_it const &, uid_t); X- class unknown_uname: public invalid_argument X+ class unknown_uname: public std::invalid_argument X { X public: X- unknown_uname(string u): std::invalid_argument("unknown user name"), m_uname(u) {} X- string uname() const { return m_uname; } X+ unknown_uname(std::string u): std::invalid_argument("unknown user name"), m_uname(u) {} X+ std::string uname() const { return m_uname; } X private: X- string m_uname; X+ std::string m_uname; X }; X- struct uname { typedef string value_type; }; X- template<> string get<uname>(dir_it const &); X+ struct uname { typedef std::string value_type; }; X+ template<> std::string get<uname>(dir_it const &); X+#ifdef BUGGY_CODE X+ // This does not match the __GNUG__ set template above X template<> void set<uname>(dir_it const &, string const &); X+#endif X X- class unknown_gid: public invalid_argument X+ class unknown_gid: public std::invalid_argument X { X public: X unknown_gid(gid_t g): std::invalid_argument("unknown group ID"), m_gid(g) {} X@@ -308,17 +322,20 @@ X struct gid { typedef gid_t value_type; }; X template<> gid_t get<gid>(dir_it const &); X template<> void set<gid>(dir_it const &, gid_t); X- class unknown_gname: public invalid_argument X+ class unknown_gname: public std::invalid_argument X { X public: X- unknown_gname(string g): std::invalid_argument("unknown group name"), m_gname(g) {} X- string gname() const { return m_gname; } X+ unknown_gname(std::string g): std::invalid_argument("unknown group name"), m_gname(g) {} X+ std::string gname() const { return m_gname; } X private: X- string m_gname; X+ std::string m_gname; X }; X- struct gname { typedef string value_type; }; X- template<> string get<gname>(dir_it const &); X- template<> void set<gname>(dir_it const &, string const &); X+ struct gname { typedef std::string value_type; }; X+ template<> std::string get<gname>(dir_it const &); X+#ifdef BUGGY_CODE X+ // This does not match the __GNUG__ set template above X+ template<> void set<gname>(dir_it const &, std::string const &); X+#endif X X #endif X END-of-vterrain-sdk/files/patch-ac echo x - vterrain-sdk/files/patch-ad sed 's/^X//' >vterrain-sdk/files/patch-ad << 'END-of-vterrain-sdk/files/patch-ad' X--- vtdata/ORIG/BuildingArray.cpp Thu Apr 12 08:32:20 2001 X+++ vtdata/BuildingArray.cpp Fri Apr 27 20:20:41 2001 X@@ -10,7 +10,7 @@ X X #include <stdlib.h> X #include <string.h> X-#include "shapelib/shapefil.h" X+#include "shapefil.h" X #include "BuildingArray.h" X X void vtBuildingArray::DestructItems(int first, int last) END-of-vterrain-sdk/files/patch-ad echo x - vterrain-sdk/files/patch-ae sed 's/^X//' >vterrain-sdk/files/patch-ae << 'END-of-vterrain-sdk/files/patch-ae' X--- vtdata/ORIG/Makefile Fri Apr 20 08:49:28 2001 X+++ vtdata/Makefile Fri Apr 27 20:31:07 2001 X@@ -21,7 +21,7 @@ X CXXFLAGS = $(COPT) $(SWITCHES) $(IFLAGS) X X CSRC = $(wildcard *.c) X-CXXSRC = $(wildcard *.cpp) $(BOOST_SRC)/directory.cpp X+CXXSRC = $(wildcard *.cpp) X OBJS = $(CSRC:%.c=%.o) $(CXXSRC:%.cpp=%.o) X LIB = libvtdata.so X END-of-vterrain-sdk/files/patch-ae exit >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-ports" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200104281926.f3SJQef09304>