| 
									
										
										
										
											1999-05-13 19:37:32 +08:00
										 |  |  | 			VMS Installation instructions | 
					
						
							|  |  |  | 			written by Richard Levitte | 
					
						
							|  |  |  | 			<richard@levitte.org> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Intro: | 
					
						
							|  |  |  | ====== | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This file is divided in the following parts: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-05-17 12:21:00 +08:00
										 |  |  |   Requirements			- Mandatory reading. | 
					
						
							| 
									
										
										
										
											2000-02-27 22:03:58 +08:00
										 |  |  |   Checking the distribution	- Mandatory reading. | 
					
						
							| 
									
										
										
										
											1999-05-13 19:37:32 +08:00
										 |  |  |   Compilation			- Mandatory reading. | 
					
						
							| 
									
										
										
										
											2000-02-27 22:03:58 +08:00
										 |  |  |   Logical names			- Mandatory reading. | 
					
						
							| 
									
										
										
										
											1999-05-13 19:37:32 +08:00
										 |  |  |   Test				- Mandatory reading. | 
					
						
							|  |  |  |   Installation			- Mandatory reading. | 
					
						
							|  |  |  |   Backward portability		- Read if it's an issue. | 
					
						
							|  |  |  |   Possible bugs or quirks	- A few warnings on things that | 
					
						
							|  |  |  | 				  may go wrong or may surprise you. | 
					
						
							| 
									
										
										
										
											2000-02-27 22:03:58 +08:00
										 |  |  |   TODO				- Things that are to come. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-05-17 12:21:00 +08:00
										 |  |  | Requirements: | 
					
						
							|  |  |  | ============= | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | To build and install OpenSSL, you will need: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * DEC C or some other ANSI C compiler.  VAX C is *not* supported. | 
					
						
							|  |  |  |    [Note: OpenSSL has only been tested with DEC C.  Compiling with  | 
					
						
							|  |  |  |     a different ANSI C compiler may require some work] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-27 22:03:58 +08:00
										 |  |  | Checking the distribution: | 
					
						
							|  |  |  | ========================== | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | There have been reports of places where the distribution didn't quite get | 
					
						
							| 
									
										
										
										
											2001-09-07 14:13:40 +08:00
										 |  |  | through, for example if you've copied the tree from a NFS-mounted Unix | 
					
						
							| 
									
										
										
										
											2000-02-27 22:03:58 +08:00
										 |  |  | mount point. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The easiest way to check if everything got through as it should is to check | 
					
						
							| 
									
										
										
										
											2001-09-07 14:13:40 +08:00
										 |  |  | for one of the following files: | 
					
						
							| 
									
										
										
										
											2000-02-27 22:03:58 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	[.CRYPTO]OPENSSLCONF.H_IN | 
					
						
							|  |  |  | 	[.CRYPTO]OPENSSLCONF_H.IN | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | They should never exist both at once, but one of them should (preferably | 
					
						
							|  |  |  | the first variant).  If you can't find any of those two, something went | 
					
						
							|  |  |  | wrong. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The best way to get a correct distribution is to download the gzipped tar | 
					
						
							|  |  |  | file from ftp://ftp.openssl.org/source/, use GUNZIP to uncompress it and | 
					
						
							|  |  |  | use VMSTAR to unpack the resulting tar file. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | GUNZIP is available in many places on the net.  One of the distribution | 
					
						
							|  |  |  | points is the WKU software archive, ftp://ftp.wku.edu/vms/fileserv/ . | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | VMSTAR is also available in many places on the net.  The recommended place | 
					
						
							|  |  |  | to find information about it is http://www.free.lp.se/vmstar/ . | 
					
						
							| 
									
										
										
										
											1999-05-13 19:37:32 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-27 18:26:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-05-13 19:37:32 +08:00
										 |  |  | Compilation: | 
					
						
							|  |  |  | ============ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | I've used the very good command procedures written by Robert Byer | 
					
						
							|  |  |  | <byer@mail.all-net.net>, and just slightly modified them, making | 
					
						
							|  |  |  | them slightly more general and easier to maintain. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | You can actually compile in almost any directory separately.  Look | 
					
						
							|  |  |  | for a command procedure name xxx-LIB.COM (in the library directories) | 
					
						
							|  |  |  | or MAKExxx.COM (in the program directories) and read the comments at | 
					
						
							|  |  |  | the top to understand how to use them.  However, if you want to | 
					
						
							|  |  |  | compile all you can get, the simplest is to use MAKEVMS.COM in the top | 
					
						
							| 
									
										
										
										
											2001-09-07 14:13:40 +08:00
										 |  |  | directory.  The syntax is the following: | 
					
						
							| 
									
										
										
										
											1999-05-13 19:37:32 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   @MAKEVMS <option> <rsaref-p> <debug-p> [<compiler>] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <option> must be one of the following: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       ALL       Just build "everything". | 
					
						
							| 
									
										
										
										
											2000-02-27 18:26:35 +08:00
										 |  |  |       CONFIG    Just build the "[.CRYPTO]OPENSSLCONF.H" file. | 
					
						
							|  |  |  |       BUILDINF  Just build the "[.INCLUDE]BUILDINF.H" file. | 
					
						
							| 
									
										
										
										
											1999-05-13 19:37:32 +08:00
										 |  |  |       SOFTLINKS Just copies some files, to simulate Unix soft links. | 
					
						
							| 
									
										
										
										
											2001-09-07 14:13:40 +08:00
										 |  |  |       BUILDALL  Same as ALL, except CONFIG, BUILDINF and SOFTLINKS aren't done. | 
					
						
							| 
									
										
										
										
											1999-05-13 19:37:32 +08:00
										 |  |  |       RSAREF    Just build the "[.xxx.EXE.RSAREF]LIBRSAGLUE.OLB" library. | 
					
						
							|  |  |  |       CRYPTO    Just build the "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" library. | 
					
						
							|  |  |  |       SSL       Just build the "[.xxx.EXE.SSL]LIBSSL.OLB" library. | 
					
						
							|  |  |  |       SSL_TASK  Just build the "[.xxx.EXE.SSL]SSL_TASK.EXE" program. | 
					
						
							| 
									
										
										
										
											2000-02-27 18:26:35 +08:00
										 |  |  |       TEST      Just build the "[.xxx.EXE.TEST]" test programs for OpenSSL. | 
					
						
							|  |  |  |       APPS      Just build the "[.xxx.EXE.APPS]" application programs for OpenSSL. | 
					
						
							| 
									
										
										
										
											1999-05-13 19:37:32 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | <rsaref-p> must be one of the following: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       RSAREF    compile using the RSAREF Library | 
					
						
							|  |  |  |       NORSAREF  compile without using RSAREF | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-09-07 14:13:40 +08:00
										 |  |  | Note 0: The RSAREF library IS NO LONGER NEEDED.  The RSA patent | 
					
						
							| 
									
										
										
										
											2000-09-17 19:57:33 +08:00
										 |  |  |         expires September 20, 2000, and RSA Security chose to make | 
					
						
							|  |  |  |         the algorithm public domain two weeks before that. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note 1: If you still want to use RSAREF, the library is NOT INCLUDED | 
					
						
							|  |  |  |         and you have to download it.  RSA Security doesn't carry it | 
					
						
							|  |  |  |         any more, but there are a number of places where you can find | 
					
						
							|  |  |  |         it.  You have to get the ".tar-Z" file as the ".zip" file | 
					
						
							|  |  |  |         doesn't have the directory structure stored.  You have to | 
					
						
							|  |  |  |         extract the file into the [.RSAREF] directory as that is where | 
					
						
							|  |  |  |         the scripts will look for the files. | 
					
						
							| 
									
										
										
										
											1999-05-13 19:37:32 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Note 2: I have never done this, so I've no idea if it works or not. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <debug-p> must be one of the following: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       DEBUG     compile with debugging info (will not optimize) | 
					
						
							|  |  |  |       NODEBUG   compile without debugging info (will optimize) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <compiler> must be one of the following: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       DECC      For DEC C. | 
					
						
							|  |  |  |       GNUC      For GNU C. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | You will find the crypto library in [.xxx.EXE.CRYPTO], called LIBCRYPTO.OLB, | 
					
						
							|  |  |  | where xxx is VAX or AXP.  You will find the SSL library in [.xxx.EXE.SSL], | 
					
						
							|  |  |  | named LIBSSL.OLB, and you will find a bunch of useful programs in | 
					
						
							|  |  |  | [.xxx.EXE.APPS].  However, these shouldn't be used right off unless it's | 
					
						
							|  |  |  | just to test them.  For production use, make sure you install first, see | 
					
						
							|  |  |  | Installation below. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-27 18:26:35 +08:00
										 |  |  | Note 1: Some programs in this package require a TCP/IP library. | 
					
						
							| 
									
										
										
										
											1999-05-13 19:37:32 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Note 2: if you want to compile the crypto library only, please make sure | 
					
						
							| 
									
										
										
										
											2000-02-27 18:26:35 +08:00
										 |  |  |         you have at least done a @MAKEVMS CONFIG, a @MAKEVMS BUILDINF and | 
					
						
							|  |  |  |         a @MAKEVMS SOFTLINKS.  A lot of things will break if you don't. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Logical names: | 
					
						
							|  |  |  | ============== | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | There are a few things that can't currently be given through the command | 
					
						
							|  |  |  | line.  Instead, logical names are used. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Currently, the logical names supported are: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       OPENSSL_NO_ASM    with value YES, the assembler parts of OpenSSL will | 
					
						
							|  |  |  |                         not be used.  Instead, plain C implementations are | 
					
						
							|  |  |  |                         used.  This is good to try if something doesn't work. | 
					
						
							|  |  |  |       OPENSSL_NO_'alg'  with value YES, the corresponding crypto algorithm | 
					
						
							|  |  |  |                         will not be implemented.  Supported algorithms to | 
					
						
							| 
									
										
										
										
											2000-09-17 19:57:33 +08:00
										 |  |  |                         do this with are: RSA, DSA, DH, MD2, MD4, MD5, RIPEMD, | 
					
						
							| 
									
										
										
										
											2000-02-27 18:26:35 +08:00
										 |  |  |                         SHA, DES, MDC2, CR2, RC4, RC5, IDEA, BF, CAST, HMAC, | 
					
						
							|  |  |  |                         SSL2.  So, for example, having the logical name | 
					
						
							|  |  |  |                         OPENSSL_NO_RSA with the value YES means that the | 
					
						
							|  |  |  |                         LIBCRYPTO.OLB library will not contain an RSA | 
					
						
							|  |  |  |                         implementation. | 
					
						
							| 
									
										
										
										
											1999-05-13 19:37:32 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-05-25 06:59:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-05-13 19:37:32 +08:00
										 |  |  | Test: | 
					
						
							|  |  |  | ===== | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Testing is very simple, just do the following: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @[.TEST]TESTS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If a test fails, try with defining the logical name OPENSSL_NO_ASM (yes, | 
					
						
							|  |  |  | it's an ugly hack!) and rebuild. Please send a bug report to | 
					
						
							|  |  |  | <openssl-bugs@openssl.org>, including the output of "openssl version -a" | 
					
						
							|  |  |  | and of the failed test. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-27 18:26:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-05-13 19:37:32 +08:00
										 |  |  | Installation: | 
					
						
							|  |  |  | ============= | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Installation is easy, just do the following: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @INSTALL <root> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <root> is the directory in which everything will be installed, | 
					
						
							|  |  |  | subdirectories, libraries, header files, programs and startup command | 
					
						
							|  |  |  | procedures. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-05-25 06:59:40 +08:00
										 |  |  | N.B.: INSTALL.COM builds a new directory structure, different from | 
					
						
							|  |  |  | the directory tree where you have now build OpenSSL. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-05-13 19:37:32 +08:00
										 |  |  | In the [.VMS] subdirectory of the installation, you will find the | 
					
						
							|  |  |  | following command procedures: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   OPENSSL_STARTUP.COM | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         defines all needed logical names.  Takes one argument that | 
					
						
							|  |  |  |         tells it in what logical name table to insert the logical | 
					
						
							|  |  |  |         names.  If you insert if it SYS$MANAGER:SYSTARTUP_VMS.COM, the | 
					
						
							|  |  |  |         call should look like this:  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           @openssldev:[openssldir.VMS]OPENSSL_STARTUP "/SYSTEM" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   OPENSSL_UTILS.COM | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         sets up the symbols to the applications.  Should be called | 
					
						
							|  |  |  |         from for example SYS$MANAGER:SYLOGIN.COM  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The logical names that are set up are the following: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   SSLROOT       a dotted concealed logical name pointing at the | 
					
						
							|  |  |  |                 root directory. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-05-21 05:00:29 +08:00
										 |  |  |   SSLCERTS      Initially an empty directory, this is the default | 
					
						
							|  |  |  | 		location for certificate files. | 
					
						
							|  |  |  |   SSLMISC	Various scripts. | 
					
						
							|  |  |  |   SSLPRIVATE	Initially an empty directory, this is the default | 
					
						
							|  |  |  | 		location for private key files. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   SSLEXE        Contains the openssl binary and a few other utility | 
					
						
							|  |  |  | 		programs. | 
					
						
							|  |  |  |   SSLINCLUDE    Contains the header files needed if you want to | 
					
						
							|  |  |  | 		compile programs with libcrypto or libssl. | 
					
						
							|  |  |  |   SSLLIB        Contains the OpenSSL library files (LIBCRYPTO.OLB | 
					
						
							|  |  |  | 		and LIBSSL.OLB) themselves. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   OPENSSL	Same as SSLINCLUDE.  This is because the standard | 
					
						
							|  |  |  | 		way to include OpenSSL header files from version | 
					
						
							|  |  |  | 		0.9.3 and on is: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			#include <openssl/header.h> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		For more info on this issue, see the INSTALL. file | 
					
						
							|  |  |  | 		(the NOTE in section 4 of "Installation in Detail"). | 
					
						
							|  |  |  | 		You don't need to "deleting old header files"!!! | 
					
						
							| 
									
										
										
										
											1999-05-13 19:37:32 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-27 18:26:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-05-13 19:37:32 +08:00
										 |  |  | Backward portability: | 
					
						
							|  |  |  | ===================== | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | One great problem when you build a library is making sure it will work | 
					
						
							|  |  |  | on as many versions of VMS as possible.  Especially, code compiled on | 
					
						
							|  |  |  | OpenVMS version 7.x and above tend to be unusable in version 6.x or | 
					
						
							|  |  |  | lower, because some C library routines have changed names internally | 
					
						
							|  |  |  | (the C programmer won't usually see it, because the old name is | 
					
						
							|  |  |  | maintained through C macros).  One obvious solution is to make sure | 
					
						
							|  |  |  | you have a development machine with an old enough version of OpenVMS. | 
					
						
							|  |  |  | However, if you are stuck with a bunch of Alphas running OpenVMS version | 
					
						
							|  |  |  | 7.1, you seem to be out of luck.  Fortunately, the DEC C header files | 
					
						
							|  |  |  | are cluttered with conditionals that make some declarations and definitions | 
					
						
							|  |  |  | dependent on the OpenVMS version or the C library version, *and* you | 
					
						
							|  |  |  | can use those macros to simulate older OpenVMS or C library versions, | 
					
						
							|  |  |  | by defining the macros _VMS_V6_SOURCE, __VMS_VER and __CTRL_VER with | 
					
						
							|  |  |  | correct values.  In the compilation scripts, I've provided the possibility | 
					
						
							| 
									
										
										
										
											2000-02-04 07:23:24 +08:00
										 |  |  | for the user to influence the creation of such macros, through a bunch of | 
					
						
							| 
									
										
										
										
											1999-05-13 19:37:32 +08:00
										 |  |  | symbols, all having names starting with USER_.  Here's the list of them: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   USER_CCFLAGS		 - Used to give additional qualifiers to the | 
					
						
							|  |  |  | 			   compiler.  It can't be used to define macros | 
					
						
							|  |  |  | 			   since the scripts will do such things as well. | 
					
						
							|  |  |  | 			   To do such things, use USER_CCDEFS. | 
					
						
							|  |  |  |   USER_CCDEFS		 - Used to define macros on the command line.  The | 
					
						
							|  |  |  | 			   value of this symbol will be inserted inside a | 
					
						
							|  |  |  | 			   /DEFINE=(...). | 
					
						
							|  |  |  |   USER_CCDISABLEWARNINGS - Used to disable some warnings.  The value is | 
					
						
							|  |  |  | 			   inserted inside a /DISABLE=WARNING=(...). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | So, to maintain backward compatibility with older VMS versions, do the | 
					
						
							|  |  |  | following before you start compiling: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   $ USER_CCDEFS := _VMS_V6_SOURCE=1,__VMS_VER=60000000,__CRTL_VER=60000000 | 
					
						
							|  |  |  |   $ USER_CCDISABLEWARNINGS := PREOPTW | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The USER_CCDISABLEWARNINGS is there because otherwise, DEC C will complain | 
					
						
							|  |  |  | that those macros have been changed. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-09-07 14:13:40 +08:00
										 |  |  | Note: Currently, this is only useful for library compilation.  The | 
					
						
							| 
									
										
										
										
											1999-05-13 19:37:32 +08:00
										 |  |  |       programs will still be linked with the current version of the | 
					
						
							|  |  |  |       C library shareable image, and will thus complain if they are | 
					
						
							|  |  |  |       faced with an older version of the same C library shareable image. | 
					
						
							|  |  |  |       This will probably be fixed in a future revision of OpenSSL. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Possible bugs or quirks: | 
					
						
							|  |  |  | ======================== | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | I'm not perfectly sure all the programs will use the SSLCERTS: | 
					
						
							|  |  |  | directory by default, it may very well be that you have to give them | 
					
						
							|  |  |  | extra arguments.  Please experiment. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-05-25 06:59:40 +08:00
										 |  |  | TODO: | 
					
						
							|  |  |  | ===== | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | There are a few things that need to be worked out in the VMS version of | 
					
						
							|  |  |  | OpenSSL, still: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - Description files. ("Makefile's" :-)) | 
					
						
							|  |  |  | - Script code to link an already compiled build tree. | 
					
						
							|  |  |  | - A VMSINSTALlable version (way in the future, unless someone else hacks). | 
					
						
							|  |  |  | - shareable images (DLL for you Windows folks). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | There may be other things that I have missed and that may be desirable. | 
					
						
							|  |  |  | Please send mail to <openssl-users@openssl.org> or to me directly if you | 
					
						
							|  |  |  | have any ideas. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | -- | 
					
						
							|  |  |  | Richard Levitte <richard@levitte.org> | 
					
						
							| 
									
										
										
										
											2000-02-27 18:26:35 +08:00
										 |  |  | 2000-02-27 |