|
From: | Don's Email |
Subject: | Re: CONS on OpenVMS |
Date: | Fri, 11 May 2001 11:29:50 -0700 |
Steven,
Thanks for the added input into my OpenVMS installation endeavor. At the risk of hogging the discuss group bandwidth I've included dumps of my Config environment, as well as, a dump of my debug session showing the recursion error. It appears that the mkdir is called in an infinite loop due to the values in $self->{dir}. I don't really know why this simple example would even be calling mkdir, since it is only one directory and it already exists. Sincerely, Donald G Plugge *** %Config information from my local perl libpth = /sys$share /sys$library dlsrc = dl_vms.c archname = VMS_AXP osvers = V6.2 prefix = perl_root installprivlib = perl_root:[lib] installarchlib = perl_root:[lib.VMS_AXP.5_005] cc = CC/DECC ccflags = /Include=[]/Standard=Relaxed_ANSI/Prefix=All/Obj=.obj/NoList so = exe osname = VMS archlibexp = perl_root:[lib.VMS_AXP.5_005] archname = VMS_AXP sig_name = ZERO HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM ABRT USR1 USR2",0 sig_num = 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,16,17,0 privlibexp = perl_root:[lib] libs = extensions = Fcntl Errno IO Opcode Dumper attrs re Stdio DCLsym B SDBM_File POSIX CONFIG = true PATCHLEVEL = 5 SUBVERSION = 0 alignbytes = 8 ar = arch = VMS_AXP archlib = perl_root:[lib.VMS_AXP.] baserev = 5.0 bin = /perl_root/000000 binexp = perl_root:[000000] binexp = perl_root:[000000] builddir = perl_root:[000000] byteorder = 1234 castflags = 0 cccdlflags = ccdlflags = cf_by = unknown cf_email = address@hidden cf_time = Fri nov 20 08:14:07.30 1998 cpp_stuff = 42 cppminus = cppstdin = CC/DECC/noobj/preprocess=sys$output sys$input d_Gconvert = my_gconvert(x,n,t,b) d_alarm = define d_archlib = define d_attribut = d_bcmp = d_bcopy = d_bincompat3 = d_bsdgetpgrp = d_bsdpgrp = d_bsdsetpgrp = d_bzero = d_casti32 = define d_castneg = define d_charvspr = d_chown = define d_chroot = d_chsize = d_const = define d_crypt = define d_csh = d_cuserid = define d_dbl_dig = define d_difftime = define d_dirnamlen = define d_dlerror = d_dlsymun = d_dosuid = d_dup2 = define d_endgrent = define d_endhent = define d_endnent = d_endpent = d_endpwent = define d_endsent = d_eofnblk = d_eunice = d_fchmod = d_fchown = d_fcntl = d_fgetpos = define d_flexfnam = define d_flock = d_fork = d_fpathconf = d_fsetpos = define d_getgrent = define d_getgrps = d_gethbyaddr = define d_gethbyname = define d_gethent = d_gethent = d_gethostprotos = define d_getlogin = define d_getnbyaddr = define d_getnbyname = define d_getnent = d_getnetprotos = define d_getpbyname = define d_getpbynumber = define d_getpent = define d_getpgid = d_getpgrp2 = d_getpgrp = d_getppid = d_getprior = d_getprotoprotos = define d_getpwent = define d_getsbyname = define d_getsbyport = define d_getsent = d_getsent = d_getservprotos = define d_gettimeod = d_gnulibc = d_grpasswd = d_htonl = define d_index = d_inetaton = d_isascii = define d_killpg = d_lchown = d_link = d_locconv = define d_lockf = d_longdbl = define d_longlong = define d_lstat = d_mblen = define d_mbstowcs = define d_mbtowc = define d_memcmp = define d_memcpy = define d_memmove = define d_memset = define d_mkdir = define d_mkfifo = d_mknod = d_mkstemp = d_mktime = define d_msg = d_mymalloc = d_nice = define d_oldarchlib = define d_oldpthreads = d_open3 = define d_pathconf = d_pause = define d_pipe = define d_poll = d_pthread_yield = d_pthreads_created_joinable = d_pwage = d_pwchange = d_pwclass = d_pwcomment = define d_pwexpire = d_pwgecos = define d_pwpasswd = define d_pwquota = d_readdir = define d_readlink = d_rename = define d_rewinddir = define d_rmdir = define d_safebcpy = d_safemcpy = define d_sanemcmp = define d_sched_yield = d_seekdir = define d_select = define d_sem = d_semctl_semid_ds = d_semctl_semun = d_setegid = d_seteuid = d_setgrent = d_setgrps = d_sethent = d_sethent = d_setlinebuf = d_setlocale = define d_setnent = d_setpent = d_setpgid = d_setpgrp2 = d_setpgrp = d_setprior = d_setpwent = define d_setregid = d_setresgid = d_setresuid = d_setreuid = d_setrgid = d_setruid = d_setsent = d_setsid = d_setvbuf = define d_sfio = d_shm = d_shmatprototype = d_sigaction = d_sigsetjmp = d_socket = define d_sockpair = d_statblks = d_stdio_cnt_lval = define d_stdio_ptr_lval = define d_stdiobase = define d_stdstdio = define d_strchr = define d_strcoll = define d_strctcpy = define d_strerrm = strerror((e),vaxc$errno) d_strerror = define d_strtod = define d_strtol = define d_strtoul = define d_strxfrm = define d_suidsafe = d_symlink = d_syscall = d_sysconf = d_syserrlst = d_system = define d_tcgetpgrp = d_tcsetpgrp = d_telldir = define d_times = define d_truncate = d_tzname = d_umask = define d_uname = d_union_semun = d_unlink_all_versions = d_vfork = define d_vms_do_sockets = define d_void_closedir = define d_volatile = define d_vprintf = define d_wait4 = d_waitpid = define d_wcstombs = define d_wctomb = define db_hashtype = db_prefixtype = defvoidused = 15 devtype = dev_t direntrytype = struct dirent dlext = exe dlobj = dl_vms.obj doublesize = 8 eagain = ebcdic = eunicefix = : exe_ext = .exe fpostype = fpos_t freetype = void full_csh = full_sed = _NLA0: gidtype = gid_t hint = none hintfile = i_arpainet = i_dbm = i_dirent = i_dlfcn = i_fcntl = define i_float = define i_grp = i_limits = define i_locale = define i_math = define i_memory = i_ndbm = i_netdb = i_neterrno = define i_niin = define i_pwd = i_rpcsvcdbm = i_sfio = i_sgtty = i_stdarg = define i_stddef = define i_stdlib = define i_string = define i_sysdir = i_sysfile = define i_sysioctl = i_sysndir = i_sysparam = i_sysresrc = i_sysselct = i_sysstat = define i_systime = i_systimek = i_systimes = i_systypes = define i_sysun = i_syswait = i_termio = i_termios = i_time = define i_unistd = define i_utime = i_values = i_varargs = i_vfork = installbin = perl_root:[000000] installman1dir = perl_root:[man.man1] installman3dir = perl_root:[man.man3] installscript = perl_root:[000000] installsitearch = perl_root:[lib.site_perl.VMS_AXP] installsitelib = perl_root:[lib.site_perl] intsize = 4 ld = Link lddlflags = /Share ldflags = /NoTrace/NoMap lib_ext = .olb libc = (DECCRTL) longdblsize = 16 longlongsize = 8 longsize = 4 lseektype = int mab = malloctype = void * man1ext = rno man3ext = rno modetype = unsigned int mydomain = .nci.nih.gov myhostname = fafnir myuname = VMS fafnir V6.2 DEC 3000 Model 400 netdb_hlen_type = int netdb_host_type = char * netdb_name_type = char * netdb_net_type = long o_nonblock = obj_ext = .obj oldarchlib = perl_root:[lib.VMS_AXP] oldarchlibexp = perl_root:[lib.VMS_AXP] package = perl5 pager = most path_sep = | perladmin = address@hidden pidtype = unsigned int privlib = perl_root:[lib] prototype = define ptrsize = 4 randbits = 31 ranlib = rd_nodata = selecttype = fd_set * sh = MCR shortsize = 2 shrplib = define sig_name_init = "ZERO","HUP","INT","QUIT","ILL","TRAP","IOT","EMT","FPE","KILL","BUS","SEGV" ,"SYS","PIPE","ALRM","TERM","ABRT","USR1","USR2",0 signal_t = void sitearch = perl_root:[lib.site_perl.VMS_AXP] sitearchexp = perl_root:[lib.site_perl.VMS_AXP] sitelib = perl_root:[lib.site_perl] sitelibexp = perl_root:[lib.site_perl] sizetype = size_t spitshell = write sys$output ssizetype = int startperl = $ perl 'f$env("procedure")' 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8' ! $ exit++ + ++$status != 0 and $exit = $status = undef; stdchar = char stdio_base = ((*fp)->_base) stdio_bufsiz = ((*fp)->_cnt + (*fp)->_ptr - (*fp)->_base) stdio_cnt = ((*fp)->_cnt) stdio_ptr = ((*fp)->_ptr) timetype = time_t uidtype = unsigned int usedl = define usemymalloc = N useperlio = useposix = false usethreads = usevfork = true vms_cc_type = decc voidflags = 15 *** perl compiled on OpenVMS 6.2, although I know run 7.2-1 of OpenVMS. This is perl, version 5.005_02 built for VMS_AXP Copyright 1987-1998, Larry Wall Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5.0 source kit. Complete documentation for Perl, including FAQ lists, should be found on this system using `man perl' or `perldoc perl'. If you have access to the Internet, point your browser at http://www.perl.com/, the Perl Home Page. *** running the construct. file in debug mode then examining the $tgt variable Swifty> perl -d cons. hello.exe Loading DB routines from perl5db.pl version 1.0401 Emacs support available. Enter h or `h h' for help. main::(cons.:20): $ver_num = "2.1"; DB<1> DB<1> DB<1> DB<1> DB<1> DB<1> DB<1> n main::(cons.:21): $ver_rev = ".2"; DB<1> main::(cons.:22): $version = sprintf "This is Cons %s%s " . main::(cons.:23): '($Id: cons.pl,v 1.103 2000/09/10 04:59:21 k night Exp $)'. "\n", main::(cons.:24): $ver_num, $ver_rev; DB<1> main::(cons.:44): require 5.002; DB<1> main::(cons.:91): $| = 1; DB<1> main::(cons.:94): srand(time . $$); # this works better than time ^ $$ in perlfunc manpage. DB<1> main::(cons.:96): $usage = q( main::(cons.:97): Usage: cons <arguments> -- <construct-args> DB<1> main::(cons.:184): my ($vol, $dir, $file) = File::Spec->splitpath($0); DB<1> main::(cons.:184): my ($vol, $dir, $file) = File::Spec->splitpath($0); DB<1> main::(cons.:185): $0 = $file; DB<1> main::(cons.:189): $param::topfile = 'Construct'; # Top-level construction file. DB<1> main::(cons.:190): $param::install = 1; # Show installations DB<1> main::(cons.:191): $param::build = 1; # Build targets DB<1> main::(cons.:193): $param::sigpro = 'md5'; # Signature protocol. DB<1> main::(cons.:194): $param::depfile = ''; # Write all deps out to this file DB<1> main::(cons.:195): $param::salt = ''; # Salt derived file sign atures with this. DB<1> main::(cons.:196): $param::rep_sig_times_ok = 1; # Repository .consign ti mes are in sync DB<1> main::(cons.:198): $param::conscript_chdir = 0; # Change dir to Conscrip t directory DB<1> main::(cons.:199): $param::quiet = 0; # should we show the com mand being executed. DB<1> main::(cons.:202): $indent = ''; DB<1> main::(cons.:214): @param::defaults = ( main::(cons.:215): 'SUFEXE' => $_exe, # '' on UNIX systems main::(cons.:216): 'SUFLIB' => $_a, # '.a' on UNIX systems main::(cons.:217): 'SUFLIBS' => "$_so:$_a", # '.so:.a' on UNIX main::(cons.:218): 'SUFOBJ' => $_o, # '.o' on UNIX systems main::(cons.:219): 'SUFMAP' => { main::(cons.:220): '.c' => 'build::command::cc', main::(cons.:221): '.s' => 'build::command::cc', main::(cons.:222): '.S' => 'build::command::cc', main::(cons.:223): '.C' => 'build::command::cxx', main::(cons.:224): '.cc' => 'build::command::cxx', main::(cons.:225): '.cxx'=> 'build::command::cxx', main::(cons.:226): '.cpp'=> 'build::command::cxx', main::(cons.:227): '.c++'=> 'build::command::cxx', main::(cons.:228): '.C++'=> 'build::command::cxx', DB<1> main::(cons.:232): if ($_WIN32) { DB<1> main::(cons.:260): my @unix = ( main::(cons.:261): 'CC' => 'cc', main::(cons.:262): 'CFLAGS' => '', main::(cons.:263): 'CCCOM' => '%CC %CFLAGS %_IFLAGS -c %< -o %>', main::(cons.:264): 'CXX' => '%CC', main::(cons.:265): 'CXXFLAGS' => '%CFLAGS', main::(cons.:266): 'CXXCOM' => '%CXX %CXXFLAGS %_IFLAGS -c %< -o %>', main::(cons.:267): 'INCDIRPREFIX' => '-I', main::(cons.:268): 'LINK' => '%CXX', main::(cons.:269): 'LINKCOM' => '%LINK %LDFLAGS -o %> %< %_L DIRS %LIBS', main::(cons.:270): 'LINKMODULECOM' => '%LD -r -o %> %<', main::(cons.:271): 'LIBDIRPREFIX' => '-L', main::(cons.:272): 'AR' => 'ar', main::(cons.:273): 'ARFLAGS' => 'r', # rs? main::(cons.:274): 'ARCOM' => "%AR %ARFLAGS %> %<\n%RANLIB %>", main::(cons.:275): 'RANLIB' => 'ranlib', main::(cons.:276): 'AS' => 'as', main::(cons.:277): 'ASFLAGS' => '', main::(cons.:278): 'ASCOM' => '%AS %ASFLAGS %< -o %>', main::(cons.:279): 'LD' => 'ld', main::(cons.:280): 'LDFLAGS' => '', main::(cons.:281): 'PREFLIB' => 'lib', main::(cons.:282): 'ENV' => { 'PATH' => '/bin:/usr/bin' }, main::(cons.:283): ); DB<1> main::(cons.:284): push(@param::defaults, @unix); DB<1> main::(cons.:288): while (@ARGV) { DB<1> main::(cons.:289): $_ = shift @ARGV; DB<1> main::(cons.:290): last if /^--$/; # Argument passing to Co nstruct. DB<1> main::(cons.:291): &option, next if s/^-//; DB<1> main::(cons.:292): push (@param::include, $_), next if s/^\+//; DB<1> main::(cons.:293): &equate, next if /=/; DB<1> main::(cons.:294): push (@targets, $_), next; DB<1> main::(cons.:365): 'sig'->select($param::sigpro); DB<1> main::(cons.:377): }; DB<1> main::(cons.:386): }; DB<1> main::(cons.:388): if ($param::depfile) { DB<1> main::(cons.:396): my ($vol, $dir, $file) = File::Spec->splitpath($para m::topfile); DB<1> main::(cons.:396): my ($vol, $dir, $file) = File::Spec->splitpath($para m::topfile); DB<1> main::(cons.:397): if ($vol || $dir) { DB<1> main::(cons.:405): my $target_top; DB<1> main::(cons.:406): if ($param::traverse) { DB<1> main::(cons.:422): dir::init(); DB<1> override::(cons.:426): if ($param::overfile) { DB<1> main::(cons.:450): my $re; DB<1> main::(cons.:451): for $re (@param::include) { DB<1> main::(cons.:460): doscripts($param::topfile); DB<1> main::(cons.:464): %priority = main::(cons.:465): ('none' => 1, 'handled' => 2, 'built' => 3, 'unknown ' => 4, 'errors' => 5); DB<1> main::(cons.:468): @targets = @param::default_targets if ! @targets; DB<1> main::(cons.:470): $errors = 0; DB<1> main::(cons.:473): my $tgt; DB<1> main::(cons.:474): for $tgt (map($dir::top->lookup($_), @targets)) { DB<1> main::(cons.:475): if ($target_top && ! $tgt->is_under($target_top)) { DB<1> x $tgt 0 file=HASH(0x558dfc) 'builder' => build::command::link=HASH(0x558e8c) 'com' => 'LINK' 'comsig' => 'LINK' 'env' => cons=HASH(0x5493ac) 'AR' => 'ar' 'ARCOM' => '%AR %ARFLAGS %> %< %RANLIB %>' 'ARFLAGS' => 'r' 'AS' => 'as' 'ASCOM' => '%AS %ASFLAGS %< -o %>' 'ASFLAGS' => '' 'CC' => 'CC' 'CCCOM' => '%CC /STAND=VAXC /OBJ=.OBJ' 'CFLAGS' => '' 'CXX' => '%CC' 'CXXCOM' => '%CXX %CXXFLAGS %_IFLAGS -c %< -o %>' 'CXXFLAGS' => '%CFLAGS' 'ENV' => HASH(0x545070) 'PATH' => '/bin:/usr/bin' 'INCDIRPREFIX' => '-I' 'LD' => 'ld' 'LDFLAGS' => '' 'LIBDIRPREFIX' => '-L' 'LINK' => 'LINK' 'LINKCOM' => '%LINK' 'LINKMODULECOM' => '%LD -r -o %> %<' 'PREFLIB' => 'lib' 'RANLIB' => 'ranlib' 'SUFEXE' => '.exe' 'SUFLIB' => '.olb' 'SUFLIBS' => '.exe:.olb' 'SUFMAP' => HASH(0x545190) '.C' => 'build::command::cxx' '.C++' => 'build::command::cxx' '.S' => 'build::command::cc' '.c' => 'build::command::cc' '.c++' => 'build::command::cxx' '.cc' => 'build::command::cxx' '.cpp' => 'build::command::cxx' '.cxx' => 'build::command::cxx' '.s' => 'build::command::cc' 'SUFOBJ' => '.obj' '_IFLAGS' => '%(%)' '_LDIRS' => '%(%)' '_cc' => build::command::cc=HASH(0x55a69c) 'com' => 'CC /STAND=VAXC /OBJ=.OBJ' 'comsig' => 'CC /STAND=VAXC /OBJ=.OBJ' 'env' => cons=HASH(0x5493ac) -> REUSED_ADDRESS 'includes' => '' 'scanner' => scan::cpp=HASH(0x55a6a8) 'path' => ARRAY(0x4033fc) empty array '_cwd' => dir=HASH(0x5492f8) 'dir' => HASH(0x5492d4) 'member' => HASH(0x5492ec) '$1$DIA5:[LSW.CONS.CONS-2_1_2]' => dir=HASH(0x5492f8) -> REUSED_ADDRESS 'entry' => '$1$DIA5:[LSW.CONS.CONS-2_1_2]' 'member' => HASH(0x54931c) '.' => dir=HASH(0x5492f8) -> REUSED_ADDRESS '..' => HASH(0x5492d4) -> REUSED_ADDRESS 'Construct' => file=HASH(0x549364) 'dir' => dir=HASH(0x5492f8) -> REUSED_ADDRESS 'entry' => 'Construct' 'rsrcpath' => 'Construct' 'hello.c' => file=HASH(0x558e68) 'creator' => ARRAY(0x558fd0) 0 'script' 1 'Construct' 2 8 3 'cons::Objects' 4 1 5 0 'dir' => dir=HASH(0x5492f8) -> REUSED_ADDRESS 'entry' => 'hello.c' 'hello.exe' => file=HASH(0x558dfc) -> REUSED_ADDRESS 'hello.obj' => file=HASH(0x558de4) 'builder' => build::command::cc=HASH(0x55a69c) -> REUSED_ADDRESS 'creator' => ARRAY(0x558eec) 0 'script' 1 'Construct' 2 7 3 'cons::Program' 4 1 5 undef 'dep' => ARRAY(0x328300) empty array 'dir' => dir=HASH(0x5492f8) -> REUSED_ADDRESS 'entry' => 'hello.obj' 'sources' => ARRAY(0x55c534) 0 file=HASH(0x558e68) -> REUSED_ADDRESS 'path' => '.' 'prefix' => '' 'srcdir' => dir=HASH(0x5492f8) -> REUSED_ADDRESS 'srcpath' => '.' 'srcprefix' => '' '_envcopy' => ARRAY(0x55906c) 0 'ARFLAGS' 1 'r' 2 'CXXFLAGS' 3 '%CFLAGS' 4 'ASFLAGS' 5 '' 6 'PREFLIB' 7 'lib' 8 'LIBDIRPREFIX' 9 '-L' 10 'CCCOM' 11 '%CC /STAND=VAXC /OBJ=.OBJ' 12 'SUFLIB' 13 '.olb' 14 'CC' 15 'CC' 16 'INCDIRPREFIX' 17 '-I' 18 'ENV' 19 HASH(0x545070) -> REUSED_ADDRESS 20 'SUFOBJ' 21 '.obj' 22 'SUFMAP' 23 HASH(0x545190) -> REUSED_ADDRESS 24 'LINKCOM' 25 '%LINK' 26 'LINK' 27 'LINK' 28 'LD' 29 'ld' 30 'SUFEXE' 31 '.exe' 32 'CFLAGS' 33 '' 34 'ARCOM' 35 '%AR %ARFLAGS %> %< %RANLIB %>' 36 'CXXCOM' 37 '%CXX %CXXFLAGS %_IFLAGS -c %< -o %>' 38 'ASCOM' 39 '%AS %ASFLAGS %< -o %>' 40 'AR' 41 'ar' 42 'CXX' 43 '%CC' 44 'LINKMODULECOM' 45 '%LD -r -o %> %<' 46 'AS' 47 'as' 48 'RANLIB' 49 'ranlib' 50 'SUFLIBS' 51 '.exe:.olb' 52 'LDFLAGS' 53 '' 'includes' => '' 'creator' => ARRAY(0x39df58) 0 'script' 1 'Construct' 2 7 3 'cons::Program' 4 1 5 undef 'dep' => ARRAY(0x558fdc) empty array 'dir' => dir=HASH(0x5492f8) -> REUSED_ADDRESS 'entry' => 'hello.exe' 'sources' => ARRAY(0x558f34) 0 file=HASH(0x558de4) -> REUSED_ADDRESS DB<2> exit Debugged program terminated. Use q to quit or R to restart, use O inhibit_exit to avoid stopping after program termination, h q, h R or h O to get additional info. DB<3> exit *** my modified construct. file looks like $env = new cons( CC => 'CC', CCOM => '%CC /STAND=VAXC /OBJ=.OBJ', LINK => 'LINK', LINKCOM => '%LINK' ); Program $env 'hello.exe', 'hello.obj'; $env->Objects('hello.c'); *** END ----- Original Message ----- From: "Steven Knight" <address@hidden> To: "Don's Email" <address@hidden> Cc: <address@hidden> Sent: Wednesday, May 09, 2001 8:38 AM Subject: Re: Fw: CONS on OpenVMS > Donald-- > > > I did play with the contruct. file in an attempt to setup a simple hello > > world for the VMS environment. My work resulted in a greater understanding > > of the flexibility of CONS. However, I ended with a deep recursion on > > subroutine "futil::mkdir" at cons. line 2927. > > What was the configuration that caused this recursion? > > > I'm attempting to perform the following commands in CONS: > > > > 1) I want to compile the hello.c code into hello.obj > > $ CC /STAND=VAXC HELLO.C > > Is the .OBJ extension a VMS standard, or just your preference for > your particular build configuration? > > > I included the "Objects" method, otherwise CONS didn't know how to construct > > the .OBJ file. > > You can use the SUFOBJ construction variable to set the object > suffix to '.OBJ'. That should eliminate having to use the Objects > method explicitly. > > Actually, Cons uses the Perl %Config values for the default file > extensions. Hence my question above; if .OBJ is the VMS standard > suffix for object files, and the Perl port to OpenVMS used that > file suffix, then it *should* have been stored in Perl's %Config > hash and Cons would have used the .OBJ extension by default. > > You can see what Cons is picking up from Perl as its default object > file extension by executing: > > perl -e "use Config; print $Config{_o}" > > (or the equivalent, if that idiom doesn't work on OpenVMS for some > reason). Actually, I'd be interested to know what the VMS version > of Perl has in the entir %Config hash... > > BTW, what version of Perl is this (perl -v)? > > Thanks for getting Cons to work on VMS. More portability is good... > > --SK > > > _______________________________________________ > address@hidden > http://mail.gnu.org/mailman/listinfo/cons-discuss > Cons URL: http://www.dsmit.com/cons/ > > |
[Prev in Thread] | Current Thread | [Next in Thread] |